计算方法(二):非线性方程求根

非线性方程求根

主要讨论单变量非线性方程
f ( x ) = 0                                 ( 2.1 ) f(x)=0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (2.1) f(x)=0                               (2.1)的求根问题 x ∈ R    ,    f ( x ) ∈ C [ a , b ] x\in R\ \ ,\ \ f(x)\in C[a,b] xR  ,  f(x)C[a,b].

(1)“根在哪里”,即确定根所在的区间,进行根的隔离。

(2)“根的求法”,通过数值方法,近似求解,并保证精度要求。

f ( x ) ∈ C [ a , b ] f(x)\in C[a,b] f(x)C[a,b] f ( a ) f ( b ) < 0 f(a)f(b)<0 f(a)f(b)<0 ,根据闭区间上连续函数性质可知 f ( x ) = 0 f(x)=0 f(x)=0 ( a , b ) (a,b) (a,b) 内至少有一个实根,称 [ a , b ] [a,b] [a,b] 为方程(2.1)的有根区间

二分法

f ( x ) ∈ C [ a , b ] f(x)\in C[a,b] f(x)C[a,b] f ( a ) f ( b ) < 0 f(a)f(b)<0 f(a)f(b)<0 ,根据连续函数性质可知 f ( x ) = 0 f(x)=0 f(x)=0 ( a , b ) (a,b) (a,b) 内至少有一个实根 x ∗ x^* x

考察有根区间 [ a , b ] [a,b] [a,b] ,取中点 x 0 = a + b 2 x_0=\frac{a+b}{2} x0=2a+b 将区间分为两半。若 f ( x 0 ) = 0 f(x_0)=0 f(x0)=0 ,则 x 0 x_0 x0 f ( x ) = 0 f(x)=0 f(x)=0 的实根 x ∗ x^* x 。若 f ( x 0 ) ≠ 0 f(x_0)\neq0 f(x0)=0 ,检查 f ( x 0 ) f(x_0) f(x0) f ( a ) f(a) f(a) 是否同号,即不等式:
f ( a ) f ( x 0 ) < 0 f(a)f(x_0)<0 f(a)f(x0)<0是否成立。如果成立,说明所求的根 x ∗ x^* x x 0 x_0 x0 的左侧,这时令 a 1 = a , b 1 = x 0 a_1=a,b_1=x_0 a1=a,b1=x0 ;否则 x ∗ x^* x 必在 x 0 x_0 x0 右侧,这时令 a 1 = x 0 , b 1 = b a_1=x_0,b_1=b a1=x0,b1=b ,两种情况都能得到一个新的有根区间 [ a 1 , b 1 ] [a_1,b_1] [a1,b1] ,其长度仅为 [ a , b ] [a,b] [a,b] 的一半。

对缩小了的有根区间 [ a 1 , b 1 ] [a_1,b_1] [a1,b1] 用中点 x 1 = a 1 + b 1 2 x_1=\frac{a_1+b_1}{2} x1=2a1+b1再分成两半,然后判断 x 1 x_1 x1 是不是根,并用
f ( a ) f ( x 1 ) < 0 f(a)f(x_1)<0 f(a)f(x1)<0是否成立来判断所求的根 x ∗ x^* x x 1 x_1 x1 的哪一侧,从而又确定一个新的有根区间 [ a 2 , b 2 ] [a_2,b_2] [a2,b2] ,其长度是 [ a 1 , b 1 ] [a_1,b_1] [a1,b1] 的一半。

如此反复二分下去,可以得出一系列有根区间
[ a , b ] ⊃ [ a 1 , b 1 ] ⊃ [ a 2 , b 2 ] ⊃ ⋯ ⊃ [ a k , b k ] ⊃ ⋯ [a,b]\supset[a_1,b_1]\supset[a_2,b_2]\supset\cdots\supset[a_k,b_k]\supset\cdots [a,b][a1,b1][a2,b2][ak,bk]其中区间每个区间都是前一个区间的一半,从而 [ a k , b k ] [a_k,b_k] [ak,bk] 的长度为
b k − a k = b − a 2 k b_k-a_k=\frac{b-a}{2^k} bkak=2kba k → ∞ k\rightarrow\infty k 时,此区间长度趋于零,如果二分过程无限地继续下去,这些区间最终必收缩于一点 x ∗ x^* x,为所求的根。

每次二分后,取有根区间 [ a n , b n ] [a_n,b_n] [an,bn] 的中点 x n = a n + b n 2 x_n=\frac{a_n+b_n}{2} xn=2an+bn 作为根的近似值,可以得到一个近似根的序列 x 0 , x 1 , x 2 , ⋯ x_0,x_1,x_2,\cdots x0,x1,x2,该序列必以根 x ∗ x^* x 为极限。

给定一个预定的精度 ε \varepsilon ε ,由 x ∗ ∈ [ a n , b n ] x^*\in [a_n,b_n] x[an,bn] ,可得
∣ x ∗ − x n ∣ ≤ 1 2 ( b n − a n ) = 1 2 n + 1 ( b − a ) |x^*-x_n|\leq\frac{1}{2}(b_n-a_n)=\frac{1}{2^{n+1}}(b-a) xxn21(bnan)=2n+11(ba)只要 n n n 充分大,使得
1 2 n + 1 ( b − a ) < ε      ,    即   n > [ ln ⁡ b − a ε / ln ⁡ 2 ] \frac{1}{2^{n+1}}(b-a)<\varepsilon\ \ \ \ , \ \ 即\ n>[\ln\frac{b-a}{\varepsilon}/\ln2] 2n+11(ba)<ε    ,   n>[lnεba/ln2]就有
∣ x ∗ − x n ∣ < ε |x^*-x_n|<\varepsilon xxn<ε x n x_n xn 就是一个满足精度要求的近似根。

注:在实际计算中,若 ∣ f ( x n ) ∣ |f(x_n)| f(xn) 很小: ∣ f ( x n ) ∣ < δ |f(x_n)|<\delta f(xn)<δ δ \delta δ 为给定的误差限),则 x n x_n xn 就可作为近似根。

二分法的优点算法简单,且总是收敛的缺点事先要确定有根区间,且收敛较慢,且不能用于求复根或偶数重根,一般不单独将其用于求根,只用其求根的一个较好的近似值。

迭代法

不动点迭代法(简单迭代法)

将方程 f ( x ) = 0 f(x)=0 f(x)=0 转化为:
x = g ( x ) x=g(x) x=g(x) x ∗ x^* x 满足 f ( x ∗ ) = 0 f(x^*)=0 f(x)=0,则 x ∗ = g ( x ∗ ) x^*=g(x^*) x=g(x) ,称 x ∗ x^* x 为函数 g ( x ) g(x) g(x) 的一个不动点

选择初始近似值 x 0 x_0 x0,代入得: x 1 = g ( x 0 ) x_1=g(x_0) x1=g(x0)

反复迭代: x k + 1 = g ( x k ) x_{k+1}=g(x_k) xk+1=g(xk) k = 0 , 1 , 2 , ⋯ k=0,1,2,\cdots k=0,1,2,,称 g ( x ) g(x) g(x)迭代函数,可得一个迭代序列{ x k x_k xk }

