数学实验报告实验序号:03日期:2013年12月5日班级应数二班姓名黄怡丹学号1101114037实验名称求代数方程的近似根问题背景描述:求代数方程0)(xf的根是最常见的数学问题之一,当)(xf是一次多项式时,称0)(xf为线性方程,否则称之为非线性方程.当0)(xf是非线性方程时,由于)(xf的多样性,尚无一般的解析解法可使用,但如果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间[a,b],或给出某根的近似值0x.实验目的:1.了解对分法、迭代法、牛顿切线法求方程近似根的基本过程.2.求代数方程(组)的.。实验原理与数学模型:1.对分法基本思想:将有根区间进行对分,判断出解在某个分段内,然后再对该段对分,依次类推,直到满足给定的精度为止.适用范围求有根区间内的单根或奇重实根.数学原理:介值定理设)(xf在],[ba上连续,0)()(bfaf,即()0fa,()0fb或()0fa,()0fb.则根据连续函数的介值定理,在),(ba内至少存在一点,使()0f.具体步骤:(1)令02abx,计算0()fx;(2)若0()0fx,则0x是()0fx的根,停止计算,输出结果0xx.若0()()0fafx,则令1aa,10bx,若0()()0fafx,则令10ax,1bb;1112abx.……,有ka、kb以及相应的2kkkabx.(3)若()kfx(为预先给定的精度要求),退出计算,输出结果2kkkabx;反之,返回(1),重复(1),(2),(3).以上方法可得到每次缩小一半的区间序列{[,]}kkab,在(,)kkab中含有方程的根.当区间长kkba很小时,取其中点2kkkabx为根的近似值,显然有1111111()()()2222kkkkkkxbababa以上公式可用于估计对分次数k.2.迭代法基本思想:构造()0fx的一个等价方程()xx从某个近似根0x出发,计算1()kkxx,,2,1,0k可得一个迭代序列{}kx,这种方法称为迭代法.若{}kx收敛,即*limkkxx,假设()x连续,有1limlim()(lim)kkkkkkxxx即可知,{}kx的极限*x是()xx的根,也就是()0fx的根.当然,若kx发散,迭代法就失败.迭代过程1()kkxx收敛的常用判别标准:当根区间[,]ab较小,且对某一0[,]xab,()'x明显小于1时,则迭代收敛迭代法的加速:(1)松弛法:若()x与kx同是*x的近似值,则1(1)()kkkkkxxx是两个近似值的加权平均,其中k称为权重,现通过确定k看能否得到加速.迭代方程是:()xx其中()(1)()xxx,令'()1'()0xx,试确定:**()xx当'()1x时,有11'()x,即当11'()kkx,'()11'()kkkxx时,可望获得较好的加速效果,于是有松弛法:1(1)()kkkkkxxx,11'()kkx(2)Altken方法:**()xx,*x是它的根,0x是其近似根.设10()xx,21()xx,因为****222121[][()()]()()xxxxxxxx'xx,用差商10211010()()xxxxxxxx近似代替()',有**212110()xxxxxxxx,解出*x,得2*212210()2xxxxxxx由此得出公式(1)()kkxx;(2)(1)()kkxx;(2)(1)2(2)1(2)(1)()2kkkkkkkxxxxxxx,,2,1,0k这就是Altken公式。3.牛顿(Newton)法(牛顿切线法)基本思想:()0fx是非线性方程,一般较难解决,多采用线性化方法.20000''()()()'()()()2!ffxfxfxxxxx记:000()()'()()Pxfxfxxx()Px是一次多项式,用()0Px作为()0fx的近似方程.000()()'()()0Pxfxfxxx的解为000()'()fxxxfx0('()0)fx记为1x,一般地,记1()'()kkkkfxxxfx,2,1,0k即为牛顿法公式。实验所用的软件及版本:MatlabR2012b主要内容(要点):4.分别用对分法、普通迭代法、松弛迭代法、Altken迭代法、牛顿切法线等5种方法,求方程sin()txx的正的近似根,10t.(建议取5.0t.时间许可的情况下,可进一步考虑125.0,25.0t的情况.)实验过程记录(含:基本步骤、主要程序清单及异常情况记录等):第三题1.对分法symsxfx;a=0;b=2;fx=0.5*x-sin(x);x=(a+b)/2;i=0;ffx=subs(fx,'x',x);ifffx==0;disp(['therootis:',num2str(x)])%第一次therootis:少加单引号第二次改的时候只把therootis了单引号,把:放在了单引号外面elsedisp('iaibif(xi)')whileabs(ffx)0.0001&ab;disp([num2str(i),'',num2str(a),'',num2str(b),'',num2str(ffx)])%把ffx误写为fxfa=subs(fx,'x',a);ffx=subs(fx,'x',x);iffa*ffx0b=x;elsea=x;endi=i+1;x=(a+b)/2;end%少写了enddisp([num2str(i),'',num2str(a),'',num2str(b),'',num2str(ffx)])endfprintf('所求的解是:x=%f,迭代步数是:%d/n',x,i)%在所求的解是:x=%f,迭代步数是:%d/n少加单引号异常记录ti1Error:File:ti1.mLine:7Column:23Expressionorstatementisincorrect--possiblyunbalanced(,{,or[.ti1Error:File:ti1.mLine:7Column:25Expressionorstatementisincorrect--possiblyunbalanced(,{,or[.ti1Error:File:ti1.mLine:21Column:9TheinputcharacterisnotvalidinMATLABstatementsorexpressions.ti1Error:File:ti1.mLine:6Column:1AtleastoneENDismissing:thestatementmaybeginhere.正确结果ti1iaibif(xi)002-0.34147112-0.3414721.52-0.2474931.752-0.1089941.8752-0.01658651.8751.93750.03523661.8751.90630.008863971.89061.9063-0.003976881.89061.89840.002414791.89451.8984-0.00078829101.89451.89650.00081139111.89451.89551.1094e-05所求的解是:x=1.895020,迭代步数是:11/n2.普通迭代法symsxfxgx;gx=sin(x)/0.5;fx=0.5*x-sin(x);disp('ixf(x)')x=1.5;i=0;ffx=subs(fx,'x',x);whileabs(ffx)0.0001;disp([num2str(i),'',num2str(i),'',num2str(ffx)]);x=subs(gx,'x',x);ffx=subs(fx,'x',x);i=i+1;enddisp([num2str(i),'',num2str(x),'',num2str(ffx)])fprintf('所求的解是:x=%f,迭代步数是:%d/n',x,i)异常记录ti2Error:File:ti2.mLine:2Column:21UnexpectedMATLABexpression.ti2Error:File:ti2.mLine:8Column:6Theexpressiontotheleftoftheequalssignisnotavalidtargetforanassignment.ti2Undefinedfunctionorvariable'sinx'.Errorinti2(line2)gx=sin(x)/0.5;fx=0.5*x-sinx;异常结果ti2ixf(x)00-0.3412100-0.086485000.05073900-0.033238000.02067700-0.013357000.008443300-0.005416000.003443100-0.0022017000.001402800-0.00089584000.0005712500-0.00036462000.0002325900-0.0001484201.89569.4692e-05所求的解是:x=1.895610,迭代步数是:0/n正确运行结果ti2ixf(x)00-0.24749110.08612422-0.057058330.03468544-0.022565550.01416366-0.0091159770.005780288-0.0037017990.0023561010-0.001505511110.000959651212-0.0006126813130.000390761414-0.0002493915150.000159091616-0.00010152171.89566.477e-05所求的解是:x=1.895573,迭代步数是:17/n3.松弛迭代法symsfxgxxdgx;gx=sin(x)*2;fx=0.5*x-sin(x);dgx=diff(gx,'x');x=1.5;k=0;ggx=subs(gx,'x',x);ffx=subs(fx,'x',x);dgxx=subs(dgx,'x',x);%在写ffx=subs(fx,'x',x)时少加了一个单引号disp('ixc')whileabs(ffx)0.0001;c=1/(1-dgxx);%把dgxx写成dgxdisp([num2str(i),'',num2str(x),'',num2str(c)])%漏写单引号x=(1-c)*x+c*ggx;i=i+1;ggx=subs(gx,'x',x);ffx=subs(fx,'x',x);dgxx=subs(dgx,'x',x);enddisp([num2str(i),'',num2str(x),'',num2str(c)])fprintf('所求的解是:x=%f,迭代步数是:%d/n',x,i)异常记录ti4Error:File:ti4.mLine:4Column:32UnexpectedMATLABexpression.ti4Error:File:ti4.mLine:8Column:39UnexpectedMATLABexpression.ti4Error:File:ti4.mLine:8Column:40UnexpectedMATLABexpression.ti4ixcUndefinedfunction'max'forinputargume