二分法、简单迭代法的matlab代码实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一非线性方程的数值解法(一)信息与计算科学金融崔振威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

得下图:

由上图可得知:方程在[-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.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

相关文档
最新文档