若对于 x 0 ∈ [ a , b ] x_0\in[a,b] x0[a,b],该迭代序列有极限: lim ⁡ k → ∞ x k = x ∗ \lim_{k\rightarrow\infty}x_k=x^* limkxk=x,则称迭代法收敛,且 x ∗ = g ( x ∗ ) x^*=g(x^*) x=g(x) g ( x ) g(x) g(x) 的不动点。若迭代序列发散,则称迭代法发散

不动点迭代法的基本思想:将隐式方程 f ( x ) = 0 f(x)=0 f(x)=0 化为显式的计算公式 x = g ( x ) x=g(x) x=g(x) ,然后通过迭代,求方程近似根。

迭代法几何意义: 方程 x = g ( x ) x=g(x) x=g(x) 的求根问题在 x y xy xy 平面上就是要确定曲线 x = g ( x ) x=g(x) x=g(x) 与直线 y = x y=x y=x 的交点 P ∗ P^* P

迭代法收敛的充分条件

压缩映照: 在区间[a,b]上定义的函数 g ( x ) g(x) g(x),若存在常数 L , 0 ≤ L ≤ 1 L,0\leq L\leq 1 L,0L1,使得 ∀ x , y ∈ [ a , b ] \forall x,y\in[a,b] x,y[a,b],都有:
∣ g ( x ) − g ( y ) ∣ ≤ L ∣ x − y ∣ |g(x)-g(y)|\leq L|x-y| g(x)g(y)Lxy则称映照 g ( x ) g(x) g(x) 在区间 [ a , b ] [a,b] [a,b] 上是压缩的

不动点的存在唯一性及误差分析

定理1: g ( x ) ∈ C [ a , b ] g(x)\in C[a,b] g(x)C[a,b] 满足以下两个条件:(1)任意 x ∈ [ a , b ] x\in [a,b] x[a,b],有 g ( x ) ∈ [ a , b ] g(x)\in[a,b] g(x)[a,b];(2)存在常数 L , 0 ≤ L ≤ 1 L,0\leq L\leq 1 L,0L1,使对任意 x , y ∈ [ a , b ] x,y\in[a,b] x,y[a,b],有
∣ g ( x ) − g ( y ) ∣ ≤ L ∣ x − y ∣ |g(x)-g(y)|\leq L|x-y| g(x)g(y)Lxy则:(1) x = g ( x ) x=g(x) x=g(x) [ a , b ] [a,b] [a,b] 上存在唯一实根 x ∗ x^* x;(2)对任意初值 x 0 ∈ [ a , b ] x_0\in[a,b] x0[a,b],由 x k + 1 = g ( x k ) x_{k+1}=g(x_k) xk+1=g(xk) 得到的迭代序列 { x k {x_k} xk}收敛到 x = g ( x ) x=g(x) x=g(x) [ a , b ] [a,b] [a,b] 的唯一实根 x ∗ x^* x,并有误差估计:
∣ x ∗ − x k ∣ ≤ 1 1 − L ∣ x k + 1 − x k ∣ ∣ x ∗ − x k ∣ ≤ L k 1 − L ∣ x 1 − x 0 ∣ |x^*-x_k|\leq \frac{1}{1-L}|x_{k+1}-x_k|\\|x^*-x_k|\leq\frac{L^k}{1-L}|x_1-x_0| xxk1L1xk+1xkxxk1LLkx1x0

证明如下:

先证不动点存在性。
定 义 函 数 : φ ( x ) = g ( x ) − x 显 然 φ ( x ) ∈ C [ a , b ] 。 因 为 a ≤ g ( x ) ≤ b , 有 φ ( a ) = g ( a ) − a ≥ 0 , φ ( b ) = g ( b ) − b ≤ 0 由 连 续 函 数 性 质 可 知 存 在   x ∗ ∈ ( a , b ) , 使 得   φ ( x ∗ ) = 0 , 即   g ( x ∗ ) = x ∗ , 为 不 动 点 定义函数:\varphi(x)=g(x)-x\\显然\varphi(x)\in C[a,b]。因为a\leq g(x)\leq b,有\\\varphi(a)=g(a)-a\geq0,\varphi(b)=g(b)-b\leq0\\由连续函数性质可知存在\ x^*\in(a,b),使得 \ \varphi(x^*)=0,即\ g(x^*)=x^*,为不动点 :φ(x)=g(x)xφ(x)C[a,b]ag(x)bφ(a)=g(a)a0,φ(b)=g(b)b0 x(a,b),使 φ(x)=0, g(x)=x,
再证唯一性。
设   x 1 ∗   及   x 2 ∗ ∈ [ a , b ] 是   g ( x )   的 两 个 不 同 的 不 动 点 , 则 ∣ x 1 ∗ − x 2 ∗ ∣ = ∣ g ( x 1 ∗ ) − g ( x 2 ∗ ) ∣ ≤ L ∣ x 1 ∗ − x 2 ∗ ∣ < ∣ x 1 ∗ − x 2 ∗ ∣ , 矛 盾 设\ x_1^*\ 及\ x_2^*\in[a,b]是\ g(x)\ 的两个不同的不动点,则\\|x_1^*-x_2^*|=|g(x_1^*)-g(x_2^*)|\leq L|x_1^*-x_2^*|<|x_1^*-x_2^*|,矛盾  x1  x2[a,b] g(x) x1x2=g(x1)g(x2)Lx1x2<x1x2,
误差估计:
∣ x k − x ∗ ∣ = ∣ g ( x k − 1 ) − g ( x ∗ ) ∣ ≤ L ∣ x k − 1 − x ∗ ∣ ≤ ⋯ ≤ L k ∣ x 0 − x ∗ ∣ ∣ x k + 1 − x k ∣ = ∣ g ( x k ) − g ( x k − 1 ) ∣ ≤ L ∣ x k − x k − 1 ∣ ≤ L k ∣ x 1 − x 0 ∣ 于 是 , 对 任 意 正 整 数   p , 有 ∣ x k + p − x k ∣ ≤ ∣ x k + p − x k + p − 1 ∣ + ∣ x k + p − 1 − x k + p − 2 ∣ + ⋯ + ∣ x k + 1 − x k ∣ ≤ ( L k + p − 1 + L k + p − 2 + ⋯ + L k ) ∣ x 1 − x 0 ∣ 令   p → ∞ , 注 意 到   lim ⁡ p → ∞ x k + p = x ∗ , 可 得 ∣ x ∗ − x k ∣ ≤ L k 1 − L ∣ x 1 − x 0 ∣ ∣ x k + 1 − x k ∣ = ∣ ( x ∗ − x k ) − ( x ∗ − x k + 1 ) ∣ ≥ ∣ x ∗ − x k ∣ − ∣ x ∗ − x k + 1 ∣ ≥ ∣ x ∗ − x k ∣ − L ∣ x ∗ − x k ∣ = ( 1 − L ) ∣ x ∗ − x k ∣ ∣ x ∗ − x k ∣ ≤ 1 1 − L ∣ x k + 1 − x k ∣ |x_k-x^*|=|g(x_{k-1})-g(x^*)|\leq L|x_{k-1}-x^*|\leq \cdots\leq L^k|x_0-x^*|\\|x_{k+1}-x_k|=|g(x_k)-g(x_{k-1})|\leq L|x_k-x_{k-1}|\leq L^k|x_1-x_0|\\于是,对任意正整数\ p,有\\|x_{k+p}-x_k|\leq |x_{k+p}-x_{k+p-1}|+|x_{k+p-1}-x_{k+p-2}|+\cdots+|x_{k+1}-x_k|\leq(L^{k+p-1}+L^{k+p-2}+\cdots +L^k)|x_1-x_0|\\令\ p\rightarrow\infty,注意到\ \lim_{p\rightarrow\infty}x_{k+p}=x^*,可得\\|x^*-x_k|\leq \frac{L^k}{1-L}|x_1-x_0|\\|x_{k+1}-x_k|=|(x^*-x_k)-(x^*-x_{k+1})|\geq|x^*-x_k|-|x^*-x_{k+1}|\geq|x^*-x_k|-L|x^*-x_k|=(1-L)|x^*-x_k|\\|x^*-x_k|\leq\frac{1}{1-L}|x_{k+1}-x_k| xkx=g(xk1)g(x)Lxk1xLkx0xxk+1xk=g(xk)g(xk1)Lxkxk1Lkx1x0 p,xk+pxkxk+pxk+p1+xk+p1xk+p2++xk+1xk(Lk+p1+Lk+p2++Lk)x1x0 p plimxk+p=x,xxk1LLkx1x0xk+1xk=(xxk)(xxk+1)xxkxxk+1xxkLxxk=(1L)xxkxxk1L1xk+1xk

