二分法简单迭代法的matlab代码实现.docx
- 文档编号:13568875
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:14
- 大小:77.48KB
二分法简单迭代法的matlab代码实现.docx
《二分法简单迭代法的matlab代码实现.docx》由会员分享,可在线阅读,更多相关《二分法简单迭代法的matlab代码实现.docx(14页珍藏版)》请在冰点文库上搜索。
二分法简单迭代法的matlab代码实现
二分法、简单迭代法的matlab代码实现
实验一非线性方程的数值解法
(一)
信息与计算科学金融崔振威201002034031
一、实验目的:
熟悉二分法和简单迭代法的算法实现。
二、实验内容:
教材P402.1.5
三、实验要求
1根据实验内容编写二分法和简单迭代法的算法实现
2简单比较分析两种算法的误差
3试构造不同的迭代格式,分析比较其收敛性
(一)、二分法程序:
functionef=bisect(fx,xa,xb,n,delta)
%fx是由方程转化的关于x的函数,有fx=0。
%xa解区间上限
%xb解区间下限
%n最多循环步数,防止死循环。
%delta为允许误差
x=xa;fa=eval(fx);
x=xb;fb=eval(fx);
disp('[nxaxb
k=0;
whileabs(x-x0)>eps&k x0=x; x=feval(f,x0); k=k+1; end x0=x; ifk==N end 解: a、g(x)=x5-3x3-2x2+2 二分法求方程: (1)、在matlab的命令窗口中输入命令: >>fplot('[x^5-3*x^3-2*x^2+2]',[-3,3]);grid 得下图: 由上图可得知: 方程在[-3,3]区间有根。 (2)、二分法输出结果 >>f='x^5-3*x^3-2*x^2+2' f= x^5-3*x^3-2*x^2+2 >>bisect(f,-3,3,20,10^(-12)) 2.0000-3.00000-1.50000.0313 3.0000-3.0000-1.5000-2.2500-31.6182 4.0000-2.2500-1.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.0000-1.5029-1.5000-1.50150.0150 13.0000-1.5029-1.5015-1.50220.0068 14.0000-1.5029-1.5022-1.50260.0027 15.0000-1.5029-1.5026-1.50270.0007 16.0000-1.5029-1.5027-1.5028-0.0003 17.0000-1.5028-1.5027-1.50280.0002 18.0000-1.5028-1.5028-1.5028-0.0001 19.0000-1.5028-1.5028-1.50280.0001 20.0000-1.5028-1.5028-1.5028-0.0000 2、迭代法求方程: 迭代法输出结果: >>f=inline('x^5-3*x^3-2*x^2+2'); >>[x0,k]=iterate(fun1,2) x0= 2 k= 1 >>[x0,k]=iterate(fun1,1.5) x0= NaN k= 6 >>[x0,k]=iterate(fun1,2.5) x0= NaN k= 5 (3)、误差分析: 由二分法和迭代法输出结果可知,通过定点迭代法得出方程的解误差比二分法大,而利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。 b、g(x)=cos(sin(x)) 二分法求方程: (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.000004.00002.00000.6143 3.00002.00004.00003.00000.9901 4.00003.00004.00003.50000.9391 5.00003.50004.00003.75000.8411 6.00003.75004.00003.87500.7842 7.00003.87504.00003.93750.7554 8.00003.93754.00003.96880.7412 9.00003.96884.00003.98440.7341 10.00003.98444.00003.99220.7305 11.00003.99224.00003.99610.7288 12.00003.99614.00003.99800.7279 13.00003.99804.00003.99900.7275 14.00003.99904.00003.99950.7273 15.00003.99954.00003.99980.7271 16.00003.99984.00003.99990.7271 17.00003.99994.00003.99990.7271 18.00003.99994.00004.00000.7270 19.00004.00004.00004.00000.7270 20.00004.00004.00004.00000.7270 2、迭代法求方程: 迭代法输出结果: >>f=inline('cos(sin(x))'); >>[x0,k]=iterate(f,0.5) x0= 0.7682 k= 15 >>[x0,k]=iterate(f,1) x0= 0.7682 k= 15 >>[x0,k]=iterate(f,1.5) x0= 0.7682 k= 16 >>[x0,k]=iterate(f,2) x0= 0.7682 k= 15 >>[x0,k]=iterate(f,2.5) x0= 0.7682 k= 14 (3)、由于该方程无解,所以无法比较误差。 c、g(x)=x2-sin(x+0.15) 二分法求方程: (1)、在matlab的命令窗口中输入命令: >>fplot('[x^2-sin(x+0.15)]',[-10,10]);grid 得下图: 由上图可得知: 方程在[-3,3]区间有根。 (2)、二分法输出结果 >>f='x^2-sin(x+0.15)' f= x^2-sin(x+0.15) >>bisect(f,-3,3,30,10^(-12)) 1.0000-3.00003.00000-0.1494 2.0000-3.00000-1.50003.2257 3.0000-1.50000-0.75001.1271 4.0000-0.75000-0.37500.3637 5.0000-0.37500-0.18750.0726 6.0000-0.18750-0.0938-0.0474 7.0000-0.1875-0.0938-0.14060.0104 8.0000-0.1406-0.0938-0.1172-0.0191 9.0000-0.1406-0.1172-0.1289-0.0045 10.0000-0.1406-0.1289-0.13480.0029 11.0000-0.1348-0.1289-0.1318-0.0008 12.0000-0.1348-0.1318-0.13330.0011 13.0000-0.1333-0.1318-0.13260.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.1324-0.13250.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.13250.0000 20.0000-0.1325-0.1325-0.13250.0000 21.0000-0.1325-0.1325-0.13250.0000 22.0000-0.1325-0.1325-0.13250.0000 23.0000-0.1325-0.1325-0.1325-0.0000 24.0000-0.1325-0.1325-0.13250.0000 25.0000-0.1325-0.1325-0.1325-0.0000 26.0000-0.1325-0.1325-0.13250.0000 27.0000-0.1325-0.1325-0.13250.0000 28.0000-0.1325-0.1325-0.13250.0000 29.0000-0.1325-0.1325-0.13250.0000 30.0000-0.1325-0.1325-0.1325-0.0000 2、迭代法求方程: 迭代法输出结果: >>f=inline('x^2-sin(x+0.15)'); >>[x0,k]=iterate(f,1.96) x0= NaN k= 12 >>[x0,k]=iterate(f,0,2) x0= -0.1494 k= 1 >>[x0,k]=iterate(f,0.2) x0= 0.3234 k= 500 >>[x0,k]=iterate(f,0.3) x0= 0.3234 k= 500 >>[x0,k]=iterate(f,0.001) x0= 0.3234 k= 500 (3)、误差分析: 由二分法和迭代法输出结果可知,利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。 d、g(x)=xx-cos(x) 二分法求方程: (1)、在matlab的命令窗口中输入命令: >>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.10000.10000Inf 2.0000-0.10000-0.0500-22.8740+3.5309i 3.0000-0.05000-0.0250-43.6821+3.3947i 4.0000-0.02500-0.0125-84.4110+3.2958i 1.0e+002* 0.0500-0.00010-0.0001-1.6511+0.0323i 1.0e+002* 0.0600-0.00010-0.0000-3.2580+0.0319i 1.0e+002* 0.0700-0.00000-0.0000-6.4648+0.0317i 1.0e+003* 0.0080-0.00000-0.0000-1.2872+0.0032i 1.0e+003* 0.0090-0.00000-0.0000-2.5679+0.0032i 1.0e+003* 0.0100-0.00000-0.0000-5.1285+0.0031i 1.0e+004* 0.0011-0.00000-0.0000-1.0249+0.0003i 1.0e+004* 0.0012-0.00000-0.0000-2.0490+0.0003i 1.0e+004* 0.0013-0.00000-0.0000-4.0971+0.0003i 1.0e+004* 0.0014-0.00000-0.0000-8.1931+0.0003i 1.0e+005* 0.0001-0.00000-0.0000-1.6385+0.0000i 1.0e+005* 0.0002-0.00000-0.0000-3.2769+0.0000i 1.0e+005* 0.0002-0.00000-0.0000-6.5537+0.0000i 1.0e+006* 0.0000-0.00000-0.0000-1.3107+0.0000i 1.0e+006* 0.0000-0.00000-0.0000-2.6215+0.0000i 1.0e+006* 0.0000-0.00000-0.0000-5.2429+0.0000i 2、迭代法求方程: 迭代法输出结果: >>f=inline('x^2-sin(x+0.15)'); x0= 0.3234 k= 500 >>[x0,k]=iterate(f,0.01) x0= 0.3234 k= 500 >>[x0,k]=iterate(f,0.81) x0= 0.3234 k= 500 >>[x0,k]=iterate(f,0.61) x0= 0.3234 k= 500 (3)、误差分析: 由二分法和迭代法输出结果可知,利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二分法 简单 迭代法 matlab 代码 实现