牛顿迭代法求解非线性方程组的解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值计算实习报告
——非线性方程组的牛顿迭代解法
姓名:吴健 学号:139084186 班级:数 132
非线性方程组的数值解法
摘要
本文着重介绍了求解单变量非线性方程 f (x) 0 的牛顿迭代法理论和 MATLAB 求解过程,其中二分法、不动点迭代等也是常用的解非线性方程组的重 要工具,本文把牛顿迭代法推广到非线性方程组,对于方程变量及个数相当大时, 很难通过运算得出结果,此时采用 MATLAB 中的 numjac 命令很好的避免牛顿迭
10 简化牛顿法 简化牛顿法又称平行弦法,其迭代公式为
xk1 xk Cf (xk ),C 0, k 0,1,
(4-7)
从不动点迭代法的角度看,简化牛顿法的迭代函数(x) x Cf (x) ,下面讨论简
化牛顿法的收敛性。
若| '(x) ||1 Cf '(x) | 1 ,即取 0 Cf ' (x) 2 .在根 x* 附近成立,则迭代法
设已知方程 f (x) 0 有近似根 x k (假定 f ' (xk ) 0 ),将函数 f (x) 在点 x k 展 开,有
f (x) f (xk ) f '(xk )(x xk )
(4-1)
于是方程 f (x) 0 可以近似地表示为
f (xk ) f '(xk )(x xk ) 0
(4-2)
式(4-2)是线性方程,记其根为 x k1 ,则 x k1 的计算公式为
x
k 1
xk
f (xk ) f ' (xk )
k
0,1,
(4-3)
这就是牛顿法,亦称为切线法。
牛顿法的几何意义如下图所示,方程 f (x) 0 的根 x* 可解释为曲线 y f (x)
与 x 轴的交点的横坐标。设 x k 是根 x* 的某个近似值,过曲线 y f (x) 上横坐标为
六、推广牛顿法到非线性方程组求解
考虑方程组
f1(x1, x2 , , xn ) 0
f2
(
x1
,
x2
,
, xn ) 0
(6-1)
fn (x1, x2 , , xn ) 0
其中 f1, f2 , , fn 均为 (x1, x2 , , xn ) 的多元函数.
若向量记号 X (x1, x2, , xn )T n , F ( f1, f2, , fn )T ,方程组就可以写成
xk1 xk1 (1 )xk
(4-10)
其中 (0 1) 称为下山因子, xk1 xk1 (1 )xk 即为
xk 1 xk
f f
( xk ' (xk
) )
,
k
0,1,
(4-11)
称为牛顿下山法。选择下山因子时从 1开始,逐次将 减半进行试算,直到
能使下降条件(4-8)成立。 五、算法实施
xk
f (xk ) f ' (xk )
(4-5)
的计算结果。由几何意义,牛顿法亦称为切线法。
2、牛顿法的算法步骤
图 4-1
步骤一: 准备, 选定初始近似值 x 0 ,计算 f0 f (x0 ) , f0' f '(x0) ;令 k=0
步骤二: 迭代, 按公式 x1 x0 f0 / f0' 迭代一次,得新的近似值 x 1 ,计算
点,选择一个初始值 x 0 ,将它代入 x (x) 的右端,即可求得 x1 (x0 ) ,如此 反复迭代计算
xk1 (xk ), k 0,1,
(3-3)
这时的(x) 称为迭代函数.如果对 x0 [a,b] ,有
lim x x*
(3-4)
k k
成立,则称迭代方程 xk1 (xk ) 收敛,且(3-2)为(x) 的不动点,故称为不动点迭 代法。其基本思想是将隐式方程 x (x) 归结为一组显示的计算公式(3-3),就是 说,迭代过程实质上是一个逐步显示化的过程。 3、线性近似法
x k 的点 Pk 引切线,并将该切线与 x 轴的交点的横坐标 x k1 作为 x* 的新的近似值。 注意到切线方程为
y f (xk ) f '(xk )(x xk )
(4-4)
这样求得的值 x k1 比满足 f (xk ) f '(xk )(x xk ) 0 ,从而就是牛顿公式
x
k 1
f1
f (x1) ,
f1'
f ' (x1) ;再分别赋值给
f0
f1 ,
f
' 0
f
' 1
。
步骤三: 判断, 如果 | x1 x0 | 1e 5 ,则终止迭代,以 x 1 作为所求的根; 否则转步骤四
步骤四: 修改, 如果迭代次数达到预先指定的次数 N ,或者 f1' 0 ,则方
法失败;否则以 (x1, f1, f1') 代替 (x0, f0, f0' ) 转步骤二继续迭代。
p1(x)
f (xk )
f
(xk ) xk
f (xk 1) xk 1
(x
xk
)
(3-5)
因此有
xk 1
xk
f
(
xk
f )
( xk f
) ( xk
1 )
( xk
xk 1)
(3-6)
由下文中的牛顿迭代法会知道,这里的迭代公式可以看作牛顿公式
x
k 1 xk
f (xk ) f ' (xk )
(3-7)
例 1、求方程 f (x) x3 x 1 0 在 x0 1.5 附近的根. 解:(1) 二分法 f (1) 1 0 ,f (2) 5 0 ,故取区间[1, 2] ,则由二分法的算法得 MATLAB 程序:
函数值 [1,2] [1,1.5] [1.25,1 [1.25,1.3 [1.3125,1 [1.3125,1 [1.3125,1.3
xk1 xk
Cf (xk ) 局部收敛,在 xk1 xk Cf (xk ) 中取 C
1 ,则称为简化牛 f ' (x0 )
顿法。
其几何意义是用斜率为 f ' (x0 ) 的平行弦与 x 轴的交点作为 x* 的近似,如图所示:
图 4-2
2o 牛顿下山法
牛顿法收敛性依赖于初值 x0 的选取,如果 x0 偏离所求根 x* 较远,则牛顿法 可能发散。为了防止迭代发散,对迭代过程再附加一个要求,即具有单调性:
(2-3)
它在整个 x 轴上有无穷多个解,若 x 的取值范围不同,解也不同,所以在讨论非
线性方程的求解问题时,必须强调 x 的定义域,即 x 的求解区间[a, b] 。
超越函数都可以通过多项式函数插值得到,故解非线性方程归结为求解多项 式函数的解或者是直接求解超越函数。 三、求解非线性方程的其他方法 1、二分法
代法中所遇到的 jacobi 矩阵难求的问题。
关键词:非线性方程组、牛顿迭代法、MATLAB、 jacobi 矩阵
一、前言 非线性方程组在实际问题中经常出现,并且在科学与工程计算中的地位越来
越来重要,很多常见的线性模型都是在一定条件下由非线性问题简化得到的,为 得到更符合实际的解答,往往需要直接研究非线性模型,然而从线性到非线性是 一个质的飞跃,方程的性质的不同,所以求解方法也有很大差别。本文主要介绍 关于非线性方程及方程组的数值解法,先分析非线性方程的数值解法,然后再延 伸到方程组的解法。
| f (xk1) || f (xk ) |
(4-8)
满足此要求的算法称为下山法。
将牛顿法和下山法一起使用时,即在下山法保证函数值稳定下降的前提下,
用牛顿法加快收敛速度。为此,为此将牛顿法的计算结果
xk 1
xk
f (xk ) f ' (xk )
(4-9)
与前一步的近似值 xk 的适当加权平均作为新的改进值
误差值 0.2500 0.1080 0.0476 0.0206 0.0089 0.0039 0.0017
3、牛顿法的改进
牛顿法的缺点:一是每次迭代都要计算 f (xk ) 和 f ' (xk ) ,计算量较大且有时
f ' (xk ) 计算较困难;二是初始近似 x0 只在根 x* 附近才能保证收敛,如果 x0 给的不 合适可能不收敛。为克服这两个缺点,通常有下述方法。
中的导数
f
' (xk ) 用差商
f
(xk ) f (xk1) xk xk 1
取代的结果,这种算法成为弦截法。
4、上述算法的缺点
二分法:收敛速度慢,且无法知道是否有重根。
不动点迭代法:收敛与否或收敛快慢取决于函数 x (x) 的性质。
弦截法:在牛顿法中只需要两个节点,弦截法需要找三个节点,收敛速度慢,要 求初始值的选取靠近方程的根,否则也可能会不可能。 四、牛顿法 1、牛顿法思想
本文以如下多元非线性方程组为例,尝试寻找一种数值方法求解该方程组。
x12
3x1 cos(x2 x3 ) 81(x2 0.1)2 sin
1 2 x3
0 1.06
0
e x1x2
20x3
10 3
1
0
二、线性方程与非线性方程
线性方程的形式如
y kx b
(2-1)
而对于这类问题已经完全地被解决了,而诸如函数 f (x) 是多项式函数,即
.5]
75]
.375]
.3438]
281]
f (a)
-1
-1
-0.2969 -0.2969 -0.0515 -0.0515
-0.0515
f (b)
5
0.8750 0.8750 0.2246
0.2246
0.0826
0.0147
误差值
1
0.5
0.25
0.125
0.0625 0.03125 0.015625
(2)不动点迭பைடு நூலகம்法:
根据不动点迭代法的思想,取迭代函数 xk1 3 xk 1 ,则有结果如下表:
迭代次数
1
2
3
4
5
6
7
迭代函数
1.3572 1.3309 1.3259 1.3249 1.3248 1.3247 1.3247
(x+1)^(1/3)
误差值
0.1428 0.0263 0.0050 0.0010 0.0001 0.0001 0.0000
令 a1 a,b1 x0 .对于压缩了的有根区间[a1,b1] 进行如上用样的操作,直到找到方 程的根。 2、不动点迭代法
将方程
f (x) 0
(3-1)
改写成等价的形式 x (x) ,若要求 x* 满足 f (x*) 0 ,则
x* (x*)
(3-2)
反之亦然.称 x* 为函数(x) 的一个不动点.求 f (x) 的零点就等价于求(x) 的不动
线性近似法中比较突出的有牛顿法、弦截法等,牛顿法的基本思想是将非线 性方程 f (x) 0 逐步归结为某种线性方程来求解。
设
xk
,
x
是
k 1
f
(x)
0
的近似根,我们利用
f
(xk ) ,
f
( xk 1 )
构造一次插值多项式
p1(x) ,并用 p1(x) 0 的根作为 f (x) 0 的新的近似根 x k1 .由于
f (x) a0xn a1xn1 an1x an
(2-2)
其中 a0 0, ai (i 0,1, , n) 为实数,当 f (x) 0 称为 n 次代数方程。这类方程当
n 5时就不能直接用公式表示方程的根,所以只好选用数值解代替。还有一类 函数成为超越函数,如
ex/10 sin10x 0
X (k1) X (k ) X (k ) .
例:求方程 f (x) x3 x 1 0 在 x0 1.5 附近的根. 解:结果如下表所示:
迭代次数
0
1
2
3
4
5
6
初始值 1.5000 1.2500 1.3580 1.3104 1.3310 1.3220 1.3258
迭代值 1.2500 1.3580 1.3104 1.3310 1.3220 1.3259 1.3242
考察有根区间 [a, b] ,取中点 x0 (a b) / 2 将它分成两半,假设中点 x0 不是
f (x) 的零点,然后进行根的搜索,即检查 f (x0 ) 与 f (a) 是否同号,如果确系同号,
则说明所求根 x* 在 x 0 的右侧,这时令 a1 x0,b1 b ;否则 x* 必在 x 0 的左侧,这时
F(X) 0
(6-2)
当 n 2 ,且 fi (i 1, 2, , n) 中至少有一个是自变量 xi (i 1, 2, , n) 的非线性函数
时,则称方程组(6-1)为非线性方程组. 非线性方程组是非线性科学的重要组成部分,关于非线性方程组的解法至关
重要的,其基本思想是: 将单个方程的牛顿法直接用于方程组(6-2)则可得到解非线性方程组的牛顿
迭代法
X (k1) X (k) F ' ( X (k) )1 F ( X (k) ), k 0,1,
(6-3)
其中, F '( X )1 是非线性方程组的 Jacobi 矩阵的逆矩阵,具体计算时记 X (k1) X (k ) X (k )
先解线性方程组 F ' ( X (k) )X (k) F ( X (k) ) ,求出向量 X (k) ,再令
——非线性方程组的牛顿迭代解法
姓名:吴健 学号:139084186 班级:数 132
非线性方程组的数值解法
摘要
本文着重介绍了求解单变量非线性方程 f (x) 0 的牛顿迭代法理论和 MATLAB 求解过程,其中二分法、不动点迭代等也是常用的解非线性方程组的重 要工具,本文把牛顿迭代法推广到非线性方程组,对于方程变量及个数相当大时, 很难通过运算得出结果,此时采用 MATLAB 中的 numjac 命令很好的避免牛顿迭
10 简化牛顿法 简化牛顿法又称平行弦法,其迭代公式为
xk1 xk Cf (xk ),C 0, k 0,1,
(4-7)
从不动点迭代法的角度看,简化牛顿法的迭代函数(x) x Cf (x) ,下面讨论简
化牛顿法的收敛性。
若| '(x) ||1 Cf '(x) | 1 ,即取 0 Cf ' (x) 2 .在根 x* 附近成立,则迭代法
设已知方程 f (x) 0 有近似根 x k (假定 f ' (xk ) 0 ),将函数 f (x) 在点 x k 展 开,有
f (x) f (xk ) f '(xk )(x xk )
(4-1)
于是方程 f (x) 0 可以近似地表示为
f (xk ) f '(xk )(x xk ) 0
(4-2)
式(4-2)是线性方程,记其根为 x k1 ,则 x k1 的计算公式为
x
k 1
xk
f (xk ) f ' (xk )
k
0,1,
(4-3)
这就是牛顿法,亦称为切线法。
牛顿法的几何意义如下图所示,方程 f (x) 0 的根 x* 可解释为曲线 y f (x)
与 x 轴的交点的横坐标。设 x k 是根 x* 的某个近似值,过曲线 y f (x) 上横坐标为
六、推广牛顿法到非线性方程组求解
考虑方程组
f1(x1, x2 , , xn ) 0
f2
(
x1
,
x2
,
, xn ) 0
(6-1)
fn (x1, x2 , , xn ) 0
其中 f1, f2 , , fn 均为 (x1, x2 , , xn ) 的多元函数.
若向量记号 X (x1, x2, , xn )T n , F ( f1, f2, , fn )T ,方程组就可以写成
xk1 xk1 (1 )xk
(4-10)
其中 (0 1) 称为下山因子, xk1 xk1 (1 )xk 即为
xk 1 xk
f f
( xk ' (xk
) )
,
k
0,1,
(4-11)
称为牛顿下山法。选择下山因子时从 1开始,逐次将 减半进行试算,直到
能使下降条件(4-8)成立。 五、算法实施
xk
f (xk ) f ' (xk )
(4-5)
的计算结果。由几何意义,牛顿法亦称为切线法。
2、牛顿法的算法步骤
图 4-1
步骤一: 准备, 选定初始近似值 x 0 ,计算 f0 f (x0 ) , f0' f '(x0) ;令 k=0
步骤二: 迭代, 按公式 x1 x0 f0 / f0' 迭代一次,得新的近似值 x 1 ,计算
点,选择一个初始值 x 0 ,将它代入 x (x) 的右端,即可求得 x1 (x0 ) ,如此 反复迭代计算
xk1 (xk ), k 0,1,
(3-3)
这时的(x) 称为迭代函数.如果对 x0 [a,b] ,有
lim x x*
(3-4)
k k
成立,则称迭代方程 xk1 (xk ) 收敛,且(3-2)为(x) 的不动点,故称为不动点迭 代法。其基本思想是将隐式方程 x (x) 归结为一组显示的计算公式(3-3),就是 说,迭代过程实质上是一个逐步显示化的过程。 3、线性近似法
x k 的点 Pk 引切线,并将该切线与 x 轴的交点的横坐标 x k1 作为 x* 的新的近似值。 注意到切线方程为
y f (xk ) f '(xk )(x xk )
(4-4)
这样求得的值 x k1 比满足 f (xk ) f '(xk )(x xk ) 0 ,从而就是牛顿公式
x
k 1
f1
f (x1) ,
f1'
f ' (x1) ;再分别赋值给
f0
f1 ,
f
' 0
f
' 1
。
步骤三: 判断, 如果 | x1 x0 | 1e 5 ,则终止迭代,以 x 1 作为所求的根; 否则转步骤四
步骤四: 修改, 如果迭代次数达到预先指定的次数 N ,或者 f1' 0 ,则方
法失败;否则以 (x1, f1, f1') 代替 (x0, f0, f0' ) 转步骤二继续迭代。
p1(x)
f (xk )
f
(xk ) xk
f (xk 1) xk 1
(x
xk
)
(3-5)
因此有
xk 1
xk
f
(
xk
f )
( xk f
) ( xk
1 )
( xk
xk 1)
(3-6)
由下文中的牛顿迭代法会知道,这里的迭代公式可以看作牛顿公式
x
k 1 xk
f (xk ) f ' (xk )
(3-7)
例 1、求方程 f (x) x3 x 1 0 在 x0 1.5 附近的根. 解:(1) 二分法 f (1) 1 0 ,f (2) 5 0 ,故取区间[1, 2] ,则由二分法的算法得 MATLAB 程序:
函数值 [1,2] [1,1.5] [1.25,1 [1.25,1.3 [1.3125,1 [1.3125,1 [1.3125,1.3
xk1 xk
Cf (xk ) 局部收敛,在 xk1 xk Cf (xk ) 中取 C
1 ,则称为简化牛 f ' (x0 )
顿法。
其几何意义是用斜率为 f ' (x0 ) 的平行弦与 x 轴的交点作为 x* 的近似,如图所示:
图 4-2
2o 牛顿下山法
牛顿法收敛性依赖于初值 x0 的选取,如果 x0 偏离所求根 x* 较远,则牛顿法 可能发散。为了防止迭代发散,对迭代过程再附加一个要求,即具有单调性:
(2-3)
它在整个 x 轴上有无穷多个解,若 x 的取值范围不同,解也不同,所以在讨论非
线性方程的求解问题时,必须强调 x 的定义域,即 x 的求解区间[a, b] 。
超越函数都可以通过多项式函数插值得到,故解非线性方程归结为求解多项 式函数的解或者是直接求解超越函数。 三、求解非线性方程的其他方法 1、二分法
代法中所遇到的 jacobi 矩阵难求的问题。
关键词:非线性方程组、牛顿迭代法、MATLAB、 jacobi 矩阵
一、前言 非线性方程组在实际问题中经常出现,并且在科学与工程计算中的地位越来
越来重要,很多常见的线性模型都是在一定条件下由非线性问题简化得到的,为 得到更符合实际的解答,往往需要直接研究非线性模型,然而从线性到非线性是 一个质的飞跃,方程的性质的不同,所以求解方法也有很大差别。本文主要介绍 关于非线性方程及方程组的数值解法,先分析非线性方程的数值解法,然后再延 伸到方程组的解法。
| f (xk1) || f (xk ) |
(4-8)
满足此要求的算法称为下山法。
将牛顿法和下山法一起使用时,即在下山法保证函数值稳定下降的前提下,
用牛顿法加快收敛速度。为此,为此将牛顿法的计算结果
xk 1
xk
f (xk ) f ' (xk )
(4-9)
与前一步的近似值 xk 的适当加权平均作为新的改进值
误差值 0.2500 0.1080 0.0476 0.0206 0.0089 0.0039 0.0017
3、牛顿法的改进
牛顿法的缺点:一是每次迭代都要计算 f (xk ) 和 f ' (xk ) ,计算量较大且有时
f ' (xk ) 计算较困难;二是初始近似 x0 只在根 x* 附近才能保证收敛,如果 x0 给的不 合适可能不收敛。为克服这两个缺点,通常有下述方法。
中的导数
f
' (xk ) 用差商
f
(xk ) f (xk1) xk xk 1
取代的结果,这种算法成为弦截法。
4、上述算法的缺点
二分法:收敛速度慢,且无法知道是否有重根。
不动点迭代法:收敛与否或收敛快慢取决于函数 x (x) 的性质。
弦截法:在牛顿法中只需要两个节点,弦截法需要找三个节点,收敛速度慢,要 求初始值的选取靠近方程的根,否则也可能会不可能。 四、牛顿法 1、牛顿法思想
本文以如下多元非线性方程组为例,尝试寻找一种数值方法求解该方程组。
x12
3x1 cos(x2 x3 ) 81(x2 0.1)2 sin
1 2 x3
0 1.06
0
e x1x2
20x3
10 3
1
0
二、线性方程与非线性方程
线性方程的形式如
y kx b
(2-1)
而对于这类问题已经完全地被解决了,而诸如函数 f (x) 是多项式函数,即
.5]
75]
.375]
.3438]
281]
f (a)
-1
-1
-0.2969 -0.2969 -0.0515 -0.0515
-0.0515
f (b)
5
0.8750 0.8750 0.2246
0.2246
0.0826
0.0147
误差值
1
0.5
0.25
0.125
0.0625 0.03125 0.015625
(2)不动点迭பைடு நூலகம்法:
根据不动点迭代法的思想,取迭代函数 xk1 3 xk 1 ,则有结果如下表:
迭代次数
1
2
3
4
5
6
7
迭代函数
1.3572 1.3309 1.3259 1.3249 1.3248 1.3247 1.3247
(x+1)^(1/3)
误差值
0.1428 0.0263 0.0050 0.0010 0.0001 0.0001 0.0000
令 a1 a,b1 x0 .对于压缩了的有根区间[a1,b1] 进行如上用样的操作,直到找到方 程的根。 2、不动点迭代法
将方程
f (x) 0
(3-1)
改写成等价的形式 x (x) ,若要求 x* 满足 f (x*) 0 ,则
x* (x*)
(3-2)
反之亦然.称 x* 为函数(x) 的一个不动点.求 f (x) 的零点就等价于求(x) 的不动
线性近似法中比较突出的有牛顿法、弦截法等,牛顿法的基本思想是将非线 性方程 f (x) 0 逐步归结为某种线性方程来求解。
设
xk
,
x
是
k 1
f
(x)
0
的近似根,我们利用
f
(xk ) ,
f
( xk 1 )
构造一次插值多项式
p1(x) ,并用 p1(x) 0 的根作为 f (x) 0 的新的近似根 x k1 .由于
f (x) a0xn a1xn1 an1x an
(2-2)
其中 a0 0, ai (i 0,1, , n) 为实数,当 f (x) 0 称为 n 次代数方程。这类方程当
n 5时就不能直接用公式表示方程的根,所以只好选用数值解代替。还有一类 函数成为超越函数,如
ex/10 sin10x 0
X (k1) X (k ) X (k ) .
例:求方程 f (x) x3 x 1 0 在 x0 1.5 附近的根. 解:结果如下表所示:
迭代次数
0
1
2
3
4
5
6
初始值 1.5000 1.2500 1.3580 1.3104 1.3310 1.3220 1.3258
迭代值 1.2500 1.3580 1.3104 1.3310 1.3220 1.3259 1.3242
考察有根区间 [a, b] ,取中点 x0 (a b) / 2 将它分成两半,假设中点 x0 不是
f (x) 的零点,然后进行根的搜索,即检查 f (x0 ) 与 f (a) 是否同号,如果确系同号,
则说明所求根 x* 在 x 0 的右侧,这时令 a1 x0,b1 b ;否则 x* 必在 x 0 的左侧,这时
F(X) 0
(6-2)
当 n 2 ,且 fi (i 1, 2, , n) 中至少有一个是自变量 xi (i 1, 2, , n) 的非线性函数
时,则称方程组(6-1)为非线性方程组. 非线性方程组是非线性科学的重要组成部分,关于非线性方程组的解法至关
重要的,其基本思想是: 将单个方程的牛顿法直接用于方程组(6-2)则可得到解非线性方程组的牛顿
迭代法
X (k1) X (k) F ' ( X (k) )1 F ( X (k) ), k 0,1,
(6-3)
其中, F '( X )1 是非线性方程组的 Jacobi 矩阵的逆矩阵,具体计算时记 X (k1) X (k ) X (k )
先解线性方程组 F ' ( X (k) )X (k) F ( X (k) ) ,求出向量 X (k) ,再令