1、二分法简单迭代法的matlab代码实现二分法、简单迭代法的matlab代码实现实验一 非线性方程的数值解法(一)信息与计算科学金融 崔振威 201002034031一、实验目的:熟悉二分法和简单迭代法的算法实现。二、实验内容:教材P40 2.1.5三、实验要求1 根据实验内容编写二分法和简单迭代法的算法实现2 简单比较分析两种算法的误差3 试构造不同的迭代格式,分析比较其收敛性(一)、二分法程序:function ef=bisect(fx,xa,xb,n,delta)% fx是由方程转化的关于x的函数,有fx=0。% xa 解区间上限% xb 解区间下限% n 最多循环步数,防止死循环。%de
2、lta 为允许误差x=xa;fa=eval(fx);x=xb;fb=eval(fx);disp( n xa xb k=0;while abs(x-x0)eps & k fplot(x5-3*x3-2*x2+2,-3,3);grid 得下图: 由上图可得知:方程在-3,3区间有根。(2)、二分法输出结果 f=x5-3*x3-2*x2+2f =x5-3*x3-2*x2+2 bisect(f,-3,3,20,10(-12) 2.0000 -3.0000 0 -1.5000 0.0313 3.0000 -3.0000 -1.5000 -2.2500 -31.6182 4.0000 -2.2500 -1
3、.5000 -1.8750 -8.4301 5.0000 -1.8750 -1.5000 -1.6875 -2.9632 6.0000 -1.6875 -1.5000 -1.5938 -1.2181 7.0000 -1.5938 -1.5000 -1.5469 -0.5382 8.0000 -1.5469 -1.5000 -1.5234 -0.2405 9.0000 -1.5234 -1.5000 -1.5117 -0.1015 10.0000 -1.5117 -1.5000 -1.5059 -0.0343 11.0000 -1.5059 -1.5000 -1.5029 -0.0014 12.
4、0000 -1.5029 -1.5000 -1.5015 0.0150 13.0000 -1.5029 -1.5015 -1.5022 0.0068 14.0000 -1.5029 -1.5022 -1.5026 0.0027 15.0000 -1.5029 -1.5026 -1.5027 0.0007 16.0000 -1.5029 -1.5027 -1.5028 -0.0003 17.0000 -1.5028 -1.5027 -1.5028 0.0002 18.0000 -1.5028 -1.5028 -1.5028 -0.0001 19.0000 -1.5028 -1.5028 -1.5
5、028 0.0001 20.0000 -1.5028 -1.5028 -1.5028 -0.00002、迭代法求方程:迭代法输出结果: f=inline(x5-3*x3-2*x2+2); x0,k=iterate(fun1,2)x0 = 2k = 1 x0,k=iterate(fun1,1.5)x0 = NaNk = 6 x0,k=iterate(fun1,2.5)x0 = NaNk = 5(3)、误差分析:由二分法和迭代法输出结果可知,通过定点迭代法得出方程的解误差比二分法大,而利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。b、g(x)=cos(sin(x)二分法求
6、方程: (1)、 在matlab的命令窗口中输入命令: fplot(cos(sin(x),-4,4);grid 得下图: 由上图可得知:方程在-4,4区间无根。(2)、二分法输出结果f=cos(sin(x)f =cos(sin(x) bisect(f,-4,4,20,10(-12) 2.0000 0 4.0000 2.0000 0.6143 3.0000 2.0000 4.0000 3.0000 0.9901 4.0000 3.0000 4.0000 3.5000 0.9391 5.0000 3.5000 4.0000 3.7500 0.8411 6.0000 3.7500 4.0000 3.
7、8750 0.7842 7.0000 3.8750 4.0000 3.9375 0.7554 8.0000 3.9375 4.0000 3.9688 0.7412 9.0000 3.9688 4.0000 3.9844 0.7341 10.0000 3.9844 4.0000 3.9922 0.7305 11.0000 3.9922 4.0000 3.9961 0.7288 12.0000 3.9961 4.0000 3.9980 0.7279 13.0000 3.9980 4.0000 3.9990 0.7275 14.0000 3.9990 4.0000 3.9995 0.7273 15.
8、0000 3.9995 4.0000 3.9998 0.7271 16.0000 3.9998 4.0000 3.9999 0.7271 17.0000 3.9999 4.0000 3.9999 0.7271 18.0000 3.9999 4.0000 4.0000 0.7270 19.0000 4.0000 4.0000 4.0000 0.7270 20.0000 4.0000 4.0000 4.0000 0.72702、迭代法求方程:迭代法输出结果: f=inline(cos(sin(x); x0,k=iterate(f,0.5)x0 = 0.7682k = 15 x0,k=iterate
9、(f,1)x0 = 0.7682k = 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)、由于该方程无解,所以无法比较误差。c、g(x)=x2-sin(x+0.15)二分法求方程: (1)、 在matlab的命令窗口中输入命令: fplot(x2-sin(x+0.15),-10,10);grid 得下图: 由上图可得知:方程在-3,3区间有根。(2)、二分法输出结果 f=x2-sin(x+0.15)f =x2-sin(
10、x+0.15) bisect(f,-3,3,30,10(-12) 1.0000 -3.0000 3.0000 0 -0.1494 2.0000 -3.0000 0 -1.5000 3.2257 3.0000 -1.5000 0 -0.7500 1.1271 4.0000 -0.7500 0 -0.3750 0.3637 5.0000 -0.3750 0 -0.1875 0.0726 6.0000 -0.1875 0 -0.0938 -0.0474 7.0000 -0.1875 -0.0938 -0.1406 0.0104 8.0000 -0.1406 -0.0938 -0.1172 -0.01
11、91 9.0000 -0.1406 -0.1172 -0.1289 -0.0045 10.0000 -0.1406 -0.1289 -0.1348 0.0029 11.0000 -0.1348 -0.1289 -0.1318 -0.0008 12.0000 -0.1348 -0.1318 -0.1333 0.0011 13.0000 -0.1333 -0.1318 -0.1326 0.0001 14.0000 -0.1326 -0.1318 -0.1322 -0.0003 15.0000 -0.1326 -0.1322 -0.1324 -0.0001 16.0000 -0.1326 -0.13
12、24 -0.1325 0.0000 17.0000 -0.1325 -0.1324 -0.1324 -0.0000 18.0000 -0.1325 -0.1324 -0.1325 -0.0000 19.0000 -0.1325 -0.1325 -0.1325 0.0000 20.0000 -0.1325 -0.1325 -0.1325 0.0000 21.0000 -0.1325 -0.1325 -0.1325 0.0000 22.0000 -0.1325 -0.1325 -0.1325 0.0000 23.0000 -0.1325 -0.1325 -0.1325 -0.0000 24.000
13、0 -0.1325 -0.1325 -0.1325 0.0000 25.0000 -0.1325 -0.1325 -0.1325 -0.0000 26.0000 -0.1325 -0.1325 -0.1325 0.0000 27.0000 -0.1325 -0.1325 -0.1325 0.0000 28.0000 -0.1325 -0.1325 -0.1325 0.0000 29.0000 -0.1325 -0.1325 -0.1325 0.0000 30.0000 -0.1325 -0.1325 -0.1325 -0.00002、迭代法求方程:迭代法输出结果: f=inline(x2-si
14、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,0.3)x0 = 0.3234k = 500 x0,k=iterate(f,0.001)x0 = 0.3234k = 500(3)、误差分析:由二分法和迭代法输出结果可知,利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。d、g(x)=xx-cos(x)二分法求方程: (1)、 在matlab的命令窗口中
15、输入命令: fplot(x(x-cos(x),-1,1);grid 得下图: 由上图可得知:方程在-1,1区间有根。(2)、二分法输出结果 f=x(x-cos(x)f =x(x-cos(x) bisect(f,-0.1,0.1,20,10(-12) 1.0000 -0.1000 0.1000 0 Inf 2.0000 -0.1000 0 -0.0500 -22.8740 + 3.5309i 3.0000 -0.0500 0 -0.0250 -43.6821 + 3.3947i 4.0000 -0.0250 0 -0.0125 -84.4110 + 3.2958i 1.0e+002 * 0.05
16、00 -0.0001 0 -0.0001 -1.6511 + 0.0323i 1.0e+002 * 0.0600 -0.0001 0 -0.0000 -3.2580 + 0.0319i 1.0e+002 * 0.0700 -0.0000 0 -0.0000 -6.4648 + 0.0317i 1.0e+003 * 0.0080 -0.0000 0 -0.0000 -1.2872 + 0.0032i 1.0e+003 * 0.0090 -0.0000 0 -0.0000 -2.5679 + 0.0032i 1.0e+003 * 0.0100 -0.0000 0 -0.0000 -5.1285 +
17、 0.0031i 1.0e+004 * 0.0011 -0.0000 0 -0.0000 -1.0249 + 0.0003i 1.0e+004 * 0.0012 -0.0000 0 -0.0000 -2.0490 + 0.0003i 1.0e+004 * 0.0013 -0.0000 0 -0.0000 -4.0971 + 0.0003i 1.0e+004 * 0.0014 -0.0000 0 -0.0000 -8.1931 + 0.0003i 1.0e+005 * 0.0001 -0.0000 0 -0.0000 -1.6385 + 0.0000i 1.0e+005 * 0.0002 -0.
18、0000 0 -0.0000 -3.2769 + 0.0000i 1.0e+005 * 0.0002 -0.0000 0 -0.0000 -6.5537 + 0.0000i 1.0e+006 * 0.0000 -0.0000 0 -0.0000 -1.3107 + 0.0000i 1.0e+006 * 0.0000 -0.0000 0 -0.0000 -2.6215 + 0.0000i 1.0e+006 * 0.0000 -0.0000 0 -0.0000 -5.2429 + 0.0000i2、迭代法求方程:迭代法输出结果: f=inline(x2-sin(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-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2