数值分析课程设计(3)

2019-04-22 14:20

?是f的微商 %p0是初始值 Tlta是给定允许误差 %max1是迭代的最大次数 %p1是牛顿法求得的方程的近似值 %err是p0的误差估计 %k是迭代次数 %y=f(p1) p0, feval('f',p0) for k=1:max1

p1=p0-feval('f',p0)/feval('df',p0); err=abs(p1-p0); p0=p1; p1, err, k,

y=feval('f',p1) if(err

首先在Matlab输入

fplot('[x*exp(x)-1]',[-1,1]);grid

回车得到下图,可知函数f(x)与x轴在x?0.5附近有根,取处值x0?0.5。

11

21.510.50-0.5-1-1.5-1-0.8-0.6-0.4-0.200.20.40.60.81

再用M-文件写一个名为f.m的函数。 %牛顿法,弦截法实例函数f function y=f(x) y=x*exp(x)-1; 名为df.m的函数 %牛顿法实例函数df function y=df(x) y=(1+x)*exp(x);

在Matlab命令窗口输入: Newton('f','df',0.5,10^(-4),10) 运行得 ans =

0.56714

5 弦截法的基本原理及MATLAB实现

弦截法的基本原理

给定非线性方程f(x)?0,选定曲线y?f(x)上的两个点P0(x0,f(x0)),

P1(x1,f(x1)),过这两个点做一条直线P0P1,则直线方程

y?f(x0)?f(x1)?f(x0)(x?x1)。

x1?x0当f(x0)?f(x1)时,直线P0P1与x轴的交点为x2?x1?

12

f(x1)(x1?x0),这时

f(x1)?f(x0)用x2作为曲线y?f(x)与x轴交点的近似值,显然

x2?x*?minx1?x*,x0?x*

这里的x*为f(x)?0的精确解。然后用P1(x1,f(x1)),P2(x2,f(x2)),构造直线

??P1P2。重复上述步骤,就可以求出x3。

如此进行下去,可得到迭代格式

xk?1?xk?f(xk)(xk?xk?1)

f(xk)?f(xk?1)f(xk)?f(xk?1)f(xk)取代牛顿公式xk?1?xk?中的

f(xk)?f(xk?1)f'(xk)上式实际上就是用均差

微商f'(x)的结果,所以弦截法可以被看成是牛顿法的一种变形。 下面是弦截法的MATLAB函数代码: %弦截法求解非线性方程

function [p1,err,k,y]=Secant(f,p0,p1,delta,max1) %f是给定的非线性函数 %p0,p1为初始值 Tlta为给定误差界 %max1是迭代次数的上限 %p1为所求得的方程的近似解 %err为p1-p0的绝对值 %k为所需要的迭代次数 %y=f(p1)

k=0,p0,p1,feval('f',p0),feval('f',p1) for k=1:max1

p2=p1-feval('f',p1)*(p1-p0)/(feval('f',p1)-feval('f',p0)); err=abs(p2-p1); p0=p1; p1=p2;

k,p1,err,y=feval('f',p1)

13

if(err

在Matlab命令窗口输入: Secant('f',0.5,0.6,10^(-4),10) 回车运行得 ans =

0.56714

6 抛物法的基本原理及MATLAB实现

抛物法的基本原理

设已知方程f(x)?0的3个近似根为xk,xk-1,xk-2,我们以由这3个点为节点构造出的二次插值多项式P(x)的一个零点xk-1作为新的近似根,这样确定的迭代过程称为抛物法。

在几何图形上,这种方法的基本思想是用抛物线与x轴的交点xk-1作为所求根的近似位置。

现在推导抛物法的计算公式。 插值多项式

P(x)?f(x0)?f[xk,xk?1](x?xk)?f[xk,xK?1,xk?2](x?xk)(x?xk?1)

有两个零点

xk?1?xk?式中

2f(xk)????4f(xk)f[xk,xk_1,xk?2]2

??f[xk,xk?1]?f[xk,xk?1,xk?2](xk?xk?1)

为了从式中定一个值xk?1,我们需要讨论根式前的正负号的取舍问题。

14

在xk,xk-1,xk-23个近似根中,自然假定xk更接近所求的根x*,这时为了保证精度,我们选定上式中较接近xk的一个值作为新的近似根xk-1,为此只要取根式前的符号与?的符号相同即可。 抛物法的计算步骤

给定非线性方程f(x)?0,误差界?,迭代次数上限N,则抛物法的计算步骤如下:

1) 计算??f[xk,xk?1]?f[xk,xk?1,xk?2](xk?xk?1) 2) 计算

2f(xk)????4f(xk)f[xk,xk_1,xk?2]xk?1?xk?22,代人

2f(xk)????4f(xk)f[xk,xk_1,xk?2]

得出的值后,再计算f(xk?1)。

3) 若xk?1?xk??,则迭代停止,取x*?xk?1;否则,令

(xk?2,xk?1,xk,f(xk?2),f(xk?1),f(xk))?(xk?1,xk,xk?1,f(xk?),f(xk),f(xk?1))4) 如果迭代次数k?N,则认为该迭代格式对于所选的初值不收敛,迭代停止,否则重返步骤2)

下面是抛物法的MATLAB函数代码: %抛物法求解非线性方程 function root=Parabola(f,a,b,x,eps) %f是非线性函数 %a为有根区间的下限 %b为有根区间的上限 %eps为根的精度 %root为求出的函数零点 %x为初始迭代点的值 if(nargin==4) eps=1.0e-4;

15


数值分析课程设计(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:道路桥梁施工常识问与答286条

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: