数学实验报告实验序号:四日期:2014年12月26日班级姓名学号实验名称求代数方程的近似根(解)问题背景描述:求代数方程f(x)=0的根是最常见的数学问题之一(这里称为代数方程,主要是想和后面的微分方程区别开.为简明起见,在本实验的以下叙述中,把代数方程简称为方程),当f(x)=0是一次多项式时,称f(x)=0为线性方程,否则称之为非线性方程.当f(x)=0是非线性方程时,由于f(x)的多样性,尚无一般的解析解法可使用,但如果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间[a,b],或给出某根的近似值.在实际问题抽象出的数学模型中,可以根据物理背景确定;也可根据的草图等方法确定,还可用对分法、迭代法以及牛顿切线法大致确定根的分布情况.实验目的:1、了解用对分法、普通迭代法、松弛迭代法、Altken迭代法、牛顿切法线求方程近似根的方法2、掌握用对分法、普通迭代法、松弛迭代法、Altken迭代法、牛顿切法线求方程近似根的基本过程,会编写简单的程序解决问题实验原理与数学模型:1、对分法对分法思想:将区域不断对分,判断根在某个分段内,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间内的单实根或奇重实根.设f(X)在[a,b]上连续,,即,或,.则根据连续函数的介值定理,在内至少存在一点,使.下面的方法可以求出该根:(1)令,计算;(2)若,则是的根,停止计算,输出结果.若,则令,,若,则令,;,……,有、以及相应的.(3)若(为预先给定的精度要求),退出计算,输出结果;反之,返回(1),重复(1),(2),(3).以上方法可得到每次缩小一半的区间序列,在中含有方程的根.当区间长很小时,取其中点为根的近似值,显然有以上公式可用于估计对分次数.分析以上过程不难知道,对分法的收敛速度与公比为的等比级数相同.由于,可知大约对分10次,近似根的精度可提高三位小数.对分法的收敛速度较慢,它常用来试探实根的分布2、迭代法1)迭代法的基本思想:由方程构造一个等价方程从某个近似根出发,令,可得序列,这种方法称为迭代法.若收敛,即,只要连续,有即可知,的极限是的根,也就是的根.当然,若发散,迭代法就失败.2)迭代法的加速:a)松弛法:若与同是的近似值,则是两个近似值的加权平均,其中称为权重,现通过确定看能否得到加速.迭代方程是:其中,令,试确定:当时,有,即当,时,可望获得较好的加速效果,于是有松弛法:,松弛法的加速效果是明显的,甚至不收敛的迭代函数经加速后也能获得收敛.b)Altken方法:松弛法要先计算,在使用中有时不方便,为此发展出以下的Altken公式:,是它的根,是其近似根.设,,因为,用差商近似代替,有,解出,得由此得出公式;;,这就是Altken公式,它的加速效果也是十分明显的,它同样可使不收敛的迭代格式获得收敛.3、牛顿(Newton)法(牛顿切线法)1)牛顿法的基本思想:是非线性方程,一般较难解决,多采用线性化方法.记:是一次多项式,用作为的近似方程.的解为记为,一般地,记即为牛顿法公式.2)牛顿法的收敛速度:对牛顿法,迭代形式为:注意分子上的,所以当时,,牛顿法至少是二阶收敛的,而在重根附近,牛顿法是线性收敛的.牛顿法的缺点是:(1)对重根收敛很慢;(2)对初值要求较严,要求相当接近真值.因此,常用其他方法确定初值,再用牛顿法提高精度。实验所用软件及版本:MATLAB2012主要内容(要点):分别用对分法、普通迭代法、松弛迭代法、Altken迭代法、牛顿切法线等5种方法,求方程的正的近似根,.(建议取.时间许可的话,可进一步考虑的情况.)实验过程记录(含基本步骤、主要程序清单及异常情况记录等):%对分法clcclearsymsxfx;a=0.01;b=3;t=0.5;fx=t*x-sin(x);x=(a+b)/2;k=0;ffx=subs(fx,'x',x);ifffx==0;disp(['therootis:',num2str(x)]);elsedisp('kakbkf(xk)')whileabs(ffx)0.0001&ab;disp([num2str(k),'',num2str(a),'',num2str(b),'',num2str(ffx)]);fa=subs(fx,'x',a);ffx=subs(fx,'x',x);iffa*ffx0b=x;elsea=x;endk=k+1;x=(a+b)/2;enddisp([num2str(k),'',num2str(a),'',num2str(b),'',num2str(ffx)])endfprintf('所求的解是:x=%f,迭代次数是:%d\n',x,k)%普通迭代法clcclearsymsxfxgx;t=0.5;gx=sin(x)/t;fx=t*x-sin(x);x=1.3;k=0;ffx=subs(fx,'x',x);whileabs(ffx)0.0001;disp([num2str(k),'',num2str(x),'',num2str(ffx)]);x=subs(gx,'x',x);ffx=subs(fx,'x',x);k=k+1;enddisp([num2str(k),'',num2str(x),'',num2str(ffx)]);fprintf('所求的解是:x=%f,迭代次数是:%d\n',x,k)%松弛迭代法clcclearsymsfxgxxdgx;t=0.5;gx=sin(x)*2;fx=t*x-sin(x);dgx=diff(gx,'x');x=1.7;k=0;ggx=subs(gx,'x',x);ffx=subs(fx,'x',x);dgxx=subs(dgx,'x',x);disp('kxw');whileabs(ffx)0.0001;w=1/(1-dgxx);disp([num2str(k),'',num2str(x),'',num2str(w)]);x=(1-w)*x+w*ggx;k=k+1;ggx=subs(gx,'x',x);ffx=subs(fx,'x',x);dgxx=subs(dgx,'x',x);enddisp([num2str(k),'',num2str(x),'',num2str(w)]);fprintf('所求的解是:x=%f,迭代次数是:%d\n',x,k)%Altken迭代法clcclearsymsxfxgxt=0.5;gx=2*sin(x);fx=t*x-sin(x);disp('kxx1x2')x=1.5;k=0;ffx=subs(fx,'x',x);whileabs(ffx)0.0001;u=subs(gx,'x',x);v=subs(gx,'x',u);disp([num2str(k),'',num2str(x),'',num2str(u),'',num2str(v)])x=v-(v-u)^2/(v-2*u+x);k=k+1;ffx=subs(fx,'x',x);enddisp([num2str(k),'',num2str(x),'',num2str(u),'',num2str(v)])fprintf('所求的解是:x=%f,迭代次数是:%d\n',x,k)%牛顿法clcclearsymsxfxgx;t=0.5;fx=t*x-sin(x);gx=diff(fx,'x');x1=0.7;x2=1.6;x3=3.5;k=0;disp('kx1x2x3')fx1=subs(fx,'x',x1);fx2=subs(fx,'x',x2);fx3=subs(fx,'x',x3);gx1=subs(gx,'x',x1);gx2=subs(gx,'x',x2);gx3=subs(gx,'x',x3);whileabs(fx1)0.0001|abs(fx2)0.0001|abs(fx3)0.0001;disp([num2str(k),'',num2str(x1),'',num2str(x2),'',num2str(x3)]);x1=x1-fx1/gx1;x2=x2-fx2/gx2;x3=x3-fx3/gx3;k=k+1;fx1=subs(fx,'x',x1);fx2=subs(fx,'x',x2);fx3=subs(fx,'x',x3);gx1=subs(gx,'x',x1);gx2=subs(gx,'x',x2);gx3=subs(gx,'x',x3);enddisp([num2str(k),'',num2str(x1),'',num2str(x2),'',num2str(x3)])fprintf('所求的解是:x1=%f,x2=%f,x3=%f迭代次数是:%d\n',x1,x2,x3,k)实验结果报告与实验总结:1、实验结果%对分法kakbkf(xk)00.013-0.2453411.5053-0.2453421.5052.25250.3497531.87872.2525-0.01358141.87872.06560.1527651.87871.97220.06557561.87871.92550.02497471.87871.90210.005438681.89041.9021-0.004135891.89041.89630.00063524101.89331.8963-0.0017543111.89481.8963-0.00056056121.89481.89553.7089e-05所求的解是:x=1.895175,迭代次数是:12%普通迭代法01.3-0.3135611.92710.02637121.8744-0.01708631.90850.01077141.887-0.006918651.90080.004393761.8921-0.002811371.89770.001790481.8941-0.001143791.89640.00072918101.8949-0.00046547111.89590.0002969121.8953-0.00018947131.89560.00012088141.8954-7.7131e-05所求的解是:x=1.895400,迭代次数是:14%松弛迭代法kxw01.70.7951111.92530.5902521.8960.6101431.89550.61014所求的解是:x=1.895494,迭代次数是:3%Altken迭代法kxx1x201.61.99911.819311.87521.90811.887321.89531.89561.895431.89551.89561.8954所求的解是:x=1.895494,迭代次数是:3%牛顿法kx1x2x300.71.63.51-0.410921.97712.037520.0545641.8991.90523-0.000108591.89551.8955所求的解是:x1=-0.000109,x2=1.895501,x3=1.895548迭代次数是:32、实验总结在调试和运行的过程中,选取不同的等价方程和不同的初值,得到的结果不同,精确度也有相差异。但五种方法所得的数值相近,基本在误差允许范围内。从运行结果看,相对而言二分法和普通迭代法的收敛速度过慢,不是最佳方法。松弛迭代法和altken法的加速效果是明显的。牛顿法的收敛速度也较快,但需要得出原函数的导函数,在某些情况下是不可行的。故在这五种方法中,相较而言松弛迭代法和altken法更为可行。思考与深入:通过本实验加深了解了求方程实根的近似值的有效方法。学习并掌握了用对分法、普通迭代法、松弛迭代法、Altken迭代法、牛顿切法线求方程近似根的基本过程。并认识到对于不同的题目,需要确定好求根区间,或给出某根的近似值,这对于结果的精度有很大影响。同时,深刻了解了对分法、普通迭代法、松弛迭代法、Altken迭代法、牛顿切法线这五种方法的