小组计算方法课程实验Word文件下载.docx

上传人:b****4 文档编号:17610249 上传时间:2022-12-07 格式:DOCX 页数:8 大小:106.73KB
下载 相关 举报
小组计算方法课程实验Word文件下载.docx_第1页
第1页 / 共8页
小组计算方法课程实验Word文件下载.docx_第2页
第2页 / 共8页
小组计算方法课程实验Word文件下载.docx_第3页
第3页 / 共8页
小组计算方法课程实验Word文件下载.docx_第4页
第4页 / 共8页
小组计算方法课程实验Word文件下载.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

小组计算方法课程实验Word文件下载.docx

《小组计算方法课程实验Word文件下载.docx》由会员分享,可在线阅读,更多相关《小组计算方法课程实验Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。

小组计算方法课程实验Word文件下载.docx

为给定精度,此时xkx*即为满足要求的近似根。

2)二分法算法

1. 

计算[a,b]区间的中点存放在变量x0中:

x0(a+b)/2

2. 

如果函数值f(x0)=0,则x0是f(x)=0的实根x*,输出根x0,终止

3. 

如果函数值f(a)f(x0)<

0,则bx0,否则ax0

4. 

如果b-a(为给定的精度),则输出根的近似值(a+b)/2,终止,否则转1。

3)二分法程序(mathematica语言)

Clear[x]

f[x_]=Input[“键入函数f(x)=”];

a=Input[“键入左端点a=”];

b=Input[“键入右端点b=”];

Print[“a=”,a,“b=”,b,“f(x)=”,f[x]]

e1=10^(-10);

eps=Input[“键入根的误差限eps=”];

n=0;

While[b-a>

eps,

x=(a+b)/2;

n=n+1;

w=f[x];

If[Abs[w]<

e1,Print[“n=”,n,“x=”,x,“f[x]=”,w];

Break[]];

p=f[a]*w//N;

If[p<

0,b=x,a=x];

Print[“n=”,n,“x=”,x//N,“eps=”,b-a//N]

]

注:

本程序用于求非线性方程f(x)=0在区间[a,b]内的根,这里要求f(x)在区间[a,b]连续,且f(a)f(b)<

0。

程序执行后,先通过键盘输入函数f(x)和区间左端点a和右端点b及根的精度要求e,程序即可给出每次二分的次数和对应的点列xk,其中最后输出的结果即为所求的根。

4)程序中变量说明

x:

存放初值x0和二分法中的xk

a:

存放含根区间的左端点ak

b:

存放含根区间的右端点bk

e1:

描述f(xk)=0的微小值,这里用|f(xk)|<

e1表示f(xk)=0

n:

存放二分次数

语句If[p<

0,b=x,a=x]中p的一定要是算出的数值,否则会出现错误。

本程序中用“p=f[a]*w//N”而不用“p=f[a]*w”就是这个原因。

补充Mathematica程序为:

二、用Newton法求方程的根

Newton迭代法也称切线法,是非线性方程求根方法中收敛的最快的方法,其涉及的近似处理方法很有代表性。

1)Newton迭代法构造过程

将方程f(x)=0线性化处理为近似方程,然后用近似方程获得求根的迭代计算公式。

具体为:

设xk是f(x)=0的一个近似根,把f(x)在xk处作泰勒展开,得:

取前两项来近似代替f(x)(称为f(x)的线性化),则得近似线性方程:

设f(xk)0,令其解为xk+1,得:

上式称为求f(x)=0根的Newton(牛顿)迭代格式。

2)Newton迭代法算法

1.输入初值x0、迭代精度eps、函数f(x)和迭代最大次数Nmax

2.Fork=1,2,…,Nmax

1.1 

 

如果|f(x0)|<

eps1,则输出“迭代失败”提示并终止

1.2 

xx0-f(x0)/f(x0)

1.3 

如果|x-x0|<

eps,则输出根x,终止

1.4 

x0x

2.输出迭代失败,终止。

3)Newton迭代法程序

