小组计算方法课程实验Word文件下载.docx
- 文档编号:17610249
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:8
- 大小:106.73KB
小组计算方法课程实验Word文件下载.docx
《小组计算方法课程实验Word文件下载.docx》由会员分享,可在线阅读,更多相关《小组计算方法课程实验Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
为给定精度,此时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*,牛顿法将收敛很慢,甚至不收敛。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小组 计算方法 课程 实验