二分法、简单迭代法的matlab代码实现教学文案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档