实际迭代计算过程中,有时 L L L 难以估计,所以,只要相邻两次计算结果的偏差 ∣ x k + 1 − x k ∣ |x_{k+1}-x_k| xk+1xk 足够小,即可保证近似值 x k x_k xk 具有足够精度。

由Lagrange中值定理可知,如果 g ( x ) ∈ C 1 [ a , b ] g(x)\in C^1[a,b] g(x)C1[a,b],且对任意 x ∈ [ a , b ] x\in[a,b] x[a,b],有 ∣ g ′ ( x ) ∣ ≤ L ≤ 1 |g'(x)|\leq L\leq 1 g(x)L1,则对 ∀ x , y ∈ [ a , b ] \forall x,y\in[a,b] x,y[a,b],有
∣ g ( x ) − g ( y ) ∣ = ∣ g ′ ( ξ ) ( x − y ) ∣ ≤ L ∣ x − y ∣ , ξ ∈ ( a , b ) |g(x)-g(y)|=|g'(\xi)(x-y)|\leq L|x-y|,\xi\in(a,b) g(x)g(y)=g(ξ)(xy)Lxy,ξ(a,b)表明上述定理的条件(2)可用 g ′ ( x ) g'(x) g(x) 的性质代替。

注: 一般情况下, L L L 越小,收敛速度越快。

局部收敛性 g ( x ) g(x) g(x) 有不动点 x ∗ x^* x,如果存在 x ∗ x^* x 的某一邻域 S = { x ∣ ∣ x − x ∗ ∣ ≤ δ } S=\{x||x-x^*|\leq\delta\} S={xxxδ},对任意 x 0 ∈ S x_0\in S x0S,迭代产生的序列 { x k } ∈ S \{x_k\}\in S {xk}S,且收敛到 x ∗ x^* x,则称迭代法局部收敛

定理2:设 x ∗ x^* x g ( x ) g(x) g(x) 的不动点, g ′ ( x ) g'(x) g(x) x ∗ x^* x 的某个邻域连续,且 ∣ g ′ ( x ) ∣ < 1 |g'(x)|<1 g(x)<1,则迭代法局部收敛。

证明:由连续函数性质,存在 L L L x ∗ x^* x 的某个邻域 S = { x ∣ ∣ x − x ∗ ∣ ≤ δ } = [ x ∗ − δ , x ∗ + δ ] S=\{x||x-x^*|\leq\delta\}=[x^*-\delta,x^*+\delta] S={xxxδ}=[xδ,x+δ],对任意 x ∈ S x\in S xS,成立:
∣ g ′ ( x ) ∣ ≤ L < 1 |g'(x)|\leq L<1 g(x)L<1又: ∣ g ( x ) − x ∗ ∣ = ∣ g ( x ) − g ( x ∗ ) ∣ ≤ L ∣ x − x ∗ ∣ ≤ ∣ x − x ∗ ∣ |g(x)-x^*|=|g(x)-g(x^*)|\leq L|x-x^*|\leq|x-x^*| g(x)x=g(x)g(x)Lxxxx 可知,对任意 x ∈ S x\in S xS,总有 g ( x ) ∈ S g(x)\in S g(x)S。由定理1知,对任意 x 0 ∈ S x_0\in S x0S,迭代序列 { x k } ∈ S \{x_k\}\in S {xk}S,且收敛到 x ∗ x^* x

牛顿迭代法与弦割法

牛顿迭代公式及其几何意义

牛顿法实质上是一种线性化方法。对于单根和重根,收敛速度不同。

f ( x ) f(x) f(x) 可以表示成 f ( x ) = ( x − x ∗ ) m q ( x ) f(x)=(x-x^*)^mq(x) f(x)=(xx)mq(x),且 q ( x ∗ ) ≠ 0 q(x^*)\neq0 q(x)=0,则称 x ∗ x^* x 为方程 f ( x ) = 0 f(x)=0 f(x)=0m重根,当m=1时,称 x ∗ x^* x 为方程 f ( x ) = 0 f(x)=0 f(x)=0单根

f ( x ) ∈ C m [ a , b ] f(x)\in C^m[a,b] f(x)Cm[a,b],则 f ( x ) f(x) f(x) 在内的点 x ∗ x^* x 具有m重根的充要条件是:
f ( x ∗ ) = f ′ ( x ∗ ) = ⋯ = f ( m − 1 ) ( x ∗ ) = 0 ,     f ( m ) ( x ∗ ) ≠ 0 f(x^*)=f'(x^*)=\cdots=f^{(m-1)}(x^*)=0,\ \ \ f^{(m)}(x^*)\neq0 f(x)=f(x)==f(m1)(x)=0,   f(m)(x)=0

单根情形

f ( x ) ∈ C 1 ( x ∗ − δ , x ∗ + δ ) f(x)\in C^{1}(x^*-\delta,x^*+\delta) f(x)C1(xδx+δ) f ′ ( x ∗ ) ≠ 0 f'(x^*)\neq0 f(x)=0,即 x ∗ x^* x 为方程 f ( x ) = 0 f(x)=0 f(x)=0 的单根。

