非线性方程基本理论
- 形如f(x)=0
- 有没有根、有多少个根很难确定
- 一般求[a,b]上的根
定义m重根:若在x∗点满足
f(x∗)=f′(x∗)=f′′(x∗)=⋯=f(m−1)(x∗)=0
则称x∗是f(x)的m重根
问题敏感性分析
可以把求解问题看成是f(x)=y,求解y=0时的x,即y是输入,x是输出
于是问题的绝对条件数为
ΔyΔx≈f′(x∗)1
于是,f′(x∗)越小,问题越敏感,重根的情形相当敏感
迭代法求解非线性方程
二分法
略去方法本身,以下是二分法的一些特性:
- 可靠方法,即总是可以收敛(经过有限次迭代后,区间长度会小于浮点数计算的精度)
- 缺点:收敛较慢;不容易确定初始有根区间
- 可以与其他方法结合使用
不动点迭代法
将f(x)=0变形为g(x)=x,选取初始值x0,进行如下迭代:
xn+1=g(xn)
若数列收敛到x∗,则x∗是g(x)的不动点,即
g(x∗)=x∗
于是x∗是f(x)=0的解
注 g(x)不一定是f(x)+x,可以采取其他形式的变形,这取决于f(x)的具体形式
例 在x0=1.5附近求x4−x−2=0的解
法一:令g(x)=4x+2,可以收敛到解
法二:令g(x)=x4−2,看上去计算量较小,但数列发散
不动点迭代法的收敛条件
定理 设g(x)∈C[a,b],若
(1) ∀x∈[a,b], a≤g(x)≤b
(2) ∃L∈(0,1), ∀x1,x2∈[a,b],∣g(x1)−g(x2)∣≤L∣x1−x2∣
则g(x)在[a,b]上存在唯一不动点
证明
由(1)知
g(a)−a≥0≥g(b)−b
于是不动点存在;
假设不动点不唯一,即存在不动点x1,x2,则
∣x1−x2∣∣g(x1)−g(x2)∣=1
与(2)矛盾。
定理(全局收敛的充分条件) 若g(x)满足上述两条件,则对任意初值x0∈[a,b],不动点迭代xk+1=g(xk)都收敛
证明
由题意,存在满足条件(2)的L∈(0,1)
于是
∣g(xk+1)−g(xk)∣≤L∣xk+1−xk∣=L∣g(xk)−g(xk−1)∣
又
∣g(x1)−g(x0)∣≤∣a−b∣
于是
∣g(xk+1)−g(xk)∣≤Lk∣a−b∣
于是数列g(xk)收敛
注 上述定理中所谓的全局收敛即相对区间[a,b]而言
注 上述定理的条件(2)常常替换为更强但更易使用的形式:g(x)∈C1[a,b]且
∀x∈[a,b], ∣g′(x)∣<1
定义(局部收敛) 若g(x)有不动点x∗,∃ x∗的邻域D: [x∗−δ,x∗+δ],使∀x0∈D,xk+1=g(xk)都收敛到x∗,则称该方法局部收敛
定理(局部收敛的充分条件) 设x∗是g(x)的不动点,若∣g′(x∗)∣<1,且g′(x)在x∗的某邻域上连续,则迭代法局部收敛
证明 略。可以利用全局收敛证明
稳定性与收敛阶
定义(收敛阶) 设迭代解序列{x0,x1,⋯,xk,⋯}收敛,若误差e(xk)=xk−x∗满足:
k→+∞lim∣e(xk)∣p∣e(xk+1)∣=c=0
则称该迭代法p阶收敛
注 对一个收敛的迭代法,收敛阶唯一、
注 事实上,收敛阶不止对不动点迭代法有效。例如二分法可以认为近似是1阶收敛,c=0.5
定理(不动点迭代的收敛阶) 对迭代法xk+1=g(xk),若g(p)(x)在不动点x∗附近连续,且整数p≥2,则该方法在x∗的邻域上p阶收敛等价于:
g′(x∗)=g′′(x∗)=⋯=g(p−1)(x∗)=0=g(p)(x∗)
注 定理证明可以考虑Taylor公式
牛顿法
牛顿法的优点:
牛顿法原理
曲线在一点xk的切线方程为
P(x)=f(xk)+(x−xk)f′(xk)
用此切线近似曲线在该点的局部,则可以用此切线的零点估计曲线的零点,即:
xk+1=xP(x)=0=xk−f′(xk)f(xk)
这构造出了一种迭代法
牛顿法可以看成是一种具有特殊的g(x)形式的不动点迭代:
g(x)=x−f′(x)f(x)
注意到f(x)的零点一定是g(x)的不动点,因此可以利用不动点迭代法的收敛阶判断定理来分析
由于
g′(x)=1−[f′(x)]2[f′(x)]2−f(x)f′′(x)=[f′(x)2]f(x)f′′(x)
因此,f(x)的零点也是g′(x)的零点(这要求对应的零点是单根,否则上述等式分母为0),于是牛顿法对单根至少2阶收敛
定理(牛顿法的收敛性) 若牛顿法在f(x)的某个单根处的3阶导数连续,则牛顿法在此单根处至少局部2阶收敛
注 对重根的情况,牛顿法只有一阶收敛性,并不比二分法更快
注 尽管牛顿法的收敛性好,但它对函数的光滑性和初值选取有更高的要求
迭代法的判停准则
三种判停准则:
- 残差判据:∣f(xk)∣≤ϵ1
- 误差判据:∣xk−xk−1∣≤ϵ1
- 相对误差判据:∣xk−xk−1∣≤ϵ3∣xk∣
三种判据有时需要组合使用
割线法与抛物线法
割线法是对牛顿法即“切线法”的进一步近似,使用割线近似切线来避免导数计算,使用的割线如下:
P1(x)=f(xk)+xk−xk−1f(xk)−f(xk−1)(x−xk)
于是,迭代规则为
xk+1=xk−f(xk)−f(xk−1)f(xk)(xk−xk−1)
这是一种广义的不动点迭代法(不动点迭代法不应涉及xk−1)
定理(割线法的收敛阶) 若f(x)在根x∗的某邻域内二阶连续可微且f′(x)=0,当x0,x1充分接近x∗时(局部性),割线法按ϕ−1=25+1≈1.618阶收敛
割线法的另一种解释为:根据xk,xk−1线性插值得到的割线来求零点
因此,如果我们引入xk−2,则可以进行二次插值,得到一条对称轴平行于x轴的抛物线,以此抛物线求零点的迭代法称为抛物线法
抛物线法的局部收敛阶为p≈1.839
数值计算上的其他求根技术
牛顿下山法
为了防止牛顿法发散,选取一系列从1开始递减的比例因子λ1∈(0,1],迭代方法改为如下:
xk+1=xk−λif(xk)/f′(xk)
判停准则为
∣f(xk+1)∣<∣f(xk)∣
Zeroin通用求根算法
在有根区间内依次执行逆二次插值法、割线法、二分法
无需计算导数,且收敛效果较好