1非线性方程求根 2.docx

上传人:b****5 文档编号:7497723 上传时间:2023-01-24 格式:DOCX 页数:13 大小:52.64KB
下载 相关 举报
1非线性方程求根 2.docx_第1页
第1页 / 共13页
1非线性方程求根 2.docx_第2页
第2页 / 共13页
1非线性方程求根 2.docx_第3页
第3页 / 共13页
1非线性方程求根 2.docx_第4页
第4页 / 共13页
1非线性方程求根 2.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

1非线性方程求根 2.docx

《1非线性方程求根 2.docx》由会员分享,可在线阅读,更多相关《1非线性方程求根 2.docx(13页珍藏版)》请在冰豆网上搜索。

1非线性方程求根 2.docx

1非线性方程求根2

桂林电子科技大学

数学与计算科学学院实验报告

实验室:

实验日期:

2010年4月17日

学号

0800730121

批次

3

姓名

彭兆拓

成绩

课程

名称

数值分析

实验项目

名称

1非线性方程求根

指导

教师

李光云

一,实验目的

通过实验,熟悉非线性方程求根的经典数值方法,掌握二分法,简单迭代法,牛顿迭代法的算法思想

二,实验原理

求非线性方程的数值解的方法一般有

1.二分法

要求在所给含根区间内有且只有一个根.即

.求根方法为不断取区间中点求函数值

将中点替代与之同号的端点,实现含根区间逐步减半,达到逐步接近方程根的目的.

2.简单迭代法

利用方程

构造迭代格式

选取初值

产生迭代序列

在迭代格式收敛的情况下,可以得到

的近似根.

3.牛顿迭代法

是取特殊迭代格式

的迭代法.

三,使用仪器,材料

计算机一台;Mathematica软件.

四,实验内容与步骤

1.用二分法求方程

的解,精确到5位小数.

2.求解方程

内根的下列迭代法

(1)

(2)

(3)

(4)

试通过实验找出收敛的迭代法.

3.编写程序,分别用下列方法求解方程

.

(1)牛顿迭代法;

(2)

;

(3)*

;

比较各个方法的收敛速度.

五,实验过程原始记录(数据,图表,计算等)

1、解:

Plot[Cos[Sin[x]]-0.75,{x,-5,5}]

(*二分法*

*输入数据,[a,b]为含根区间,f[x]为已知函数,e为允许误差*)

Clear[x];

a=-3.;

b=-2;

f[x_]:

=Cos[Sin[x]-0.75];

e=10^(-3);

(****************************)