设已知方程 f ( x ) = 0 f(x)=0 f(x)=0 有近似根 x k x_k xk f ′ ( x k ) ≠ 0 f'(x_k)\neq0 f(xk)=0),将函数 f ( x ) f(x) f(x) 在点 x k x_k xk 展开,有:
f ( x ) ≈ f ( x k ) + f ′ ( x k ) ( x − x k ) f(x)\approx f(x_k)+f'(x_k)(x-x_k) f(x)f(xk)+f(xk)(xxk)于是方程 f ( x ) = 0 f(x)=0 f(x)=0 可以近似表示为:
f ( x k ) + f ′ ( x k ) ( x − x k ) = 0 f(x_k)+f'(x_k)(x-x_k)=0 f(xk)+f(xk)(xxk)=0记其根为 x k + 1 x_{k+1} xk+1,则 x k + 1 x_{k+1} xk+1 的计算公式为:
x k + 1 = x k − f ( x k ) f ′ ( x k ) ,      k = 0 , 1 , ⋯ x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)},\ \ \ \ k=0,1,\cdots xk+1=xkf(xk)f(xk),    k=0,1,

牛顿迭代法收敛的充分条件

定理3:设 f ( x ) f(x) f(x) 在其零点 x ∗ x^* x 的某邻域 S = { x ∣ ∣ x − x ∗ ∣ ≤ δ } S=\{x||x-x^*|\leq\delta\} S={xxxδ} 内有二阶连续导数,且 f ′ ( x ∗ ) ≠ 0 f'(x^*)\neq0 f(x)=0 (即 x ∗ x^* x 为单根),则牛顿迭代法在 x ∗ x^* x 附近具有局部收敛性。

