二分法、简单迭代法的matlab代码实现教学文案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二分法、简单迭代法的m a t l a b代码实现
实验一非线性方程的数值解法(一)信息与计算科学金融崔振威 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(fx);
x=xb;fb=eval(fx);
disp(' [ n xa xb xc fc ]');
for i=1:n
xc=(xa+xb)/2;x=xc;fc=eval(fx);
X=[i,xa,xb,xc,fc];
disp(X),
if fc*fa<0
xb=xc;
else xa=xc;
end
if (xb-xa) end (二)、简单迭代法程序: function [x0,k]=iterate (f,x0,eps,N) if nargin<4 N=500; end if nargin<3 ep=1e-12; end x=x0; x0=x+2*eps; k=0; while abs(x-x0)>eps & k x0=x; x=feval(f,x0); k=k+1; end x0=x; if k==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.0000 0 -1.5000 0.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.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.5028 0.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