数学与计算科学学院实验报告实验项目名称方程求根所属课程名称数值方法B实验类型验证实验日期2013-12-4班级学号姓名成绩1一、实验概述:【实验目的】1、熟练掌握用迭代法和牛顿法求非线性方程问题;2、熟练掌握运用matlab解决数值方法的问题。【实验原理】迭代法的原理:定理6.1假定函数x满足下列两项条件:1对于任意,xab,有axb,2存在正数1L,使对于任意,xab,有'1xL,则迭代过程1kkxx对于任意初值0,xab均收敛于方程xx的根*x,且有如下的误差估计式:*101kkLxxxxL。迭代法的计算步骤:1、准备提供迭代初值0x;2、迭代计算迭代值10xx;3、控制检查10xx:若10xx(为预先指定的精度),则以1x替换0x转步2继续迭代;当10xx时终止计算,取1x作为所求的结果。牛顿法原理:对于方程0fx,先将它改写成xx的形式,即需要针对所给的函数fx构造合适的迭代函数x。可令xxfx,这是相应的迭代公式是1kkkxxfx①2运用前述加速技巧,对于迭代过程①,其加速公式具有如下形式:11111kkkkkkkxxfxLxxxxL记1ML,上面两个式子可以合并写成1kkkfxxxM这种迭代公式通常称为简化的Newton公式,其相应的迭代函数是fxxxM②需要注意的是,由于L是'x的估计值,而xxfx,这里的1ML实际上是'fx的估计值。如果'fx代替②中的M,则得到如下形式的迭代函数:'fxxxfx其相应的迭代公式1'kkfxxxfx牛顿法的计算步骤:1、准备选定初始近似值0x,计算00ffx,''00ffx;2、迭代按公式10'0fxxf迭代一次,得新的近似值1x,计算''1111ffxffx3、控制如果1x满足1或12f,则终止迭代,以1x作为所求的根;否则转步4.此处1,2是允许误差,而1011011,=xxxCxxxCx当时;,当时;其中C是取绝对误差或相对误差的控制常数,一般可取1C,34、修改如果迭代次数达到预先指定的次数N或者'10f,则方法失败,否则以'111,,xff代替'000,,xff转步2继续迭代。【实验环境】Windows7Matlab2010a二、实验内容:【实验方案】1、用迭代法求方程2x3-x-1=0的在初值x0=0根;分别选取迭代函数为x1=)(213xx和x2=)(123xx求解。分析比较迭代函数选取的不同对收敛性的影响2、用牛顿法求x3-x-1=0在x0=1.5和x0=0附近的根,迭代10次。分析比较初值的选取对迭代法的影响【实验过程】(实验步骤、记录、数据、分析)1、编写相关程序,并运行;2、分析数据迭代法:x1x210.0000000.00000021.0000000.00000031.2599210.00000041.3122930.00000051.3223540.00000061.3242690.00000071.3246330.00000081.324702-1.02473891.324715inf101.324717inf111.324718inf4从上图的计算结果可以看出X1的结果随着迭代次数的增多而逐渐趋于稳定,X2的迭代方法结果很不稳定,最终导致数字溢出,因此x1=)(213xx的收敛性更好。牛顿法:x=1.5x=010.0000000.5000002-1.000000-5.0000003-0.500000-3.3648654-3.000000-2.2809555-2.038462-1.5562776-1.390282-1.0435057-0.911612-0.5614108-0.345028-11.8643459-1.427751-7.92596410-0.942418-5.30682911-0.404949-3.568284从上图看出,随着迭代次数的增加,两者的结果都在逐步趋于稳定,但是x=1.5迭代超过8次,x=0迭代超过7次以后,结果就开始不得不够稳定,总的来看,x=1.5的迭代效果更好,更具有收敛性。【实验结论】(结果)1、同一个方程,运用迭代法计算,运算的结果与迭代时选的的方程有极大的关系;2、牛顿法对方程迭代时,运算的结果与选择的初值有极大关系【实验小结】(收获体会)1.通过实验,更加深入了解牛顿法和迭代法对方程的求解,理解了求解释方程的选择与初值的选择对根的影响。2.增强了MATLAB的编程能力。5三、指导教师评语及成绩:评语评语等级优良中及格不及格1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强2.实验方案设计合理3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)4实验结论正确.成绩:指导教师签名:批阅日期:6附录1:源程序1、x=ones(1,10);y=ones(1,10);x(1)=0;y(1)=0;fori=1:10x(i+1)=(x(i)+1)^(1/3);y(i+1)=2*(y(i)^3)-1;endxy2、eps=10^(-5);x=ones(1,10);y=ones(1,10);x(1)=0;y(1)=0.5;fori=1:10x(i+1)=x(i)-(x(i).^3-x(i)-1)/(3*x(i).^2-1);y(i+1)=y(i)-(y(i).^3-y(i)-1)/(3*y(i).^2-1);if(abs(x(i+1)-x(i))eps&&abs(y(i+1)-y(i))eps)break;endendxy