✅ 操作成功!

非线性方程

发布时间:2023-06-12 作者:admin 来源:文学

非线性方程

非线性方程

-

2023年3月16日发(作者:复位电路)

Newton迭代法求解非

线性方程

一、Newton迭代法概述

构造迭代函数的一条重要途径是用近似方程来代替原方程去求根。因此,如

果能将非线性方程f

(

x

)

=0用线性方程去代替,那么,求近似根问题就很容易解

决,而且十分方便。牛顿(Newton)法就是一种将非线性方程线化的一种方法。

k

x是方程f

(

x

)

=0的一个近似根,把如果

)(xf

k

x处作一阶Taylor展开,

即:

)xx)(x('f)x(f)x(f

kkk



(1-1)

于是我们得到如下近似方程:

0)xx)(x('f)x(f

kkk



(1-2)

设0)('

k

xf,则方程的解为:

x̅=x

k

+f(x

k

)

f(x

k

)

́

(1-3)

取x

~

作为原方程的新近似根

1k

x,即令:

)x('f

)x(f

xx

k

k

k1k



,k=0,1,2,…

(1-4)

上式称为牛顿迭代格式。用牛顿迭代格式求方程的根的方法就称为牛顿迭代法,

简称牛顿法。

牛顿法具有明显的几何意义。方程:

)xx)(x('f)x(fy

kkk



(1-5)

是曲线

)x(fy

上点

))x(f,x(

kk

处的切线方程。迭代格式(1-4)就是用切线式(1-5)

的零点来代替曲线的零点。正因为如此,牛顿法也称为切线法。

牛顿迭代法对单根至少是二阶局部收敛的,而对于重根是一阶局部收敛的。

一般来说,牛顿法对初值

0

x的要求较高,初值足够靠近*x时才能保证收敛。若

要保证初值在较大范围内收敛,则需对

)x(f

加一些条件。如果所加的条件不满足,

而导致牛顿法不收敛时,则需对牛顿法作一些改时,即可以采用下面的迭代格式:

)x('f

)x(f

xx

k

k

k1k



,

,2,1,0k

(1-6)

上式中,10,称为下山因子。因此,用这种方法求方程的根,也称为牛顿

下山法。

牛顿法对单根收敛速度快,但每迭代一次,除需计算

)x(f

k

之外,还要计算

)x('f

k

的值。如果

)x(f

比较复杂,计算

)x('f

k

的工作量就可能比较大。为了避免

计算导数值,我们可用差商来代替导数。通常用如下几种方法:

1.割线法

如果用

1kk

1kk

xx

)x(f)x(f

代替

)x('f

k

,则得到割线法的迭代格式为:

)x(f

)x(f)x(f

xx

xx

k

1kk

1kk

k1k





(1-7)

2.拟牛顿法

如果用

)x(f

))x(fx(f)x(f

k

1kkk



代替

)x('f

k

,则得到拟牛顿法的迭代格式为:

))x(fx(f)x(f

)x(f

xx

1kkk

k

2

k1k





(1-8)

nson法

如果用

)x(f

)x(f))x(fx(f

k

kkk



代替

)x('f

k

,则得到拟牛顿法的迭代格式为:

)x(f))x(fx(f

)x(f

xx

kkk

k

2

k1k



(1-9)

二、算法分析

1.割线法

割线法的迭代公式为:

)x(f

)x(f)x(f

xx

xx

k

1kk

1kk

k1k





,k=0,1,2,…

割线法是超线性收敛,其程序流程图为:

2.拟牛顿法

牛顿拟迭代法迭代公式为:

))x(fx(f)x(f

)x(f

xx

1kkk

k

2

k1k





(1)对单根条件下,牛顿拟迭代法平方收敛,牛顿拟迭代法程序框图如下所

示:

(2)对重根条件下,此时

迭代公式修改为:

))x(fx(f)x(f

)x(f

mxx

1kkk

k

2

k1k





,m为根的重数

此时,牛顿迭代法至少平方收敛。

nson法

Steffenson迭代法程序流程图与牛顿拟迭代法类似。

三、牛顿法的程序

给定初值

0

p,用牛顿法格式

)p('f

)p(f

pp

1k

1k

1kk

,2,1k

,求解非线性方程

0)x(f

*********************************************************************

function[p1,err,k,y]=newton(f1041,df1041,p0,delta,max1)

%f1041是非线性函数。

%df1041是f1041的微商。

%p0是初始值。

%delta是给定允许误差。

%max1是迭代的最大次数。

%p1是牛顿法求得的方程的近似解。

%err是p0的误差估计。

%k是迭代次数。

%y=f(p1)

p0,feval('f1041',p0)

fork=1:max1

p1=p0-feval('f1041',p0)/feval('df1041',p0);

err=abs(p1-p0);

p0=p1;

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

if(err

break,

end

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

end

*********************************************************************

四、程序实例与计算结果

例用上述程序求方程0233xx的一个近似解,给定初值为,误差界为610。

解:先用m文件先定义二个名为和的函数文件。

functiony=f1041(x)

y=x^3–3*x+2;

functiony=df1041(x)

y=3*x^2-3;

建立一个主程序

clear

newton('f1041','df1041',,10^(-6),18)

然后在MATLAB命令窗口运行上述主程序,即:

>>prog1041

计算结果如下:

p0=

ans=

p1=

err=

k=1

y=

p1=

err=

k=1

y=

p1=

err=

k=2

y=

p1=

err=

k=2

y=

p1=

err=

k=3

y=

p1=

err=

k=3

y=

p1=

err=

k=4

y=

p1=

err=

k=4

y=

p1=

err=

k=5

y=

p1=

err=

k=5

y=

p1=

err=

k=6

y=

p1=

err=

k=6

y=

p1=

err=

k=7

y=

p1=

err=

k=7

y=

p1=

err=

k=8

y=

p1=

err=

k=8

y=

p1=

err=

k=9

y=

p1=

err=

k=9

y=

p1=

err=

k=10

y=

p1=

err=

k=10

y=

p1=

err=

k=11

y=

p1=

err=

k=11

y=

p1=

err=

k=12

y=

p1=

err=

k=12

y=

p1=

err=

k=13

y=

p1=

err=

k=13

y=

p1=

err=

k=14

y=

p1=

err=

k=14

y=

p1=

err=

k=15

y=

p1=

err=

k=15

y=

p1=

err=

k=16

y=

p1=

err=

k=16

y=

p1=

err=

k=17

y=

p1=

err=

k=17

y=

p1=

err=

k=18

y=

ans=

这说明,经过18次迭代得到满足精度要求的值。

以下

是程

序运

行截图:

👁️ 阅读量:0