数值分析上机报告.docx

上传人:b****7 文档编号:10142973 上传时间:2023-02-08 格式:DOCX 页数:93 大小:531.53KB
下载 相关 举报
数值分析上机报告.docx_第1页
第1页 / 共93页
数值分析上机报告.docx_第2页
第2页 / 共93页
数值分析上机报告.docx_第3页
第3页 / 共93页
数值分析上机报告.docx_第4页
第4页 / 共93页
数值分析上机报告.docx_第5页
第5页 / 共93页
点击查看更多>>
下载资源
资源描述

数值分析上机报告.docx

《数值分析上机报告.docx》由会员分享,可在线阅读,更多相关《数值分析上机报告.docx(93页珍藏版)》请在冰豆网上搜索。

数值分析上机报告.docx

数值分析上机报告

数值分析上机报告

 

学院

班级

姓名

学号

指导教师

 

2013.06

内容

第一次上机

题目一

分别用不动点迭代与Newton法求解方程

的正根与负根。

(1)不动点迭代

a.原理

变形为

进行迭代,直到为止

变形后为有两种形式:

b.程序

注:

(初值为0,误差限为10e-6)

形式:

Lx1_1_1.m

x=zeros(100,1);

tol=1;

i=1;

x

(1)=0;

whiletol>=10e-6;

disp(x(i))

x(i+1)=exp(2*x(i))-5;

tol=abs(x(i+1)-x(i));

i=i+1;

end

disp(i-1);

形式:

Lx1_1_2.m

x=zeros(100,1);

tol=1;

i=1;

x

(1)=0;

whiletol>=10e-6;

disp(x(i))

x(i+1)=1/2*log(x(i)+5);

tol=abs(x(i+1)-x(i));

i=i+1;

end

disp(i-1);

c.运行结果

注:

(初值为0,误差限为10e-6)

正根:

x1

x2

x3

x4

x5

x6

0

0.80471895

0.87933560

0.88572188

0.88626470

0.88631081

负根:

x1

x2

x3

x4

0

-4

-4.99966454

-4.99995457

(2)Newton法

a.原理

假设

是方程

根的近似,考虑

点展开的一阶泰勒多项式:

则有:

即,

通过初始值p0,就可以产生序列:

针对本题来说,迭代公式为:

b.程序

注:

(误差限为10e-6)

Lx1_1_3.m

clc,clear%Newton法

p0=1;%求正根p0=-2;%求负根

TOL=10^(-6);N0=30;%Input

i=1;

formatlongg;

whilei<=N0

p=p0-(p0-exp(2*p0)+5)/(1-2*exp(2*p0));

disp(p);

ifabs(p-p0)

break;

else

i=i+1;

p0=p;

end

end

disp(i);

ifi>N0