Clear[x,f,g];

f[x_]=Input["

f[x]="

];

g[x_]=D[f[x],x];

x0=Input["

输入迭代初值"

eps1=0.00000000001;

nmax=500;

eps=Input["

输入精度控制eps="

Do[u1=g[x0];

If[Abs[u1//N]<

eps1,Print["

迭代法失效"

x=x0-f[x0]/u1;

u1=Abs[x-x0]//N;

Print["

x="

x,"

n="

n,"

eps="

u1];

If[u1<

eps,Break[],x0=x],

{n,1,nmax}];

If[u1>

eps,Print["

迭代失败"

]]

说明:

本程序用于求非线性方程f(x)=0在x0附近的根。

程序执行后,先通过键盘输入迭代函数f(x)和迭代初值x0及根的精度要求eps,程序即可给出每次迭代的次数和对应的点列xk,其中最后输出的结果即为所求的根。

如果迭代超出500次还没有求出满足精度的根则输出迭代失败提示。

4)程序中变量说明:

x0:

存放初值和迭代过程中的xk

x:

存放迭代过程中的xk+1

nmax:

存放迭代允许的最大次数

u1:

临时变量

迭代最大次数可以修改为其他数字。

三、题目解答(Abs[x(k)-x(k-1)]<

0.001)

题1。

(x-2)*Exp[x]=1,取x0=2.5.

解:

用Mathematica程序直接迭代结果为:

用牛顿不动点迭代法得到的结果为:

题2。

2*Cos[x]-3*x+12=0,取x0=4.

题3。

3*x^2-Exp[x]=0,取x0=-1.

用牛顿不动点迭代法得到的结果为:

题4.用Newton迭代法求方程xex–1=0的根,取x0=0.5,要求误差不超过10-3。

用二分法求方程xex-1=0在[0,1]内的根,要求误差不超过10-3。

令f(x)=xex–1,因为f(0)=-1<

0,f

(1)=e-1>

0,所以可以用二分法。

执行二分法程序后,在输入的四个窗口中按提示分别输入

x*Exp[x]-1、0、1、0.001

每次输入后用鼠标点击窗口的“OK”按扭,输出计算结果:

a=0b=1f(x)=-1+exx

n=1x=0.5e=0.5

n=2x=0.75e=0.25

n=3x=0.625e=0.125

n=4x=0.5625e=0.0625

n=5x=0.59375e=0.03125

n=6x=0.578125e=0.015625

n=7x=0.570312e=0.0078125

n=8x=0.566406e=0.00390625

n=9x=0.568359e=0.00195312

n=10x=0.567383e=0.000976562

此结果说明共二分10次,求得的近似根为x=0.567383,其误差为e=0.000976562。

执行Newton迭代法程序后在输入的三个窗口中按提示分别输入

x*Exp[x]-1、0.5、0.001

x=0.57102n=1eps=0.0710204

x=0.567156n=2eps=0.00386487

x=0.567143n=3eps=0.0000122782

x=0.567143n=4eps=1.2347710-10

此结果说明迭代4次,求得误差为e=1.2347710-10的近似根,最后显示的近似根结果为x=0.567143,它只是部分表示,要看该近似根更详细的表示(如看其中前10位数)可以再键入命令N[x,10]后有近似根的为0.5671432904。

题5。

x^3-x^2-1=0,取x0=1.5.

题6。

Exp[x]+10*x-2=0,取x0=0.

实验小结与分析:

观察几道题的计算结果,二分法的迭代次数比牛顿迭代法的多,收敛速度较慢。

牛顿法一个主要优点:

当初始点充分靠近x*时,牛顿法收敛很快。

但是从程序中我们可以发现,牛顿迭代法要求导数,牛顿迭代法的计算量比二分法大。

最后,我们发现牛顿法是一个局部方法,仅当初始点x0充分靠近x*时,方法才是有效的,如果初始点x0远离x*,牛顿法将收敛很慢,甚至不收敛。

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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