If[f[a]*f[b]>0,Print["[a,b]区间上f[x]无解!

"],

i=1;

While[Abs[a-b]>e,

If[Abs[f[(b+a)/2]]

If[f[a]*f[(b+a)/2]>0,a=(b+a)/2,b=(b+a)/2];

Print["第",i,"次二分区间得:

[",a,",",b,"],区间中点为:

",(a+b)/2,

",f[x]=",f[(a+b)/2]];

i=i+1;

]

Print["方程根为x=",(a+b)/2,",f[x]=",f[(a+b)/2]];

]

(****************************)

第1次二分区间得:

[-2.5,-2],区间中点为:

-2.25,f[x]=0.0427101

第2次二分区间得:

[-2.25,-2],区间中点为:

-2.125,f[x]=-0.0295192

第3次二分区间得:

[-2.25,-2.125],区间中点为:

-2.1875,f[x]=0.00500699

第4次二分区间得:

[-2.1875,-2.125],区间中点为:

-2.15625,f[x]=-0.0126648

第5次二分区间得:

[-2.1875,-2.15625],区间中点为:

-2.17188,f[x]=-0.00392973

第6次二分区间得:

[-2.1875,-2.17188],区间中点为:

-2.17969,f[x]=0.000513602

方程根为x=-2.17969,f[x]=0.000513602

2、

(1)*输入数据,max为最大迭代次数,g[x]为迭代格式,

x0为迭代初值,e为允许误差,k为计数器*)

Clear[x];

max=10;

g[x_]:

=(x^2+x+1)^(1/3);

x0=1.5;

e=10^(-3);

k=1;

(*利用迭代公式形成迭代序列*)

xx=g[x0];

Print["第",k,"次迭代x=",xx];

While[Abs[x0-xx]>e,

If[k>max,

x0=xx;Print["达到最大迭代次数,可能为死循环!

"],

x0=xx;

xx=g[x0];

k=k+1;

Print["第",k,"次迭代x=",xx];

]

]

(************************************************)

第1次迭代x=1.68099

第2次迭代x=1.76589

第3次迭代x=1.80536

第4次迭代x=1.82363

第5次迭代x=1.83206

第6次迭代x=1.83596

第7次迭代x=1.83775

第8次迭代x=1.83858

(2)(*简单迭代法*

*输入数据,max为最大迭代次数,g[x]为迭代格式,

x0为迭代初值,e为允许误差,k为计数器*)

Clear[x];

max=30;

g[x_]:

=1+1/x+1/x^2;

x0=1.5;

e=10^(-3);

k=1;

(*利用迭代公式形成迭代序列*)

xx=g[x0];

Print["第",k,"次迭代x=",xx];

While[Abs[x0-xx]>e,

If[k>max,

x0=xx;Print["达到最大迭代次数,可能为死循环!

"],

x0=xx;

xx=g[x0];

k=k+1;

Print["第",k,"次迭代x=",xx];

]

]

(************************************************)

第1次迭代x=2.11111

第2次迭代x=1.69806

第3次迭代x=1.93572

第4次迭代x=1.78348

第5次迭代x=1.87509

第6次迭代x=1.81773

第7次迭代x=1.85279

第8次迭代x=1.83103

第9次迭代x=1.84441

第10次迭代x=1.83614

第11次迭代x=1.84123

第12次迭代x=1.83809

第13次迭代x=1.84003

第14次迭代x=1.83883

第15次迭代x=1.83957

(3)(*简单迭代法*

*输入数据,max为最大迭代次数,g[x]为迭代格式,

x0为迭代初值,e为允许误差,k为计数器*)

Clear[x];

max=30;

g[x_]:

=x^3-x^2-1;

x0=1.5;

e=10^(-3);

k=1;

(*利用迭代公式形成迭代序列*)

xx=g[x0];

Print["第",k,"次迭代x=",xx];

While[Abs[x0-xx]>e,

If[k>max,

x0=xx;Print["达到最大迭代次数,可能为死循环!

"],

x0=xx;

xx=g[x0];

k=k+1;

Print["第",k,"次迭代x=",xx];

]

]

(************************************************)

第1次迭代x=0.125

第2次迭代x=-1.01367

第3次迭代x=-3.06911

第4次迭代x=-39.3287

第5次迭代x=-62379.3

第6次迭代x=-2.42733*10^14

第7次迭代x=-1.43017*10^43

第8次迭代x=-2.92523*10^129

第9次迭代x=-2.503114349471163*10^388

第10次迭代x=-1.568346682658564*10^1165

第11次迭代x=-3.85768008432428*10^3495

第12次迭代x=-5.7408820864370*10^10486

第13次迭代x=-1.8920642529243*10^31460

第14次迭代x=-6.773414323074*10^94380

第15次迭代x=-3.107584347897*10^283142

第16次迭代x=-3.001019214385*10^849427

第17次迭代x=-2.70275281386*10^2548282

第18次迭代x=-1.97432654417*10^7644847

第19次迭代x=-7.6958563660*10^22934541

第20次迭代x=-4.5579636837*10^68803625

第21次迭代x=-9.469184568*10^206410876

General:

:

ovfl:

Overflowoccurredincomputation.>>

General:

:

ovfl:

Overflowoccurredincomputation.>>

第22次迭代x=Overflow[]

第23次迭代x=Overflow[]

第24次迭代x=Overflow[]

第25次迭代x=Overflow[]

第26次迭代x=Overflow[]

第27次迭代x=Overflow[]

第28次迭代x=Overflow[]

第29次迭代x=Overflow[]

第30次迭代x=Overflow[]

第31次迭代x=Overflow[]

达到最大迭代次数,可能为死循环!

由实验可知、此收敛方式发散

(4)(*简单迭代法*

*输入数据,max为最大迭代次数,g[x]为迭代格式,

x0为迭代初值,e为允许误差,k为计数器*)

Clear[x];

max=30;

g[x_]:

=(x^2+1)/(x^2-1);

x0=1.8;

e=10^(-3);

k=1;

(*利用迭代公式形成迭代序列*)

xx=g[x0];

Print["第",k,"次迭代x=",xx];

While[Abs[x0-xx]>e,

If[k>max,

x0=xx;Print["达到最大迭代次数,可能为死循环!

"],

x0=xx;

xx=g[x0];

k=k+1;

Print["第",k,"次迭代x=",xx];

]

]

(************************************************)

第1次迭代x=1.89286

第2次迭代x=1.77432

第3次迭代x=1.93101

第4次迭代x=1.73293

第5次迭代x=1.99848

第6次迭代x=1.66802

第7次迭代x=2.12216

第8次迭代x=1.57085

第9次迭代x=2.3628

第10次迭代x=1.43641

第11次迭代x=2.88097

第12次迭代x=1.27397

第13次迭代x=4.21024

第14次迭代x=1.11957

第15次迭代x=8.89126

第16次迭代x=1.02562

第17次迭代x=39.5336

第18次迭代x=1.00128

第19次迭代x=781.452

第20次迭代x=1.

第21次迭代x=305333.

第22次迭代x=1.

第23次迭代x=4.66144*10^10

第24次迭代x=1.

第25次迭代x=-9.0072*10^15

第26次迭代x=1.

Power:

:

infy:

Infiniteexpression1/0.encountered.>>

第27次迭代x=ComplexInfinity

\[Infinity]:

:

indet:

Indeterminateexpression0ComplexInfinityencountered.>>

第28次迭代x=Indeterminate

3、

(1)(*牛顿迭代法*

*输入数据,f[x]为已知函数,x0为初值,e为允许误差*)

Clear[x];

f[x_]:

=x^2+2x*E^x+E^(2x);

x0=0.0;

e=10^(-5);

(*利用牛顿迭代公式求迭代序列*)

k=1;

df[x_]:

=D[f[x],x];

xx=x0-f[x]/df[x]/.x->x0;

Print["第",k,"次迭代x=",xx];

While[Abs[x0-xx]>e,

If[k>100,

x0=xx;Print["达到最大迭代次数,可能为死循环!

"],

x0=xx;

xx=x0-f[x]/df[x]/.x->x0;

k=k+1;

Print["第",k,"次迭代x=",xx];]]

(************************************************)

第1次迭代x=-0.25

第2次迭代x=-0.39864

第3次迭代x=-0.480194

第4次迭代x=-0.522967

第5次迭代x=-0.544876

第6次迭代x=-0.555965

第7次迭代x=-0.561543

第8次迭代x=-0.56434

第9次迭代x=-0.565741

第10次迭代x=-0.566442

第11次迭代x=-0.566793

第12次迭代x=-0.566968

第13次迭代x=-0.567056

第14次迭代x=-0.567099

第15次迭代x=-0.567121

第16次迭代x=-0.567132

第17次迭代x=-0.567138

(2)(*牛顿迭代法*

*输入数据,f[x]为已知函数,x0为初值,e为允许误差*)

Clear[x];

f[x_]:

=x^2+2x*E^x+E^(2x);

x0=0.0;

e=10^(-5);

(*利用牛顿迭代公式求迭代序列*)

k=1;

df[x_]:

=D[f[x],x];

xx=x0-2*f[x]/df[x]/.x->x0;

Print["第",k,"次迭代x=",xx];

While[Abs[x0-xx]>e,

If[k>100,

x0=xx;Print["达到最大迭代次数,可能为死循环!

"],

x0=xx;

xx=x0-2*f[x]/df[x]/.x->x0;

k=k+1;

Print["第",k,"次迭代x=",xx];]]

(************************************************)

第1次迭代x=-0.5

第2次迭代x=-0.566311

第3次迭代x=-0.567143

第4次迭代x=-0.567143

与方法一相比,第2种迭代方式更简便

六,实验结果分析或总结

通过此次试验,了解了如何使用Mathematica软件解决非线性问题的求解问题,以及简单迭代法、牛顿迭代法、二分法求解非线性方程的根,但由于对mathematic软件的不熟悉,使得有些地方还不是不太明白,对简单迭代法的一些问题还是不了解.总的来说,本次试验基本熟悉了本课所要求掌握的内容。

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

当前位置:首页 > 小学教育 > 其它课程

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

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