disp('超过最大迭代步数,原方程无解!

');

end

c.运行结果

注:

(误差限为10e-6)

正根:

X0

X1

X2

X3

X4

1

0.89918386

0.88649410

0.88631513

0.88631509

负根:

X0

X1

X2

X3

-2

-5.09506038

-4.99995532

-4.99995460

结果分析:

不动点迭代会因为迭代公式选取的不同得出不同的迭代结果,而牛顿法迭代会因为初值选取的不同而得到不同的结果。

牛顿法比不动点迭代法收敛速度快,能使用较少的迭代步数达到理想的结果。

题目二

P100,2.6.9

对于

,使用下面的各种方法求位于[0.1,1]内的解,精确到10e-4。

a.二分法b.Newton法c.正割法d.试位法e.MÜller法

(1)二分法

a.原理

假定f(x)是定义在[a,b]上的连续函数,且f(a)和f(b)反号。

设a1=a和b1=b,p1是[a,b]的中点。

若f(p1)与f(a1)同号,让a2=p1,b2=b1;若f(pn)与f(a1)反号,让a2=a1,b2=p1;重复此过程直到f(pn)=0或者

终止迭代。

b.程序

注:

(误差限为10e-4)

Lx1_2_1.m

clc,clear%二分法

TOL=10^(-4);N0=30;

a=0.1;b=1;

i=1;

formatlongg;

FA=600*a^4-550*a^3+200*a^2-20*a-1;

whilei<=N0

p=a+(b-a)/2;

FP=600*p^4-550*p^3+200*p^2-20*p-1;

disp(i);

disp(a);

disp(b);

disp(p);

disp(FP);

ifFP==0||(b-a)/2

break;

else

i=i+1;

ifFA*FP>0

a=p;FA=FP;

else

b=p;

end

end

end

ifi>N0

disp('超过最大迭代步数,原方程无解!

');

end

c.运行结果

注:

(误差限为10e-4)

N

An

Bn

Pn

F(Pn)

1

0.1

1

0.55

11.8975

2

0.1

0.55

0.325

1.438515625

3

0.1

0.325

0.2125

-0.2729345703125

4

0.2125

0.325

0.26875

0.524329528808593

5

0.2125

0.26875

0.240625

0.116296443939208

6

0.2125

0.240625

0.2265625

-0.0805102884769422

7

0.2265625

0.240625

0.23359375

0.0173473896831275

8

0.2265625

0.23359375

0.230078125

.0317********

9

0.230078125

0.23359375

0.2318359375

-0.00721856665244491

10

0.2318359375

0.23359375

0.23271484375

0.00505592718842429

11

0.2318359375

0.23271484375

0.232275390625

-0.00108343871279004

12

0.232275390625

0.23271484375

0.2324951171875

0.00198571425098226

13

0.232275390625

0.2324951171875

0.23238525390625

0.000451005303902186

14

0.232275390625

0.23238525390625

0.232330322265625

-0.000316249816916248

(2)Newton法

a.原理

如题目一,令

得到本题迭代公式为:

b.程序

注:

(误差限为10e-4,初值x0=0.5)

Lx1_2_2.m

clc,clear%Newton法

p0=0.5;

TOL=10^(-4);

N0=30;

i=1;

formatlongg;

whilei<=N0

p=p0-(600*p0^4-550*p0^3+200*p0^2-20*p0-1)/(2400*p0^3-1650*p0^2+400*p0-20);

disp(i);

disp(p);

ifabs(p-p0)

break;

else

i=i+1;

p0=p;

end

end

ifi>N0

disp('超过最大迭代步数,原方程无解!

');

end

c.运行结果

注:

(误差限为10e-4,初值x0=0.5)

X0

X1

X2

X3

0.5

0.385185185185185

0.281282649165253

0.234848973527312

X4

X5

0.232357862421884

0.232352964768764

(3)正割法

a.原理

在Newton公式中使用近似公式

得到迭代公式为:

b.程序

注:

(误差限为10e-4,初值x0=0.15,x1=0.85)

Lx1_2_3.m

clc,clear%正割法

p0=0.15;p1=0.85;

TOL=10^(-4);

N0=30;

i=1;

q0=600*p0^4-550*p0^3+200*p0^2-20*p0-1;

q1=600*p1^4-550*p1^3+200*p1^2-20*p1-1;

whilei<=N0

p=p1-q1*(p1-p0)/(q1-q0);

disp(i+1);

disp(p);

ifabs(p-p1)

break;

else

i=i+1;

p0=p1;q0=q1;

p1=p;q1=600*p^4-550*p^3+200*p^2-20*p-1;

end

end

ifi>N0

disp('超过最大迭代步数,原方程无解!

');

end

c.运行结果

注:

(误差限为10e-4,初值x0=0.15,x1=0.85)

X0

X1

X2

X3

0.15

0.85

0.157********8641

0.163700278470673

X4

X5

X6

X7

0.240885373151151

0.231773092323929

0.232349065937536

0.232352966526348

(4)试位法

a.原理

在正割法基础上增加检验:

即对满足

初值x0和x1,x2取连接

所得直线截距。

但为了计算x3,需要检验

,若为负值,x3取连接

所得直线截距,否则,x3取连接

所得直线截距,并交换x0和x1下标,同理确定以后的Xk的值。

b.程序

注:

(误差限为10e-4,初值x0=0.1,x1=0.4)

Lx1_2_4.m

clc,clear%试位法

p0=0.1;p1=0.4;

TOL=10^(-4);N0=100;

i=1;

q0=600*p0^4-550*p0^3+200*p0^2-20*p0-1;

q1=600*p1^4-550*p1^3+200*p1^2-20*p1-1;

whilei<=N0

p=p1-q1*(p1-p0)/(q1-q0);

disp(i+1);

disp(p);

ifabs(p-p1)

break;

else

i=i+1;

q=600*p^4-550*p^3+200*p^2-20*p-1;

ifq*q1<0

p0=p1;

q0=q1;

end

p1=p;

q1=q;

end

end

ifi>N0

disp('超过最大迭代步数,原方程无解!

');

end

c.运行结果

注:

(误差限为10e-4,初值x0=0.1,x1=0.4)

X0

X1

X2

X3

0.1

0.4

0.196129032258065

0.223540690358892

X4

X5

X6

X7

0.230112203518914

0.231775415525863

0.232203*********

0.232314285473330

X8

0.232342947957081

(5)MÜller法

a.原理

MÜller法通过考虑经过

、和

的抛物线与x轴交点的横坐标来确定下一个近似值x3.以此类推。

b.程序

注:

(误差限为10e-4,初值x0=0.1,x1=0.3,x2=0.5)

Lx1_2_5.m

clc,clear%Müller法

TOL=10^(-4);N0=30;%Input

i=1;

x0=0.1;x1=0.3;x2=0.5;

h1=x1-x0;

h2=x2-x1;

det1=((600*x1^4-550*x1^3+200*x1^2-20*x1-1)-(600*x0^4-550*x0^3+200*x0^2-20*x0-1))/h1;

det2=((600*x2^4-550*x2^3+200*x2^2-20*x2-1)-(600*x1^4-550*x1^3+200*x1^2-20*x1-1))/h2;

d=(det2-det1)/(h2+h1);

whilei<=N0

b=det2+h2*d;

D=sqrt(b^2-4*(600*x2^4-550*x2^3+200*x2^2-20*x2-1)*d);

disp(i+2);

ifabs(b-D)

E=b+D;

else

E=b-D;

end

h=-2*(600*x2^4-550*x2^3+200*x2^2-20*x2-1)/E;

p=x2+h;

disp(p);

ifabs(h)

break;

end

x0=x1;

x1=x2;

x2=p;

h1=x1-x0;

h2=x2-x1;

det1=((600*x1^4-550*x1^3+200*x1^2-20*x1-1)-(600*x0^4-550*x0^3+200*x0^2-20*x0-1))/h1;

det2=((600*x2^4-550*x2^3+200*x2^2-20*x2-1)-(600*x1^4-550*x1^3+200*x1^2-20*x1-1))/h2;

d=(det2-det1)/(h2+h1);

i=i+1;

end

ifi>N0

disp('超过最大迭代步数,原方程无解!

');

end

c.运行结果

注:

(误差限为10e-4,初值x0=0.1,x1=0.3,x2=0.5)

X0

X1

X2

X3

0.1

0.3

0.5

0.250700784928408

X4

X5

X6

X7

0.223415890391080

0.232915574400838

0.232353054769987

0.232352964750002

结果分析:

通过实验结果比较我们可以看到,Newton法只需选取不同的初始值,便可求出全部的解,即牛顿法对于它的全部解都是收敛的。

二分法比较简单易行,但对初值的选取必须满足函数值乘积为负,且收敛速度较慢。

正割法是对Newton法的改进,Müller法和试位法是对正割法的改进,所以这几种算法差别不太大,但是,由于二者弥补了正割法的不足,所以,相对来说更精确一些。

题目三

用Newton法求解方程f(x)的零点,e=10-6,这里

再用求重根的两种方法求f(x)的零点。

a.原理

求重根的方法:

1、定义

,如果p是f(x)的一个m重零点,并且有

由于

,其中p是u(x)的单重零点。

应用牛顿法就可以得到如下公式:

迭代形式为:

如果g具有需要的连续性条件,则无论f(x)零点的重数,关于g的迭代公式就是二次收敛。

2、如果p是f(x)的多重零点,定义

b.程序

1.Newton法

注:

(误差限为10e-6,初值x0=0.5)

Lx1_3_1.m

clearall;clc;

p0=0.01;

tol=10e-6;

N0=100;

i=1;

formatlongg;

whilei<=N0

p=p0-(p0-sin(p0))/(1-cos(p0));

disp(i);

disp(p);

ifabs(p-p0)

break;

else

i=i+1;

p0=p;

end

end

ifi>N0

disp('超过最大迭代步数,原方程无解!

');

end

2.第一种求重根方法

注:

(误差限为10e-6,初值x0=0.5)

Lx1_3_2.m

%%第一种求重根方法

clearall;clc;

p0=0.5;

tol=10e-6;

N0=30;

i=1;

formatlongg;

whilei<=N0

p=p0-(p0-sin(p0))*(1-cos(p0))/((1-cos(p0))^2-(p0-sin(p0))*sin(p0));

disp(i);

disp(p);

ifabs(p-p0)

break;

else

i=i+1;

p0=p;

end

end

ifi>N0

disp('超过最大迭代步数,原方程无解!

');

end

3.第二种求重根方法

注:

(误差限为10e-6,初值x0=0.5,重数m取为2)

Lx1_3_3.m

%%第二种求重根方法

clearall;clc;

p0=0.5;

tol=10e-6;

N0=30;

m=2;

i=1;

formatlongg;

whilei<=N0

p=p0-m*(p0-sin(p0))/(1-cos(p0));

disp(i);

disp(p);

ifabs(p-p0)

break;

else

i=i+1;

p0=p;

end

end

ifi>N0

disp('超过最大迭代步数,原方程无解!

');

end

c.运行结果

1.Newton法

注:

(误差限为10e-6,初值x0=0.5)

X0

X1

X2

X3

0.5

0.33193193948911

0.22088000070362

0.147133388298258

X22

X23

X24

X25

6.6327737201341

e-05

4.42184894556538

e-05

2.94789959330259

e-05

1.9652668253838

e-05

2.第一种求重根方法

注:

(误差限为10e-6,初值x0=0.5)

X0

X1

X2

X3

0.5

0.00827405688774502

3.77629891905318

e-08

1.50220208792981

e-08

3.第二种求重根方法

注:

(误差限为10e-6,初值x0=0.5,重数m取为2)

X0

X1

X2

X3

0.5

0.163863878978219

0.054523422036457

0.0181708716869622

X4

X5

X6

X7

0.006056823901423

0.002018936362807

0.0006729786046717

0.0002243261947150

X8

X9

X10

X11

7.47753973315954

e-05

2.49251358236218

e-05

8.30837786750213

e-06

2.76950811671404

e-06

结果分析:

由课本知识我们得知,用Newton法求重根时只能达到线性收敛。

从以上实验结果可以看出,Newton法的迭代次数要远远多于后面两种求重根方法的迭代次数。

而后两种方法相比,第一种方法收敛速度要明显快于第二种方法。

题目四

用Newton法求解方程f(x)的零点,e=10-6,这里。

再用Steffensen’smethod加速其收敛。

a.原理

1.Newton法

Newton法原理同题1。

2.Steffensen’s方法

和AitkenΔ2方法稍有不同,Steffensen’s方法构造同样的开始的前4项:

p0,p1,p2和

但是,在这一步,它假设

比p2更好的逼近p,从而将不动点迭代应用于

而不是p2。

使用这种符号产生的序列为:

每个第3项由{Δ2}方法产生,其余的由不动点方法产生。

b.程序

1.Newton法

注:

(误差限为10e-6,初值x0=0.5)

程序同题目三。

2.Steffensen’s方法

Lx1_4_2.m

%%Steffensen's方法

clearall;clc

p0=0.5;

TOL=10^(-6);N0=100;

i=1;

whilei<=N0

p1=sin(p0);

p2=sin(p1);

delte_2_pn=p2-2*p1+p0;

ifdelte_2_pn==0%第一处终止条件

break;

end

p=p0-(p1-p0)^2/delte_2_pn;

disp(i);

disp(p);

disp(p1);

disp(p2);

ifabs(p-p0)

break;

else

i=i+1;

p0=p;

end

end

ifi>N0

disp('超过最大迭代步数,原方程无解!

');

end

c.运行结果

1.Newton法

注:

(误差限为10e-6,初值x0=0.5)

X0

X1

X2

X3

0.5

0.33193193948911

0.22088000070362

0.147133388298258

X22

X23

X24

X25

6.6327737201341

e-05

4.42184894556538

e-05

2.94789959330259

e-05

1.9652668253838

e-05

2.Steffensen’s方法

k

0

0.5

0.479425538604203

0.461269555033181

1

0.324969053926893

0.319279459635451

0.313882516583032

2

0.21435451045412

0.21271675584922

0.211116198489844

3

0.142245941441953

0.14176672797167

0.141292338252804

4

0.0946386892699293

0.0944974809095575

.0943********

16

0.000727912493706975

0.000727912429425437

0.000727912365143916

17

0.00048516061896117

0.000485160599928252

0.000485160580895337

18

0.000322176006869238

0.000322176001295734

0.00032217599572223

19

0.00020757026446947

0.000207570262978928

0.000207570261488386

20

0.000125603451414741

结果分析:

与Newton法相比,Steffensen的收敛速度应该会更快一些,因为,理论上Steffensen方法是二次收敛的,而应用于求重根的Newton方法只能

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

当前位置:首页 > 解决方案 > 营销活动策划

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

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