本文主要研究非线性方程重根问题的求解方法。基于区间分析理论和函数的二阶近似逼近,设计了一种求解非线性方程重根问题的新方法,并进行了相关的收敛性分析,给出了近似解在数值上的误差估计,最后通过数值算例与传统的区间迭代法进行了对比。新方法不仅能解决非线性方程的单根问题,而且能有效解决非线性方程的二重根问题,且计算量较小,收敛速度较快,数值结果有效可靠。 This article mainly discusses methods for solving nonlinear equation. Based on theory of interval analysis and the second order approximate approach, a new method is proposed to solve nonlinear equation with multiple root, carrying related convergence analysis, giving numerical error estimation of approximate solution, contract with traditional method though several numerical examples at last. It can not only solve nonlinear equation with simple root but also solve nonlinear equation with double root efficiently. At the same time, the new method needs less amount of computation and has fast convergence; the numerical results are effective and reliable.
武松1,王奕为2,肖旺1,王海军1
1中国矿业大学数学学院,江苏 徐州
2中国矿业大学附属中学,江苏 徐州
收稿日期:2018年8月3日;录用日期:2018年8月20日;发布日期:2018年8月27日
本文主要研究非线性方程重根问题的求解方法。基于区间分析理论和函数的二阶近似逼近,设计了一种求解非线性方程重根问题的新方法,并进行了相关的收敛性分析,给出了近似解在数值上的误差估计,最后通过数值算例与传统的区间迭代法进行了对比。新方法不仅能解决非线性方程的单根问题,而且能有效解决非线性方程的二重根问题,且计算量较小,收敛速度较快,数值结果有效可靠。
关键词 :非线性方程,重根,区间迭代法,区间Newton法,收敛性
Copyright © 2018 by authors and Hans Publishers Inc.
This work is licensed under the Creative Commons Attribution International License (CC BY).
http://creativecommons.org/licenses/by/4.0/
非线性方程的求根问题是数值分析的一个基本问题。1966年,Moore [
对于 0 ∈ F ′ ( X ( 0 ) ) 的情况,Hansen [
在实际应用中,遇到的问题可能是求方程的单根,也可能是求方程的重根。现有的许多高阶收敛的区间迭代法 [
在本文中,我们引入以下符号说明: I ( R ) 表示R上所有区间的集合,关于区间 X = [ x _ , x ¯ ] = { x ∈ R | x _ ≤ x ≤ x ¯ } (如果 x ¯ = x _ = x ,则 X = [ x _ , x ¯ ] = [ x , x ] = x 退化为一个点),称 m ( X ) = x ¯ + x _ 2 为区间X的中点, W ( X ) = x ¯ − x _ 为区间X的宽度, | X | = max { | x _ | , | x ¯ | } 为区间X的绝对值。与本文相关的其它区间分析的内容可参阅文献 [
定义1:设 f : R → R ,若存在区间值映射 F : I ( R ) → I ( R ) ,对任意 x ∈ X ⊆ I ( R ) ,有 F ( [ x , x ] ) = f ( x ) 成立,则称区间值映射 F ( X ) 为函数 f ( x ) 的区间扩展。相对应, F ′ ( X ) 为导函数 f ′ ( x ) 的区间扩展, F ″ ( X ) 为二阶导数 f ″ ( x ) 的区间扩展。
定义2:设区间值映射 F : I ( R ) → I ( R ) 为函数f的区间扩展,而 X , Y ∈ I ( R ) 且满足 X ⊆ Y ,如果成立 F ( X ) ⊆ F ( Y ) ,则称区间值映射F具有包含单调性。
古典区间Newton法是求解非线性方程的经典方法。设f是单变量实值的连续可微函数, F ′ ( X ) 是 f ′ ( x ) 在区间X上具有包含单调性的区间扩展,记 F ′ ( X ( 0 ) ) 为函数 f ′ ( x ) 在给定区间 X ( 0 ) 上的区间扩展,如果 0 ∉ F ′ ( X ( 0 ) ) ,则可建立如下迭代公式
X ( k + 1 ) = X ( k ) ∩ N ( X ( k ) ) , k = 0 , 1 , 2 , ⋯
这里
N ( X ( k ) ) = m ( X ( k ) ) − f ( m ( X ( k ) ) ) F ′ ( X (k))
这就是著名的古典区间Newton法 [
当 0 ∈ F ′ ( X ( k ) ) 时,Hansen通过引进无界区间的概念来定义区间除法。
设 F ′ ( X ( k ) ) = [ c k , d k ] ,因为 0 ∈ [ c k , d k ] ,定义
1 F ′ ( X ( k ) ) = { [ 1 d k , ∞ ] c k = 0 [ − ∞ , 1 c k ] d k = 0 [ − ∞ , 1 c k ] ∪ [ 1 d k , ∞ ] 其 它 情 况
若成立 f ( m ( X ( k ) ) ) = 0 ,则 m ( X ( k ) ) 就是f的零点,否则 H ( X ( k ) ) 就有两种可能的定义,
1) 对于 f ( m ( X ( k ) ) ) > 0 的情形,有
H ( X ( k ) ) = { [ − ∞ , q k ] c k = 0 [ p k , ∞ ] d k = 0 [ − ∞ , q k ] ∪ [ p k , ∞ ] 其 它 情 况
2) 对于 f ( m ( X ( k ) ) ) < 0 的情形,有其它情况
H ( X ( k ) ) = { [ q k , ∞ ] c k = 0 [ − ∞ , p k ] d k = 0 [ − ∞ , p k ] ∪ [ q k , ∞ ] 其 它 情 况
其中 p k = m ( X ( k ) ) − f ( m ( X ( k ) ) ) / c k q k = m ( X ( k ) ) − f ( m ( X ( k ) ) ) / d k
当 0 ∉ F ′ ( X ( k ) ) 时,有
H ( X ( k ) ) = m ( X ( k ) ) − f ( m ( X ( k ) ) ) F ′ ( X (k))
此时
X ( k + 1 ) = X ( k ) ∩ H ( X ( k ) ) , k = 0 , 1 , 2 , ⋯
即为Hansen [
对于非线性方程 f ( x ) = 0 ,设 x * 为该方程的单根或重根, x 0 是比较靠近 x * 的初始值。使用泰勒公式将 f ( x ) = 0 展开到二阶,有
f ( x 0 ) + ( x − x 0 ) f ′ ( x 0 ) + 1 2 ( x − x 0 ) 2 f ″ ( ξ ) = 0 (1)
这是一个关于x的二次方程且一定存在实根,解得
x = x 0 − f ′ ( x 0 ) − [ f ′ ( x 0 ) ] 2 − 2 f ( x 0 ) f ″ ( ξ ) f ″ ( ξ ) (2)
或
x = x 0 − f ′ ( x 0 ) + [ f ′ ( x 0 ) ] 2 − 2 f ( x 0 ) f ″ ( ξ ) f ″ ( ξ ) (3)
设 F ″ ( X ) 为 f ″ ( x ) 的具有包含单调性的区间扩展,新的区间迭代法如下
X ( k + 1 ) = X ( k ) ∩ S ( X ( k ) ) (4)
这里
S ( X ( k ) ) = m ( X ( k ) ) − f ′ ( m ( X ( k ) ) ) − [ f ′ ( m ( X ( k ) ) ) ] 2 − 2 f ( m ( X ( k ) ) ) F ″ ( X ( k ) ) F ″ ( X ( k ) ) (5)
或
S ( X ( k ) ) = m ( X ( k ) ) − f ′ ( m ( X ( k ) ) ) + [ f ′ ( m ( X ( k ) ) ) ] 2 − 2 f ( m ( X ( k ) ) ) F ″ ( X ( k ) ) F ″ ( X ( k ) ) (6)
说明:以上区间算子S有两种,所用方法完全相同,所以以下定理只就第一种情况进行证明,第二种情况的证明步骤也完全相同,就不作详叙。
定理1:设f为给定区间 X ( 0 ) 上的一个二阶连续可微函数,且 0 ∉ F ″ ( X ( k ) ) , k = 0 , 1 , 2 , ⋯ 如果 X ( 0 ) 包含有f的一个零点 x * ,则所有的 X ( k ) , k = 0 , 1 , 2 , ⋯ 都包含 x * ,且有 X ( k +1 ) ⊆ X ( k ) , x * ∈ ∩ k = 0 ∞ X ( k ) 。
证明:由式(2)可知
x * = m ( X ( 0 ) ) − f ′ ( m ( X ( 0 ) ) ) − [ f ′ ( m ( X ( 0 ) ) ) ] 2 − 2 f ( m ( X ( 0 ) ) ) f ″ ( ξ ) f ″ ( ξ ) ∈ m ( X ( 0 ) ) − f ′ ( m ( X ( 0 ) ) ) − [ f ′ ( m ( X ( 0 ) ) ) ] 2 − 2 f ( m ( X ( 0 ) ) ) F ″ ( X ( 0 ) ) F ″ ( X (0) )
故 x * ∈ X ( 0 ) ∩ S ( X ( 0 ) ) = X ( 1 ) 。
同理,如果 x * ∈ X ( k ) ,则 x * ∈ X ( k + 1 ) ,由数学归纳法可得
x * ∈ X ( k ) , k = 0 , 1 , ⋯
所以 x * ∈ ∩ k = 0 ∞ X ( k ) ,由式(4)可得 X ( k + 1 ) ⊆ X ( k ) 。
该区间算子的好处在于:1) 能检测到一个区间是否有根存在,这样可以避免无用的迭代运算;2) 能保证在一个区间有且只有一个实根。
定理2:设f为给定区间 X ( 0 ) 上的一个二阶连续可微函数,且 0 ∉ F ″ ( X ) ,则
1) 如果 S ( X ) ⊆ X ,则X中有且仅有方程 f ( x ) = 0 的一实根。
2) 如果 X ∩ S ( X ) = ϕ ,则X中不含方程 f ( x ) = 0 的任何实根。
证明:1)首先证明方程 f ( x ) = 0 根的存在性,
对任意实数 y ∈ X ,构造算子 S ˜ ( y ) = y − f ′ ( y ) − [ f ′ ( y ) ] 2 − 2 f ( y ) l ( y , m ( X ) ) l ( y , m (X))
其中 l ( y , m ( X ) ) = { f ′ ( y ) − f ′ ( m ( X ) ) y − m ( X ) , y ≠ m ( X ) f ″ ( y ) , y = m (X)
由于 f ′ ( x ) , f ″ ( x ) 在X上的连续,以及 0 ∉ F ″ ( X ) ,所以 S ˜ ( y ) 为定义在X的连续算子,当 y = m ( X ) 时,由 F ″ ( X ) 的包含单调性可知
S ˜ ( y ) = y − f ′ ( m ( X ) ) − [ f ′ ( m ( X ) ) ] 2 − 2 f ( m ( X ) ) f ″ ( m ( X ) ) f ″ ( m ( X ) ) ∈ S (X)
当 y ≠ m ( X ) 时,化简可得 S ˜ ( y ) ∈ S ( X ) ,又因为 S ( X ) ⊆ X ,则区间算子 S ˜ 是将X变换到其自身的连续算子,且区间X为有界闭凸集,根据Browner不动点定理,可知 S ˜ 存在不动点 x * ∈ X ,使得 S ˜ ( x ∗ ) = x ∗ ,从而有
f ′ ( x * ) − [ f ′ ( x * ) ] 2 − 2 f ( x * ) l ( y , m ( X ) ) l ( y , m ( X ) ) = 0
因为 0 ∉ F ″ ( X ) ,所以 l ( y , m ( X ) ) ≠ 0 ,故有 f ( x * ) = 0 。
下面证方程 f ( x ) = 0 根的唯一性,如果 m ( X ( k ) ) 是函数f的零点,成立
m ( X ( k ) ) = S ( X ( k ) ) = S ( m ( X ( k ) ) )
则有 m ( X ( k ) ) = X ( k ) ∩ S ( m ( X ( k ) ) ) ,这表明程序终止在有限步。
如果 m ( X ( k ) ) 不是f的零点,此时,由 S ( X ( k ) ) 的定义可知总有 S ( X ( k ) ) > m ( X ( k ) ) 或 S ( X ( k ) ) < m ( X ( k ) ) 成立,这表明 S ( X ( k ) ) 不包含 X ( k ) 的中点,因此必有 W ( X ( k + 1 ) ) < 1 2 W ( X ( k ) ) ,从而
综上可得X中有且仅有
2) 若X包含
定理3:设f为给定区间
证明:因为
且
所以
又因为
故
这里,存在常数
综上可得
算例 | 方法 | ε | X | N | Time |
---|---|---|---|---|---|
例1 | HM | 10-5 | [4.99999649960659, 5.00000367154179] | 21 | 0.60857 |
SM | 10-6 | [4.99999988606068, 5.00000000011419] | 7 | 0.05973 | |
例2 | HM | 10-7 | [0.99999996117413, 1.00000005937561] | 22 | 0.71521 |
SM | 10-7 | [0.99999998873967, 1.00000000002325] | 6 | 0.05563 | |
例3 | HM | 10-5 | [-0.00000085777869, 0.00000894836582] | 15 | 0.92766 |
SM | 10-6 | [-0.00000000137489, 0.00000085072377] | 4 | 0.04176 | |
例4 | HM | 10-7 | [0.00000003271013, 0.00000004211397] | 26 | 0.80112 |
SM | 10-7 | [0.00000005386116, 0.00000000025008] | 6 | 0.03085 | |
例5 | HM | 10-7 | [20.08553699994834, 20.08553710310446] | 23 | 1.01549 |
SM | 10-10 | [20.08553692305315, 20.08553692318773] | 6 | 0.04751 | |
例6 | HM | 10-5 | [0.99999052853228, 1.00000877530884] | 31 | 1.04777 |
SM | 10-6 | [0.99999283194989, 1.00001451218668] | 8 | 0.07953 | |
例7 | HM | 10-5 | [8.30942912918713, 0.30944262386020] | 44 | 0.18168 |
SM | 10-5 | [8.30942265777352, 8.30944359614464] | 9 | 0.14867 |
表1. HM和SM两种方法的数值对比
同理有
为了验证本文方法的正确性,在联想G400笔记本电脑(处理器:英特尔第三代酷睿i5-3230M @ 2.60 GHz双核)上借助MATLAB R2012b与工具箱INTLAB_V5.5进行编程求解。下面将给出一些数值算例,分别应用本文的方法与Hansen改进的区间Newton法来求解,并对结果进行了对比分析,其中,“HM”表示Hansen改进的区间Newton法,“SM”表示本文的方法,ε表示精度,N表示迭代次数time表示迭代所用时间(单位为秒),X表示计算结果(表1)。
具体算例和数值计算结果如下:
例1:求方程
例2:求方程
例3:求方程
例4:求方程
例5:求方程
例6:求方程
例7:求方程
上述数值算例的结果以及更多的数值计算结果都验证了,在求解非线性方程的重根问题中,本文所建立的区间迭代法与Hansen改进的区间Newton法相比,在迭代次数和时间花费上具有更好的优势,这充分证明了本文方法是有效可靠的。
本文工作由江苏省自然科学基金(No. BK20151139)支持。
武松,王奕为,肖旺,王海军. 求非线性方程重根的区间算法Interval Algorithm of Nonlinear Equation with Multiple Root[J]. 应用数学进展, 2018, 07(08): 1020-1027. https://doi.org/10.12677/AAM.2018.78119