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

上传人:b****6 文档编号:6050940 上传时间:2023-01-03 格式:DOCX 页数:16 大小:196.77KB
下载 相关 举报
二分法简单迭代法的matlab代码实现.docx_第1页
第1页 / 共16页
二分法简单迭代法的matlab代码实现.docx_第2页
第2页 / 共16页
二分法简单迭代法的matlab代码实现.docx_第3页
第3页 / 共16页
二分法简单迭代法的matlab代码实现.docx_第4页
第4页 / 共16页
二分法简单迭代法的matlab代码实现.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

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

《二分法简单迭代法的matlab代码实现.docx》由会员分享,可在线阅读,更多相关《二分法简单迭代法的matlab代码实现.docx(16页珍藏版)》请在冰豆网上搜索。

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

二分法简单迭代法的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('[nxaxbxcfc]');

fori=1:

n

xc=(xa+xb)/2;x=xc;fc=eval(fx);

X=[i,xa,xb,xc,fc];

disp(X),

iffc*fa<0

xb=xc;

elsexa=xc;

end

if(xb-xa)

end

(二)、简单迭代法程序:

function[x0,k]=iterate(f,x0,eps,N)

ifnargin<4

N=500;

end

ifnargin<3

ep=1e-12;

end

x=x0;

x0=x+2*eps;

k=0;

whileabs(x-xO)>eps&k

x=feval(f,xO);

k=k+1;

endx0=x;

ifk==N

end

解:

a、g(x)=x5-3x3-2x2+2二分法求方程:

(1)、在matlab的命令窗口中输入命令:

>>fplot('[xA5-3*xA3-2*xA2+2]',[-3,3]);grid

得下图:

 

由上图可得知:

方程在[-3,3]区间有根。

 

(2)、二分法输出结果

>>f='xA5-3*xA3-2*xA2+2'f=

xA5-3*xA3-2*xA2+2>>bisect(f,-3,3,20,10A(-12))

2.0000-3.0000

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('xA5-3*xA3-2*xA2+2');

>>[xO,k]=iterate(fun1,2)x0=

2

k=

1

>>[xO,k]=iterate(fun1,1.5)x0=

NaN

k=

6

>>[xO,k]=iterate(fun1,2.5)x0=

NaNk=

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,10A(-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

12.0000

3.9961

4.0000

3.9980

0.7279

13.0000

3.9980

4.0000

3.9990

0.7275

14.0000

3.9990

4.0000

3.9995

0.7273

15.0000

3.9995

4.0000

3.9998

0.7271

16.0000

3.9998

4.0000

3.9999

0.7271

17.0000

3.9999

4.0000

3.9999

0.7271

18.0000

3.9999

4.0000

4.0000

0.7270

19.0000

4.0000

4.0000

4.0000

0.7270

20.0000

4.0000

4.0000

4.0000

0.7270

2、迭代法求方程:

迭代法输出结果:

>>f=inline('cos(sin(x))');

>>[x0,k]=iterate(f,0.5)

x0=

0.7682

k=

15

>>[xO,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)、由于该方程无解,所以无法比较误差。

2

c、g(x)=x-sin(x+0.15)

二分法求方程:

(1)、在matlab的命令窗口中输入命令:

>>fplotCQ-sin(x+0.15)]',[-10,10]);grid得下图:

-10-B*64-20246810

由上图可得知:

方程在[-3,3]区间有根。

(2)、二分法输出结果

>>f='xA2-sin(x+0.15)'

f=

xA2-sin(x+0.15)

>>bisect(f,-3,3,30,10A(-12))

1.0000

-3.0000

3.0000

0

-0.1494

2.0000

-3.0000

0

-1.5000

3.2257

3.0000

-1.5000

0

-0.7500

1.1271

4.0000

-0.7500

0

-0.3750

0.3637

5.0000

-0.3750

0

-0.1875

0.0726

6.0000

-0.1875

0

-0.0938

-0.0474

7.0000

-0.1875

-0.0938

-0.1406

0.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.1348

0.0029

11.0000

-0.1348

-0.1289

-0.1318

-0.0008

12.0000

-0.1348

-0.1318

-0.1333

0.0011

13.0000

-0.1333

-0.1318

-0.1326

0.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.1325

0.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.1325

0.0000

20.0000

-0.1325

-0.1325

-0.1325

0.0000

21.0000

-0.1325

-0.1325

-0.1325

0.0000

22.0000

-0.1325

-0.1325

-0.1325

0.0000

23.0000

-0.1325

-0.1325

-0.1325

-0.0000

24.0000

-0.1325

-0.1325

-0.1325

0.0000

25.0000

-0.1325

-0.1325

-0.1325

-0.0000

26.0000

-0.1325

-0.1325

-0.1325

0.0000

27.0000

-0.1325

-0.1325

-0.1325

0.0000

28.0000

-0.1325

-0.1325

-0.1325

0.0000

29.0000

-0.1325

-0.1325

-0.1325

0.0000

30.0000

-0.1325

-0.1325

-0.1325

-0.0000

2、迭代法求方程:

迭代法输出结果:

>>f=inline('xA2-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=

>>[xO,k]=iterate(f,O.OO1)x0=

0.3234k=

500

(3)、误差分析:

由二分法和迭代法输出结果可知,利用二分法求出的结果中,可以清楚

看出方程等于零时的解,其误差比迭代法小。

x-cos(x)

d、g(x)=x

二分法求方程:

(1)、在matlab的命令窗口中输入命令:

>>fplot('[xA(x-cos(x))]',[-1,1]);grid

得下图:

12

10

8

6

4

2

0

-2

-1OB-0.614-0.200.2040.61

由上图可得知:

方程在[-1,1]区间有根。

(2)、二分法输出结果

>>f='x人(x-cos(x))'

xA(x-cos(x))

>>bisect(f,-0.1,0.1,20,10A(-12))

0Inf

1.0000-0.10000.1000

2.0000

-22.8740+3.5309i

3.0000

-43.6821+3.3947i

4.0000

-84.4110+3.2958i

1.0e+002*

0.0500

-1.6511+0.0323i

1.0e+002*

0.0600

-3.2580+0.0319i

1.0e+002*

0.0700

-6.4648+0.0317i

1.0e+003*

0.0080

-1.2872+0.0032i

1.0e+003*

0.0090

-2.5679+0.0032i

1.0e+003*

0.0100

-5.1285+0.0031i

1.0e+004*

0.0011

-1.0249+0.0003i

1.0e+004*

0.0012

-2.0490+0.0003i

1.0e+004*

0.0013

-4.0971+0.0003i

1.0e+004*

0.0014

-8.1931+0.0003i

1.0e+005*

0.0001

-1.6385+0.0000i

1.0e+005*

0.0002

-3.2769+0.0000i

-0.1000

-0.0500

-0.0250

-0.0001

-0.0001

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

-0.0500

-0.0250

-0.0125

-0.0001

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

-0.0000

 

1.0e+005*

0

-0.0000

0.0002

-0.0000

-6.5537+0.0000i

1.0e+006*

0.0000

-0.0000

0

-0.0000

-1.3107+0.0000i

1.0e+006*

0.0000

-0.0000

0

-0.0000

-2.6215+0.0000i

1.0e+006*

0.0000

-0.0000

0

-0.0000

-5.2429+O.OOOOi

2、迭代法求方程:

迭代法输出结果:

>>f=inline('xA2-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)、误差分析:

由二分法和迭代法输出结果可知,利用二分法求出的结果中,可以清楚看

出方程等于零时的解,其误差比迭代法小。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1