证明:牛顿迭代法的迭代函数为:
g ( x ) = x − f ( x ) f ′ ( x ) g ′ ( x ) = 1 − [ f ′ ( x ) ] 2 − f ( x ) f ′ ′ ( x ) [ f ′ ( x ) ] 2 = f ( x ) f ′ ′ ( x ) [ f ′ ( x ) ] 2 g(x)=x-\frac{f(x)}{f'(x)}\\g'(x)=1-\frac{[f'(x)]^2-f(x)f''(x)}{[f'(x)]^2}=\frac{f(x)f''(x)}{[f'(x)]^2} g(x)=xf(x)f(x)g(x)=1[f(x)]2[f(x)]2f(x)f(x)=[f(x)]2f(x)f(x)
假定 x ∗ x^* x f ( x ) f(x) f(x) 的一个单根,即 f ( x ∗ ) = 0 f(x^*)=0 f(x)=0 f ′ ( x ∗ ) ≠ 0 f'(x^*)\neq0 f(x)=0,则由上式知 g ′ ( x ) = 0 g'(x)=0 g(x)=0,于是由定理2得,牛顿迭代法在 x ∗ x^* x 附近具有局部收敛性。

定理4:对方程 f ( x ) = 0 f(x)=0 f(x)=0,若存在区间 [ a , b ] [a,b] [a,b],使

(1) f ′ ′ ( x ) f''(x) f(x) [ a , b ] [a,b] [a,b] 上连续;

(2) f ( a ) f ( b ) < 0 f(a)f(b)<0 f(a)f(b)<0

(3)对任意 x ∈ [ a , b ] x\in[a,b] x[a,b],都有 f ′ ( x ) ≠ 0 f'(x)\neq0 f(x)=0

(4) f ′ ′ ( x ) f''(x) f(x) [ a , b ] [a,b] [a,b] 上保号。

则当初值 x 0 ∈ [ a , b ] x_0\in[a,b] x0[a,b] f ( x 0 ) f ′ ′ ( x 0 ) > 0 f(x_0)f''(x_0)>0 f(x0)f(x0)>0 时,牛顿迭代法产生的迭代序列 { x k } \{x_k\} {xk} 收敛于方程 f ( x ) = 0 f(x)=0 f(x)=0 [ a , b ] [a,b] [a,b] 上的唯一实根 x ∗ x^* x

牛顿迭代法的计算步骤

(1)选定初始近似值 x 0 x_0 x0,计算 f 0 = f ( x 0 ) , f 0 ′ = f ′ ( x 0 ) f_0=f(x_0),f'_0=f'(x_0) f0=f(x0),f0=f(x0)

(2)迭代。按公式: x 1 = x 0 − f 0 / f 0 ′ x_1=x_0-{f_0}/{f'_0} x1=x0f0/f0 迭代一次,得新的近似值 x 1 x_1 x1,计算 f 1 = f ( x 1 ) , f 1 ′ = f ′ ( x 1 ) f_1=f(x_1),f'_1=f'(x_1) f1=f(x1),f1=f(x1)

(3)控制。如果 x 1 x_1 x1 满足 ∣ δ ∣ < ζ 1 |\delta|<\zeta_1 δ<ζ1 ∣ f 1 ∣ < ζ 2 |f_1|<\zeta_2 f1<ζ2,则终止迭代,以 x 1 x_1 x1 作为所求的根;否则转(4)。此处 ζ 1 , ζ 2 \zeta_1,\zeta_2 ζ1ζ2 是允许误差,而
δ = { ∣ x 1 − x 0 ∣ , 当 ∣ x 1 ∣ < C 时 ∣ x 1 − x 0 ∣ ∣ x 1 ∣ , 当 ∣ x 1 ∣ ≥ C 时 \delta=\begin{cases} |x_1-x_0|,\quad 当|x_1|< C时\\\frac{|x_1-x_0|}{|x_1|}, \quad 当|x_1|\geq C时 \end{cases} δ={x1x0,x1<Cx1x1x0,x1C其中 C C C 是取绝对误差或相对误差的控制常数,一般可取 C = 1 C=1 C=1

(4)修正。如果迭代次数达到预先指定的次数 N N N,或者 f ′ = 0 f'=0 f=0,则方法失败;否则以 ( x 1 , f 1 , f 1 ′ ) (x_1,f_1,f'_1) (x1,f1,f1) 代替 ( x 0 , f 0 , f 0 ′ ) (x_0,f_0,f'_0) (x0,f0,f0) 转(2)继续迭代。

牛顿法的优点是收敛快,缺点一是每步迭代计算量大,缺点二是初始近似值 x 0 x_0 x0 只在根 x ∗ x^* x附近才能保证收敛。为克服这两个缺点,通常可用下述方法:

(1)简化牛顿法,也称平行弦法,其迭代公式为:
x k + 1 = x k − C f ( x k ) ,     C ≠ 0 ,     k = 0 , 1 , ⋯ x_{k+1}=x_k-Cf(x_k),\ \ \ C\neq0,\ \ \ k=0,1,\cdots xk+1=xkCf(xk),   C=0,   k=0,1,迭代函数为:
g ( x ) = x − C f ( x ) g(x)=x-Cf(x) g(x)=xCf(x) ∣ g ′ ( x ) ∣ = ∣ 1 − C f ′ ( x ) ∣ < 1 |g'(x)|=|1-Cf'(x)|<1 g(x)=1Cf(x)<1,即取 0 < C f ′ ( x ) < 2 0<Cf'(x)<2 0<Cf(x)<2,在根 x ∗ x^* x 附近成立,则迭代法局部收敛。若取 C = 1 f ′ ( x 0 ) C=\frac{1}{f'(x_0)} C=f(x0)1,则称为简化牛顿法,其几何意义是用平行弦与 x x x 轴交点作为 x ∗ x^* x 的近似。

(2)牛顿下山法。 为了防止迭代发散,对迭代过程附加一项要求,即具有单调性: ∣ f ( x k + 1 ) ∣ < ∣ f ( x k ) ∣ |f(x_{k+1})|<|f(x_k)| f(xk+1)<f(xk) 。将牛顿法的计算结果:
x ˉ k + 1 = x k − f ( x k ) f ′ ( x k ) \bar{x}_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)} xˉk+1=xkf(xk)f(xk)与前一步的近似值 x k x_k xk 适当加权平均作为新的改进值:
x k + 1 = λ x ˉ k + 1 + ( 1 − λ ) x k = x k − λ f ( x k ) f ′ ( x k ) x_{k+1}=\lambda\bar x_{k+1}+(1-\lambda)x_k=x_k-\lambda \frac{f(x_k)}{f'(x_k)} xk+1=λxˉk+1+(1λ)xk=xkλf(xk)f(xk)选择下山因子 λ \lambda λ 时从 λ = 1 \lambda=1 λ=1 开始,逐次 λ \lambda λ 减半进行试算,直到能使下降条件满足为止,即满足单调下降性: ∣ f ( x k + 1 ) ∣ < ∣ f ( x k ) ∣ |f(x_{k+1})|<|f(x_k)| f(xk+1)<f(xk)

弦割法(割线法)

x k , x k − 1 x_k,x_{k-1} xk,xk1 f ( x ) = 0 f(x)=0 f(x)=0 的近似根,利用 f ( x k ) , f ( x k − 1 ) f(x_k),f(x_{k-1}) f(xk),f(xk1) 构造一次插值多项式 p 1 ( x ) p_1(x) p1(x),并用 p 1 ( x ) p_1(x) p1(x) 的根作为 f ( x ) = 0 f(x)=0 f(x)=0 的新的近似根 x k + 1 x_{k+1} xk+1。由
p 1 ( x ) = f ( x k ) + f ( x k ) − f ( x k − 1 ) x k − x k − 1 ( x − x k ) p_1(x)=f(x_k)+\frac{f(x_k)-f(x_{k-1})}{x_k-x_{k-1}}(x-x_k) p1(x)=f(xk)+xkxk1f(xk)f(xk1)(xxk)相当于在 f ( x ) f(x) f(x) 曲线上取两点 ( x k , f ( x k ) ) , ( x k − 1 , f ( x k − 1 ) ) (x_k,f(x_k)),(x_{k-1},f(x_{k-1})) (xk,f(xk)),(xk1,f(xk1)) ,过这两点作割线。令 p 1 ( x k + 1 ) = 0 p_1(x_{k+1})=0 p1(xk+1)=0,得
x k + 1 = x k − f ( x k ) f ( x k ) − f ( x k − 1 ) ( x k − x k − 1 ) ,      k = 1 , 2 , ⋯ x_{k+1}=x_k-\frac{f(x_k)}{f(x_k)-f(x_{k-1})}(x_k-x_{k-1}),\ \ \ \ k=1,2,\cdots xk+1=xkf(xk)f(xk1)f(xk)(xkxk1),    k=1,2,弦割法:牛顿法 x k + 1 = x k − f ( x k ) f ′ ( x k ) x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)} xk+1=xkf(xk)f(xk) 中的导数 f ′ ( x k ) f'(x_k) f(xk) 用差商 f ( x k ) − f ( x k − 1 ) x k − x k − 1 \frac{f(x_k)-f(x_{k-1})}{x_k-x_{k-1}} xkxk1f(xk)f(xk1) 取代的结果。

x k + 1 x_{k+1} xk+1 实际上是两点 ( x k , f ( x k ) ) , ( x k − 1 , f ( x k − 1 ) ) (x_k,f(x_k)),(x_{k-1},f(x_{k-1})) (xk,f(xk)),(xk1,f(xk1)) 的割线与 x x x 轴交点的横坐标。

弦割法避免了求导数,但收敛速度不如牛顿法。

非线性方程组牛顿迭代法求根

考虑方程组 { f 1 ( x 1 , ⋯   , x n ) = 0 ⋯ ⋯ ⋯ f n ( x 1 , ⋯   , x n ) = 0 \begin{cases}f_1(x_1,\cdots,x_n)=0\\\cdots\cdots\cdots\\f_n(x_1,\cdots,x_n)=0 \end{cases} f1(x1,,xn)=0fn(x1,,xn)=0

其中 f 1 , f 2 , ⋯   , f n f_1,f_2,\cdots,f_n f1,f2,,fn 均为 ( x 1 , ⋯   , x n ) (x_1,\cdots,x_n) (x1,,xn) 的多元函数。用向量记号记 X = ( x 1 , ⋯   , x n ) T ∈ R n , F = ( f 1 , ⋯   , f n ) T X=(x_1,\cdots,x_n)^T\in R^n,F=(f_1,\cdots,f_n)^T X=(x1,,xn)TRn,F=(f1,,fn)T,可以写成
F ( X ) = 0 F(X)=0 F(X)=0若已给出方程的一个近似根 X ( k ) = ( x 1 k , ⋯   , x n ( k ) ) X^{(k)}=(x_1^{k},\cdots,x_n^{(k)}) X(k)=(x1k,,xn(k)),将函数 F ( X ) F(X) F(X) 的分量 f i ( x ) ( i = 1 , ⋯   , n ) f_i(x)(i=1,\cdots,n) fi(x)(i=1,,n) X ( k ) X^{(k)} X(k) 用多元函数泰勒展开并取线性部分,可表示为
F ( X ) ≈ F ( X ( k ) ) + F ′ ( X ( k ) ) ( X − X ( k ) ) 令 右 式 等 于 0 : F ′ ( X ( k ) ) ( X − X ( k ) ) = − F ( X ( k ) ) F(X)\approx F(X^{(k)})+F'(X^{(k)})(X-X^{(k)})\\令右式等于0:F'(X^{(k)})(X-X^{(k)})=-F(X^{(k)}) F(X)F(X(k))+F(X(k))(XX(k))0F(X(k))(XX(k))=F(X(k))其中 F ′ ( X ) F'(X) F(X) f 1 , f 2 , ⋯   , f n f_1,f_2,\cdots,f_n f1,f2,,fn n ∗ n n*n nn雅可比(Jacobi)矩阵
F ′ ( X ) = ∂ ( f 1 , f 2 , ⋯   , f n ) ∂ ( x 1 , x 2 , ⋯   , x n ) = [ ∂ f 1 ∂ x 1 ∂ f 1 ∂ x 2 ⋯ ∂ f 1 ∂ x n ∂ f 2 ∂ x 1 ∂ f 2 ∂ x 2 ⋯ ∂ f 2 ∂ x n ⋮ ⋮ ⋮ ∂ f n ∂ x 1 ∂ f n ∂ x 2 ⋯ ∂ f n ∂ x n ] F'(X)=\frac{\partial(f_1,f_2,\cdots,f_n)}{\partial(x_1,x_2,\cdots,x_n)}=\left[\begin{matrix}\frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \cdots&\frac{\partial f_1}{\partial x_n}\\\frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} &\cdots&\frac{\partial f_2}{\partial x_n} \\\vdots&\vdots&&\vdots\\\frac{\partial f_n}{\partial x_1} & \frac{\partial f_n}{\partial x_2} &\cdots&\frac{\partial f_n}{\partial x_n}\end{matrix}\right] F(X)=(x1,x2,,xn)(f1,f2,,fn)=x1f1x1f2x1fnx2f1x2f2x2fnxnf1xnf2xnfn求解方程组,并记为 X ( k + 1 ) X^{(k+1)} X(k+1),得
X ( k + 1 ) = X ( k ) − F ′ ( X ( k ) ) − 1 F ( X ( k ) ) ,    k = 0 , 1 , ⋯ X^{(k+1)}=X^{(k)}-F'(X^{(k)})^{-1}F(X^{(k)}),\ \ k=0,1,\cdots X(k+1)=X(k)F(X(k))1F(X(k)),  k=0,1,

定理5:设 F ( X ) F(X) F(X) 的定义域 D ⊂ R n D\subset R^n DRn X ∗ ∈ D X^*\in D XD 满足 F ( X ∗ ) = 0 F(X^*)=0 F(X)=0,在 X ∗ X^* X 的开邻域 S 0 ⊂ D S_0\subset D S0D F ′ ( X ) F'(X) F(X) 存在且连续, F ′ ( X ) F'(X) F(X) 非奇异,则牛顿法生成的序列{ X ( k ) X^{(k)} X(k)}在闭域 S ⊂ S 0 S\subset S_0 SS0 上超线性收敛于 X ∗ X^* X。若还存在常数 L > 0 L>0 L>0,使 ∣ ∣ F ′ ( X ) − F ′ ( X ∗ ) ∣ ∣ ≤ L ∗ ∣ ∣ X − X ∗ ∣ ∣ , ∀ X ∈ S ||F'(X)-F'(X^*)||\leq L*||X-X^*||,\forall X\in S F(X)F(X)LXX,XS,则{ X ( k ) X^{(k)} X(k)} 至少平方收敛。

迭代法的收敛阶和加速收敛方式

定义:设迭代法 x k + 1 = g ( x k ) x_{k+1}=g(x_k) xk+1=g(xk) 收敛于方程 x = g ( x ) x=g(x) x=g(x) 的根 x ∗ x^* x,若存在常数 p ( p ≥ 1 ) p(p\geq1) p(p1) c ( c > 0 ) c(c>0) c(c>0),使得
lim ⁡ k → ∞ ∣ x ∗ − x k + 1 ∣ ∣ x ∗ − x k ∣ p = c \lim_{k\rightarrow\infty}\frac{|x^*-x_{k+1}|}{|x^*-x_k|^p}=c klimxxkpxxk+1=c
则称该迭代过程是 p p p 阶收敛的。特别的, p = 1 ( 0 < c < 1 ) p=1(0<c<1) p=1(0<c<1) 时称线性收敛 p > 1 p>1 p>1 时称超线性收敛 p = 2 p=2 p=2 时称平方收敛。

迭代法的收敛速度依赖于迭代函数 g ( x ) g(x) g(x) 的选取。 收敛阶越高,收敛速度就越快。

定理6:设 x ∗ x^* x 是方程 x = g ( x ) x=g(x) x=g(x) 的根, g ( x ) , g ′ ( x ) , ⋯   , g ( p ) ( x ) g(x),g'(x),\cdots,g^{(p)}(x) g(x),g(x),,g(p)(x) x ∗ x^* x 的邻近连续,且 g ′ ( x ∗ ) = g ′ ′ ( x ∗ ) = ⋯ = g ( p − 1 ) ( x ∗ ) = 0 , g ( p ) ( x ∗ ) ≠ 0 g'(x^*)=g''(x^*)=\cdots=g^{(p-1)}(x^*)=0,g^{(p)}(x^*)\neq0 g(x)=g(x)==g(p1)(x)=0,g(p)(x)=0,则迭代法 x k + 1 = g ( x k ) x_{k+1}=g(x_k) xk+1=g(xk) x ∗ x^* x 邻近是 p p p 阶收敛的。

特别的,当 0 < ∣ g ′ ( x ∗ ) ∣ < 1 0<|g'(x^*)|<1 0<g(x)<1 时,迭代法是线性收敛的;当 g ′ ( x ∗ ) = 0 , g ′ ′ ( x ∗ ) ≠ 0 g'(x^*)=0,g''(x^*)\neq0 g(x)=0,g(x)=0,迭代法是线性收敛的。

证明:由 g ′ ( x ∗ ) = 0 g'(x^*)=0 g(x)=0,可知迭代法 x k + 1 = g ( x k ) x_{k+1}=g(x_k) xk+1=g(xk) 具有局部收敛性。

g ( x k ) g(x_k) g(xk) 在根 x ∗ x^* x 处泰勒展开,有
g ( x k ) = g ( x ∗ ) + g ( p ) ( ξ ) p ! ( x k − x ∗ ) p ,    ξ 在 x k 、 x ∗ 之 间 g(x_k)=g(x^*)+\frac{g^{(p)}(\xi)}{p!}(x_k-x^*)^p,\ \ \xi在x_k、x^*之间 g(xk)=g(x)+p!g(p)(ξ)(xkx)p,  ξxkx注意到 g ( x k ) = x k + 1 , g ( x ∗ ) = x ∗ g(x_k)=x_{k+1},g(x^*)=x^* g(xk)=xk+1,g(x)=x,由上式得
x k + 1 − x ∗ = g ( p ) ( ξ ) p ! ( x k − x ∗ ) p → g ( p ) ( x ∗ ) p ! ( x k − x ∗ ) p         ( k → ∞ ) x_{k+1}-x^*=\frac{g^{(p)}(\xi)}{p!}(x_k-x^*)^p\rightarrow\frac{g^{(p)}(x^*)}{p!}(x_k-x^*)^p\ \ \ \ \ \ \ (k\rightarrow\infty) xk+1x=p!g(p)(ξ)(xkx)pp!g(p)(x)(xkx)p       (k) 即迭代过程 x k + 1 = g ( x k ) x_{k+1}=g(x_k) xk+1=g(xk) x ∗ x^* x 邻近是 p p p 阶收敛的。

分析简单迭代法与牛顿迭代法的收敛速度:

简单迭代法:由 x ∗ − x k + 1 = g ( x ∗ ) − g ( x k ) = g ′ ( ζ k ) ( x ∗ − x k ) x^*-x_{k+1}=g(x^*)-g(x_k)=g'(\zeta_k)(x^*-x_k) xxk+1=g(x)g(xk)=g(ζk)(xxk),得
lim ⁡ k → ∞ ∣ x ∗ − x k + 1 ∣ ∣ x ∗ − x k ∣ = lim ⁡ k → ∞ ∣ g ′ ( ζ k ) ∣ = ∣ g ′ ( x ∗ ) ∣ \lim_{k\rightarrow\infty}\frac{|x^*-x_{k+1}|}{|x^*-x_k|}=\lim_{k\rightarrow\infty}|g'(\zeta_k)|=|g'(x^*)| klimxxkxxk+1=klimg(ζk)=g(x)所以 0 < ∣ g ′ ( x ) ∣ < 1 0<|g'(x)|<1 0<g(x)<1 时,简单迭代法线性收敛。

牛顿迭代法(1)单根情形: g ( x ) = x − f ( x ) f ′ ( x ) g(x)=x-\frac{f(x)}{f'(x)} g(x)=xf(x)f(x),知
g ′ ( x ) = 1 − [ f ′ ( x ) ] 2 − f ( x ) f ′ ′ ( x ) [ f ′ ( x ) ] 2 = f ( x ) f ′ ′ ( x ) [ f ′ ( x ) ] 2 g'(x)=1-\frac{[f'(x)]^2-f(x)f''(x)}{[f'(x)]^2}=\frac{f(x)f''(x)}{[f'(x)]^2} g(x)=1[f(x)]2[f(x)]2f(x)f(x)=[f(x)]2f(x)f(x) x ∗ x^* x f ( x ) f(x) f(x) 的一个单根,即 f ( x ∗ ) = 0 , f ′ ( x ∗ ) ≠ 0 f(x^*)=0,f'(x^*)\neq0 f(x)=0,f(x)=0,则由上式知
g ′ ( x ∗ ) = 0 , g ′ ′ ( x ∗ ) = f ′ ′ ( x ∗ ) f ′ ( x ∗ ) g'(x^*)=0,g''(x^*)=\frac{f''(x^*)}{f'(x^*)} g(x)=0,g(x)=f(x)f(x)表明牛顿迭代法在零点 x ∗ x^* x 的邻近是平方收敛的。
lim ⁡ k → ∞ x k + 1 − x ∗ ( x k − x ∗ ) 2 = g ′ ′ ( x ∗ ) 2 = f ′ ′ ( x ∗ ) 2 f ′ ( x ∗ ) \lim_{k\rightarrow\infty}\frac{x_{k+1}-x^*}{(x_k-x^*)^2}=\frac{g''(x^*)}{2}=\frac{f''(x^*)}{2f'(x^*)} klim(xkx)2xk+1x=2g(x)=2f(x)f(x)(2)重根形式: f ( x ) = ( x − x ∗ ) m q ( x ) f(x)=(x-x^*)^mq(x) f(x)=(xx)mq(x),整数 m ≥ 2 , q ( x ∗ ) ≠ 0 m\geq2,q(x^*)\neq0 m2,q(x)=0,则 x ∗ x^* x 为方程 f ( x ) = 0 f(x)=0 f(x)=0 的m重根
g ( x ) = x − f ( x ) f ′ ( x ) g ′ ( x ∗ ) = f ( x ) f ′ ′ ( x ) [ f ′ ( x ) ] 2 ∣ x = x ∗ = m ( m − 1 ) ( x − x ∗ ) 2 m − 2 q ( x ) + 2 m ( x − x ∗ ) 2 m − 1 q ′ ( x ) q ( x ) + ( x − x ∗ ) 2 m q ( x ) q ′ ′ ( x ) m 2 ( x − x ∗ ) 2 m − 2 q ( x ) 2 + ( x − x ∗ ) 2 m q ′ ( x ) 2 + 2 m ( x − x ∗ ) 2 m − 1 q ( x ) q ′ ( x ) ∣ x = x ∗ = m ( m − 1 ) q ( x ) + 2 m ( x − x ∗ ) q ′ ( x ) q ( x ) + ( x − x ∗ ) 2 q ( x ) q ′ ′ ( x ) m 2 q ( x ) 2 + ( x − x ∗ ) 2 q ′ ( x ) 2 + 2 m ( x − x ∗ ) q ( x ) q ′ ( x ) ∣ x = x ∗ = 1 − 1 m ≠ 0    ,    ∣ g ′ ( x ∗ ) ∣ < 1 g(x)=x-\frac{f(x)}{f'(x)}\\g'(x^*)=\frac{f(x)f''(x)}{[f'(x)]^2}|_{x=x^*}=\frac{m(m-1)(x-x^*)^{2m-2}q(x)+2m(x-x^*)^{2m-1}q'(x)q(x)+(x-x^*)^{2m}q(x)q''(x)}{m^2(x-x^*)^{2m-2}q(x)^2+(x-x^*)^{2m}q'(x)^2+2m(x-x^*)^{2m-1}q(x)q'(x)}|_{x=x^*}\\=\frac{m(m-1)q(x)+2m(x-x^*)q'(x)q(x)+(x-x^*)^2q(x)q''(x)}{m^2q(x)^2+(x-x^*)^2q'(x)^2+2m(x-x^*)q(x)q'(x)}|_{x=x^*}=1-\frac{1}{m}\neq0\ \ ,\ \ |g'(x^*)|<1 g(x)=xf(x)f(x)g(x)=[f(x)]2f(x)f(x)x=x=m2(xx)2m2q(x)2+(xx)2mq(x)2+2m(xx)2m1q(x)q(x)m(m1)(xx)2m2q(x)+2m(xx)2m1q(x)q(x)+(xx)2mq(x)q(x)x=x=m2q(x)2+(xx)2q(x)2+2m(xx)q(x)q(x)m(m1)q(x)+2m(xx)q(x)q(x)+(xx)2q(x)q(x)x=x=1m1=0  ,  g(x)<1所以当 x ∗ x^* x f ( x ) = 0 f(x)=0 f(x)=0 m ( m ≥ 2 ) m(m\geq2) m(m2) 重零点, f ( x ) f(x) f(x) 在其零点 x ∗ x^* x 的某邻域内有二阶连续导数,则牛顿法局部线性收敛,为使其仍然二次收敛,需对其修正。

若已知重根数 m m m g ( x ) = x − m f ( x ) f ′ ( x ) g(x)=x-m\frac{f(x)}{f'(x)} g(x)=xmf(x)f(x),可得:
g ′ ( x ∗ ) = 1 − m ∗ [ f ′ ( x ) ] 2 − f ( x ) f ′ ′ ( x ) [ f ′ ( x ) ] 2 = 1 − m + m ∗ f ( x ) f ′ ′ ( x ) [ f ′ ( x ) ] 2 = 1 − m + m ∗ ( 1 − 1 m ) = 0 g'(x^*)=1-m*\frac{[f'(x)]^2-f(x)f''(x)}{[f'(x)]^2}=1-m+m*\frac{f(x)f''(x)}{[f'(x)]^2}=1-m+m*(1-\frac{1}{m})=0 g(x)=1m[f(x)]2[f(x)]2f(x)f(x)=1m+m[f(x)]2f(x)f(x)=1m+m(1m1)=0则迭代法:
x k + 1 = x k − m f ( x k ) f ′ ( x k )    ,    k = 0 , 1 , ⋯ x_{k+1}=x_k-\frac{mf(x_k)}{f'(x_k)}\ \ ,\ \ k=0,1,\cdots xk+1=xkf(xk)mf(xk)  ,  k=0,1,
局部二次收敛的

若重根数 m m m 未知: F ( x ) = f ( x ) f ′ ( x ) F(x)=\frac{f(x)}{f'(x)} F(x)=f(x)f(x),若 x ∗ x^* x f ( x ) = 0 f(x)=0 f(x)=0 m m m 重根,则
F ( x ) = ( x − x ∗ ) m q ( x ) m ( x − x ∗ ) m − 1 q ( x ) + ( x − x ∗ ) m q ′ ( x ) = ( x − x ∗ ) q ( x ) m q ( x ) + ( x − x ∗ ) q ′ ( x ) F(x)=\frac{(x-x^*)^mq(x)}{m(x-x^*)^{m-1}q(x)+(x-x^*)^mq'(x)}=\frac{(x-x^*)q(x)}{mq(x)+(x-x^*)q'(x)} F(x)=m(xx)m1q(x)+(xx)mq(x)(xx)mq(x)=mq(x)+(xx)q(x)(xx)q(x)得到 x ∗ x^* x F ( x ) = 0 F(x)=0 F(x)=0 的单根,用牛顿法,其迭代函数为:
g ( x ) = x − F ( x ) F ′ ( x ) = x − f ( x ) f ′ ( x ) [ f ′ ( x ) ] 2 − f ( x ) f ′ ′ ( x ) [ f ′ ( x ) ] 2 = x − f ( x ) f ′ ( x ) [ f ′ ( x ) ] 2 − f ( x ) f ′ ′ ( x ) g(x)=x-\frac{F(x)}{F'(x)}=x-\frac{\frac{f(x)}{f'(x)}}{\frac{[f'(x)]^2-f(x)f''(x)}{[f'(x)]^2}}=x-\frac{f(x)f'(x)}{[f'(x)]^2-f(x)f''(x)} g(x)=xF(x)F(x)=x[f(x)]2[f(x)]2f(x)f(x)f(x)f(x)=x[f(x)]2f(x)f(x)f(x)f(x)从而可构造迭代法
x k + 1 = x k − f ( x ) f ′ ( x ) [ f ′ ( x ) ] 2 − f ( x ) f ′ ′ ( x )    ,    k = 0 , 1 , ⋯ x_{k+1}=x_k-\frac{f(x)f'(x)}{[f'(x)]^2-f(x)f''(x)}\ \ ,\ \ k=0,1,\cdots xk+1=xk[f(x)]2f(x)f(x)f(x)f(x)  ,  k=0,1,是二阶收敛的。

迭代加速方法

1、艾特肯(Aitken)加速方法:对于收敛于 x ∗ x^* x 的不动点迭代法 x k + 1 = g ( x k ) x_{k+1}=g(x_k) xk+1=g(xk),设 x k x_k xk 是根 x ∗ x^* x 的某个近似值,用迭代公式校正一次得:
x k + 1 = g ( x k ) x_{k+1}=g(x_k) xk+1=g(xk)由微分中值定理得
x k + 1 − x ∗ = g ( x k ) − g ( x ∗ ) = g ′ ( ζ ) ( x k − x ∗ )    ,    ζ 介 于 x k 、 x ∗ 之 间 x_{k+1}-x^*=g(x_k)-g(x^*)=g'(\zeta)(x_k-x^*)\ \ ,\ \ \zeta介于x_k、x^*之间 xk+1x=g(xk)g(x)=g(ζ)(xkx)  ,  ζxkx假定 g ′ ( x ) g'(x) g(x) 改变不大,近似去某个近似值 L L L,则有
x k + 1 − x ∗ ≈ L ( x k − x ∗ ) (1) x_{k+1}-x^*\approx L(x_k-x^*)\tag{1} xk+1xL(xkx)(1)再进行一次校正,得
x k + 2 = g ( x k + 1 ) x k + 2 − x ∗ ≈ L ( x k + 1 − x ∗ ) x_{k+2}=g(x_{k+1})\\x_{k+2}-x^*\approx L(x_{k+1}-x^*) xk+2=g(xk+1)xk+2xL(xk+1x)与(1)式联立消去未知的 L L L ,有
x ∗ − x k + 1 x ∗ − x k = x ∗ − x k + 2 x ∗ − x k + 1 x ∗ ≈ x k x k + 2 − x k + 1 2 x k + 2 − 2 x k + 1 + x k = x k − ( x k + 1 − x k ) 2 x k + 2 − 2 x k + 1 + x k \frac{x^*-x_{k+1}}{x^*-x_k}=\frac{x^*-x_{k+2}}{x^*-x_{k+1}}\\x^*\approx\frac{x_kx_{k+2}-x_{k+1}^2}{x_{k+2}-2x_{k+1}+x_k}=x_k-\frac{(x_{k+1}-x_k)^2}{x_{k+2}-2x_{k+1}+x_k} xxkxxk+1=xxk+1xxk+2xxk+22xk+1+xkxkxk+2xk+12=xkxk+22xk+1+xk(xk+1xk)2可用上式右端作为 x ∗ x^* x 的新近似: x ~ k = x k − ( x k + 1 − x k ) 2 x k + 2 − 2 x k + 1 + x k \tilde{x}_k=x_k-\frac{(x_{k+1}-x_k)^2}{x_{k+2}-2x_{k+1}+x_k} x~k=xkxk+22xk+1+xk(xk+1xk)2。这被称为艾特肯(Aitken)加速方法

2、斯蒂芬森(Steffensen)方法:也称为艾特肯算法,把艾特肯加速技巧与不动点迭代结合,可得: { y k = g ( x k ) z k = g ( y k ) x k + 1 = x k − ( y k − x k ) 2 z k − 2 y k + x k    ( k = 0 , 1 , 2 , ⋯   ) \begin{cases}y_k=g(x_k)\\z_k=g(y_k)\\x_{k+1}=x_k-\frac{(y_k-x_k)^2}{z_k-2y_k+x_k} \end{cases}\ \ (k=0,1,2,\cdots) yk=g(xk)zk=g(yk)xk+1=xkzk2yk+xk(ykxk)2  (k=0,1,2,)

也可将其写成另一种不动点迭代:
x k + 1 = g ( x k )     ( k = 0 , 1 , 2 , ⋯   ) 其 中     g ( x ) = x − ( g ( x ) − x ) 2 g ( g ( x ) ) − 2 g ( x ) + x x_{k+1}=g(x_k)\ \ \ (k=0,1,2,\cdots)\\其中\ \ \ g(x)=x-\frac{(g(x)-x)^2}{g(g(x))-2g(x)+x} xk+1=g(xk)   (k=0,1,2,)   g(x)=xg(g(x))2g(x)+x(g(x)x)2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值