实验一 非线性方程的数值解法(一)
信息与计算科学金融 崔振威 201002034031
一、 实 验目的: 熟悉二分法和简单迭代法的算法实现。 二、 实 验内容: 教材 P40 2.1.5 三、 实 验要求
1 根据实验内容编写二分法和简单迭代法的算法实现 2 简单比较分析两种算法的误差
3 试构造不同的迭代格式,分析比较其收敛性 (一)、二分法程序:
function ef=bisect(fx,xa,xb,n,delta) % fx 是由方程转化的关于 x 的函数,有 fx=0 。 % xa 解区间上限 % xb 解区间下限
% n 最多循环步数,防止死循环。 Tlta 为允许误差 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) (二)、简单迭代法程序: 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-xO)>eps &k x=feval(f,xO); k=k+1; end x0=x; if k==N end 解:a、g(x)=x-3x-2x+2 二分法求方程: (1)、在matlab的命令窗口中输入命令: 5 3 2 >>fplot('[x5-3*x3-2*x2+2]',[-3,3]);grid 得下图: AAA 由上图可得知:方程在[-3,3]区间有根。 (2 )、二分法输出结果 >>f='xA5-3*xA3-2*xA2+2' f = xA5-3*xA3-2*xA2+2 >>bisect(f,-3,3,20,10A(-12))