1、二分法简单迭代法的matlab代码实现实验一非线性方程的数值解法(一)信息与计算科学金融 崔振威201002034031一、 实验目的:熟悉二分法和简单迭代法的算法实现。二、 实验内容:教材 P40 2.1.5三、 实验要求1根据实验内容编写二分法和简单迭代法的算法实现2简单比较分析两种算法的误差3试构造不同的迭代格式,分析比较其收敛性(一)、二分法程序:function ef=bisect(fx,xa,xb ,n, delta)% fx是由方程转化的关于 x的函数,有fx=0。% xa解区间上限% xb解区间下限% n最多循环步数,防止死循环。%delta为允许误差x=xa;fa=eval(
2、fx);x=xb;fb=eval(fx);disp( n xa xb xc fc );for i=1: nxc=(xa+xb)/2;x=xc;fc=eval(fx);X=i,xa,xb,xc,fc;disp(X),if fc*fa0xb=xc;else xa=xc;endif (xb-xa)delta,break,e ndend(二)、简单迭代法程序:fun ctio n x0,k=iterate (f,x0,eps,N)if nargin4N=500;endif nargineps & k fplot(xA5-3*xA3-2*xA2+2,-3,3);grid得下图:由上图可得知:方程在-3,
3、3区间有根。(2 )、二分法输出结果 f=xA5-3*xA3-2*xA2+2 f =xA5-3*xA3-2*xA2+2 bisect(f,-3,3,20,10A(-12)2.0000 -3.00003.0000-3.0000-1.5000-2.2500-31.61824.0000-2.2500-1.5000-1.8750-8.43015.0000-1.8750-1.5000-1.6875-2.96326.0000-1.6875-1.5000-1.5938-1.21817.0000-1.5938-1.5000-1.5469-0.53828.0000-1.5469-1.5000-1.5234-0.
4、24059.0000-1.5234-1.5000-1.5117-0.101510.0000-1.5117-1.5000-1.5059-0.034311.0000-1.5059-1.5000-1.5029-0.001412.0000-1.5029-1.5000-1.50150.015013.0000-1.5029-1.5015-1.50220.006814.0000-1.5029-1.5022-1.50260.002715.0000-1.5029-1.5026-1.50270.000716.0000-1.5029-1.5027-1.5028-0.000317.0000-1.5028-1.5027
5、-1.50280.000218.0000-1.5028-1.5028-1.5028-0.000119.0000-1.5028-1.5028-1.50280.000120.0000-1.5028-1.5028-1.5028-0.00002、迭代法求方程:迭代法输出结果: f=inlin e(xA5-3*xA3-2*xA2+2); xO,k=iterate(fu n1,2) x0 =2k =1 xO,k=iterate(fu n1,1.5) x0 =NaNk =6 xO,k=iterate(fu n1,2.5) x0 =NaN k =5(3)、误差分析:由二分法和迭代法输出结果可知, 通过定点迭代
6、法得出方程的解误差比二分法大,而利用二分法求出的结果中, 可以清楚看出方程等于零时的解, 其误差比迭代法小。b、g(x)=cos(sin(x)二分法求方程:(1)、 在matlab的命令窗口中输入命令: fplot(cos(si n(x),-4,4);grid得下图:由上图可得知:方程在-4,4区间无根。(2 )、二分法输出结果f=cos(si n( x)f =cos(s in( x) bisect(f,-4,4,20,10A(-12)2.000004.00002.00000.61433.00002.00004.00003.00000.99014.00003.00004.00003.50000
7、.93915.00003.50004.00003.75000.84116.00003.75004.00003.87500.78427.00003.87504.00003.93750.75548.00003.93754.00003.96880.74129.00003.96884.00003.98440.734110.00003.98444.00003.99220.730511.00003.99224.00003.99610.728812.00003.99614.00003.99800.727913.00003.99804.00003.99900.727514.00003.99904.00003.
8、99950.727315.00003.99954.00003.99980.727116.00003.99984.00003.99990.727117.00003.99994.00003.99990.727118.00003.99994.00004.00000.727019.00004.00004.00004.00000.727020.00004.00004.00004.00000.72702、迭代法求方程: 迭代法输出结果: f=in li ne(cos(s in( x); x0,k=iterate(f,0.5)x0 =0.7682k =15 xO,k=iterate(f,1)x0 =0.76
9、82k =15 x0,k=iterate(f,1.5)x0 =0.7682k =16 x0,k=iterate(f,2)x0 =0.7682k =15 x0,k=iterate(f,2.5)x0 =0.7682k =14(3)、由于该方程无解,所以无法比较误差。2c、g(x)=x -sin(x+0.15)二分法求方程:(1)、 在matlab的命令窗口中输入命令: fplotCQ-si n(x+0.15),-10,10);grid 得下图:-10 -B *6 4 -2 0 2 4 6 8 10由上图可得知:方程在-3,3区间有根。(2 )、二分法输出结果 f=xA2-s in( x+0.15)
10、f =xA2-s in( x+0.15) bisect(f,-3,3,30,10A(-12)1.0000-3.00003.00000-0.14942.0000-3.00000-1.50003.22573.0000-1.50000-0.75001.12714.0000-0.75000-0.37500.36375.0000-0.37500-0.18750.07266.0000-0.18750-0.0938-0.04747.0000-0.1875-0.0938-0.14060.01048.0000-0.1406-0.0938-0.1172-0.01919.0000-0.1406-0.1172-0.1
11、289-0.004510.0000-0.1406-0.1289-0.13480.002911.0000-0.1348-0.1289-0.1318-0.000812.0000-0.1348-0.1318-0.13330.001113.0000-0.1333-0.1318-0.13260.000114.0000-0.1326-0.1318-0.1322-0.000315.0000-0.1326-0.1322-0.1324-0.000116.0000-0.1326-0.1324-0.13250.000017.0000-0.1325-0.1324-0.1324-0.000018.0000-0.1325
12、-0.1324-0.1325-0.000019.0000-0.1325-0.1325-0.13250.000020.0000-0.1325-0.1325-0.13250.000021.0000-0.1325-0.1325-0.13250.000022.0000-0.1325-0.1325-0.13250.000023.0000-0.1325-0.1325-0.1325-0.000024.0000-0.1325-0.1325-0.13250.000025.0000-0.1325-0.1325-0.1325-0.000026.0000-0.1325-0.1325-0.13250.000027.00
13、00-0.1325-0.1325-0.13250.000028.0000-0.1325-0.1325-0.13250.000029.0000-0.1325-0.1325-0.13250.000030.0000-0.1325-0.1325-0.1325-0.00002、迭代法求方程:迭代法输出结果: f=i nlin e(xA2-si n(x+0.15); x0,k=iterate(f,1.96)x0 =NaNk =12 x0,k=iterate(f,0,2) x0 =-0.1494k =1 x0,k=iterate(f,0.2) x0 =0.3234k =500 x0,k=iterate(f,
14、0.3) x0 =0.3234k = xO,k=iterate(f,O.OO1) x0 =0.3234 k =500(3)、误差分析:由二分法和迭代法输出结果可知,利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。x-cos(x)d、g(x)=x二分法求方程:(1)、 在matlab的命令窗口中输入命令: fplot(xA(x-cos(x),-1,1);grid得下图:121086420-2 -1 OB -0.6 14 -0.2 0 0.2 04 0.6 1由上图可得知:方程在-1,1区间有根。(2 )、二分法输出结果 f=x 人(x-cos(x)xA(x-cos(x)
15、bisect(f,-0.1,0.1,20,10A(-12)0 Inf1.0000 -0.1000 0.10002.0000-22.8740 + 3.5309i3.0000-43.6821 + 3.3947i4.0000-84.4110 + 3.2958i1.0e+002 *0.0500-1.6511 + 0.0323i1.0e+002 *0.0600-3.2580 + 0.0319i1.0e+002 *0.0700-6.4648 + 0.0317i1.0e+003 *0.0080-1.2872 + 0.0032i1.0e+003 *0.0090-2.5679 + 0.0032i1.0e+003
16、 *0.0100-5.1285 + 0.0031i1.0e+004 *0.0011-1.0249 + 0.0003i1.0e+004 *0.0012-2.0490 + 0.0003i1.0e+004 *0.0013-4.0971 + 0.0003i1.0e+004 *0.0014-8.1931 + 0.0003i1.0e+005 *0.0001-1.6385 + 0.0000i1.0e+005 *0.0002-3.2769 + 0.0000i-0.1000-0.0500-0.0250-0.0001-0.0001-0.0000-0.0000-0.0000-0.0000-0.0000-0.0000
17、-0.0000-0.0000-0.0000-0.0000-0.0500-0.0250-0.0125-0.0001-0.0000-0.0000-0.0000-0.0000-0.0000-0.0000-0.0000-0.0000-0.0000-0.0000-0.00001.0e+005 *0-0.00000.0002-0.0000-6.5537 + 0.0000i1.0e+006 *0.0000-0.00000-0.0000-1.3107 + 0.0000i1.0e+006 *0.0000-0.00000-0.0000-2.6215 + 0.0000i1.0e+006 *0.0000-0.00000-0.0000-5.2429 + O.OOOOi2、迭代法求方程:迭代法输出结果: f=i nlin e(xA2-si n(x+0.15);x0 =0.3234k =500 x0,k=iterate(f,0.01)x0 =0.3234k =500 x0,k=iterate(f,0.81)x0 =0.3234k =500 x0,k=iterate(f,0.61)x0 =0.3234k =500(3)、误差分析:由二分法和迭代法输出结果可知, 利用二分法求出的结果中, 可以清楚看出方程等于零时的解,其误差比迭代法小。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1