数值计算方法第二章—非线性方程的数值解法

非线性方程的数值解法

初始近似值的搜索

  • 方程的根

    f ( x ∗ ) = 0 f(x^*)=0 f(x)=0 x ∗ x^* x f ( x ) f(x) f(x) 的根


    单根和重根

    f ( x ∗ ) f(x^*) f(x) m m m 重根 x ∗ x^* x 的充要条件是
    f ( x ∗ ) = f ′ ( x ∗ ) = ⋯ = f ( m − 1 ) ( x ∗ ) = 0 f(x^*)=f'(x^*)=\cdots=f^{(m-1)}(x^*)=0 f(x)=f(x)==f(m1)(x)=0

    f ( m ) ( x ∗ ) ≠ 0 f^{(m)}(x^*)\ne0 f(m)(x)=0

    例: x = 0 x=0 x=0 是方程 f ( x ) = e 2 x − 1 − 2 x − 2 x 2 = 0 f(x)=e^{2x}-1-2x-2x^2=0 f(x)=e2x12x2x2=0 的几重根

    解: f ( x ) = e 2 x − 1 − 2 x − 2 x 2    f ( 0 ) = 0 f(x)=e^{2x}-1-2x-2x^2\ \ f(0)=0 f(x)=e2x12x2x2  f(0)=0

    f ′ ( x ) = 2 e 2 x − 2 − 4 x    f ′ ( 0 ) = 0 f'(x)=2e^{2x}-2-4x\ \ f'(0)=0 f(x)=2e2x24x  f(0)=0

    f ′ ′ ( x ) = 4 e 2 x − 4    f ′ ′ ( 0 ) = 0 f''(x)=4e^{2x}-4\ \ f''(0)=0 f(x)=4e2x4  f(0)=0

    f ′ ′ ′ ( x ) = 8 e 2 x    f ′ ′ ′ ( 0 ) = 8 ≠ 0 f'''(x)=8e^{2x}\ \ f'''(0)=8\ne0 f(x)=8e2x  f(0)=8=0

    x = 0 x=0 x=0 f ( x ) f(x) f(x) 的三重根


    • 有根区间

      f ( x ) = 0 f(x)=0 f(x)=0有根区间 [   a ,   b   ] [\ a,\ b\ ] [ a, b ]至少有一个


      f ( x ) f(x) f(x) 在区间 [   a ,   b   ] [\ a,\ b\ ] [ 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 ]至少有一个

    • 隔根区间

      f ( x ) = 0 f(x)=0 f(x)=0隔根区间 [   a ,   b   ] [\ a,\ b\ ] [ a, b ]只有一个


      f ( x ) f(x) f(x) 在区间 [   a ,   b   ] [\ a,\ b\ ] [ 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 ]有且仅有一个根

  • 逐步搜索法

    f ( x ) f(x) f(x) 的有根区间 [   a ,   b   ] [\ a,\ b\ ] [ a, b ] ,不妨假定 f ( a ) < 0 f(a)<0 f(a)<0 ,从 x 0 = a x_0=a x0=a 出发,按步长 h h h 一步一步向右跨。一旦 x k = a + k h x_k=a+kh xk=a+kh 上的 f ( x k ) f(x_k) f(xk) f ( a ) f(a) f(a) 异号,则确定了缩小的有根区间 [   x k − 1 ,   x k   ] [\ x_{k-1},\ x_k\ ] [ xk1, xk ]

  • 区间二分法(只能求单根)

    f ( x ) f(x) f(x) 在隔根区间 [   a ,   b   ] [\ a,\ b\ ] [ a, b ] 上单调连续,则不断计算 f ( a + b 2 ) f(\dfrac {a+b}2) f(2a+b)


    误差分析

    取有根区间 [   a k ,   b k   ] [\ a_{k},\ b_k\ ] [ ak, bk ] 的中点
    x k = 1 2 ( a k + b k ) x_k=\dfrac 12(a_k+b_k) xk=21(ak+bk)
    作为根的近似值,则此时的误差
    ∣ x ∗ − x k ∣ ≤ 1 2 ( b k − a k ) = 1 2 k + 1 ( b − a ) |x^*-x_k|\le\dfrac 12(b_k-a_k)=\dfrac 1{2^{k+1}}(b-a) xxk21(bkak)=2k+11(ba)
    若事先给定误差要求为 ε \varepsilon ε ,则只需
    ∣ x ∗ − x k ∣ ≤ 1 2 k + 1 ( b − a ) < ε |x^*-x_k|\le\dfrac 1{2^{k+1}}(b-a)<\varepsilon xxk2k+11(ba)<ε
    即可停止运算

    此时二分最小次数 k k k ,由 ∣ x ∗ − x k ∣ ≤ 1 2 k + 1 ( b − a ) < ε |x^*-x_k|\le\dfrac 1{2^{k+1}}(b-a)<\varepsilon xxk2k+11(ba)<ε 2 k + 1 > b − a ε 2^{k+1}>\dfrac {b-a}\varepsilon 2k+1>εba
    k > l g ( b − a ) − l g ε l g 2 − 1 k>\dfrac {lg(b-a)-lg\varepsilon}{lg2}-1 k>lg2lg(ba)lgε1

迭代法

  • 不动点迭代法
    f ( x ) = 0 ⟷ x = g ( x ) f(x)=0\longleftrightarrow x=g(x) f(x)=0x=g(x)
    初值 x 0 x_0 x0 出发,计算 x 1 = g ( x 0 ) ,   x 2 = g ( x 1 ) ,   ⋯   , x k + 1 = g ( x k ) ,   ⋯ x_1=g(x_0),\ x_2=g(x_1),\ \cdots,x_{k+1}=g(x_k),\ \cdots x1=g(x0), x2=g(x1), ,xk+1=g(xk),  ,若存在 x ∗ x^* x 使得 lim ⁡ k → ∞ x k = x ∗ \lim\limits_{k\rightarrow\infty}x_k=x^* klimxk=x ,且 g ( x ) g(x) g(x) 连续,则 x ∗ = g ( x ∗ ) x^*=g(x^*) x=g(x) ,即 x ∗ x^* x g g g不动点,也就是 f f f 的根


  • 不动点迭代的收敛性

    φ ( x ) \varphi(x) φ(x) 在区间 [   a ,   b   ] [\ a,\ b\ ] [ a, b ] 上具有连续一阶导数,且满足

    1. x ∈ [   a ,   b   ] x\in[\ a,\ b\ ] x[ a, b ] 时, φ ( x ) ∈ [   a ,   b   ] \varphi(x)\in[\ a,\ b\ ] φ(x)[ a, b ]

    2. ∃   0 ≤ L < 1 \exist\ 0\le L<1  0L<1 ,使得对所有的 x ∈ [   a ,   b   ] x\in[\ a,\ b\ ] x[ a, b ] ,有

    ∣ φ ′ ( x ) ∣ ≤ L |\varphi'(x)|\le L φ(x)L

    则方程 x = φ ( x ) x=\varphi(x) x=φ(x) 在区间 [   a ,   b   ] [\ a,\ b\ ] [ a, b ] 上的解 x ∗ x^* x 存在且唯一。对任意的 x 0 ∈ [   a ,   b   ] x_0\in [\ a,\ b\ ] x0[ a, b ] ,迭代过程 x k + 1 = φ ( x k ) x_{k+1}=\varphi(x_k) xk+1=φ(xk)收敛 x ∗ x^* x L L L 越小,收敛越快

    并且有误差估计式

    • ∣ x ∗ − x k ∣ ≤ L 1 − L ∣ x k − x k − 1 ∣ |x^*-x_k|\le\dfrac L{1-L}|x_k-x_{k-1}| xxk1LLxkxk1
    • ∣ x ∗ − x k ∣ ≤ L k 1 − L ∣ x 1 − x 0 ∣ |x^*-x_k|\le\dfrac {L^k}{1-L}|x_1-x_0| xxk1LLkx1x0

    设在区间 [   a ,   b   ] [\ a,\ b\ ] [ a, b ] 上方程 x = φ ( x ) x=\varphi(x) x=φ(x) 有根 x ∗ x^* x ,且对任意 x ∈ [   a ,   b   ] x\in[\ a,\ b\ ] x[ a, b ] ∣ φ ′ ( x ) ∣ ≥ 1 |\varphi '(x)|\ge1 φ(x)1 ,则对任意 x 0 ( ≠ x ∗ ) ∈ [   a ,   b   ] x_0(\ne x^*)\in[\ a,\ b\ ] x0(=x)[ a, b ] ,迭代过程 x k + 1 = φ ( x k ) x_{k+1}=\varphi(x_k) xk+1=φ(xk) 一定发散

    例: x 3 − 2 x − 5 = 0 x^3-2x-5=0 x32x5=0 的最小正根

    解: 用试凑法得 f ( 2 ) = − 1 f(2)=-1 f(2)=1 f ( 3 ) = 16 f(3)=16 f(3)=16 ,故 x ∗ ∈ [   2 ,   3   ] x^*\in[\ 2,\ 3\ ] x[ 2, 3 ]

    若取迭代格式 x k + 1 = 2 x k + 5 x k 2 x_{k+1}=\dfrac {2x_k+5}{x_k^2} xk+1=xk22xk+5 ,则 φ ( x ) = 2 x + 5 x 2 \varphi(x)=\dfrac {2x+5}{x^2} φ(x)=x22x+5,故 φ ′ ( x ) = − 2 ( x + 5 ) x 3 \varphi'(x)=\dfrac {-2(x+5)}{x^3} φ(x)=x32(x+5)

    φ ′ ( 2 ) = − 14 8 \varphi'(2)=-\dfrac {14}8 φ(2)=814 ,即 max ⁡ 2 ≤ x ≤ 3 ∣ φ ′ ( x ) ∣ > 1 \max\limits_{2\le x\le 3}|\varphi'(x)|>1 2x3maxφ(x)>1 ,故此迭代发散

    将原方程改写成 x = 2 x + 5 3 x=\sqrt[3]{2x+5} x=32x+5 ,则 φ ′ ( x ) = 2 3 ( 2 x + 5 ) − 2 3 \varphi'(x)=\dfrac23(2x+5)^{-\frac 23} φ(x)=32(2x+5)32

    max ⁡ 2 ≤ x ≤ 3 ∣ φ ′ ( x ) ∣ = 0.94 < 1 \max\limits_{2\le x\le 3}|\varphi'(x)|=0.94<1 2x3maxφ(x)=0.94<1 , 迭代收敛

    x k + 1 = 2 x k + 5 3   ,   k = 0 , 1 , 2 , ⋯ x_{k+1}=\sqrt[3]{2x_k+5}\ ,\ k=0,1,2,\cdots xk+1=32xk+5  , k=0,1,2,

    选初值 x 0 = 2.5 x_0=2.5 x0=2.5 (区间内任选),迭代后得 x ∗ = 2.0946 x^*=2.0946 x=2.0946

    • 局部收敛性

      φ ( x ) \varphi(x) φ(x) x = φ ( x ) x=\varphi(x) x=φ(x) 的根 x ∗ x^* x 附近连续,且有
      ∣ φ ′ ( x ∗ ) ∣ < 1 |\varphi'(x^*)|<1 φ(x)<1
      则迭代格式 x k + 1 = φ ( x k ) x_{k+1}=\varphi(x_k) xk+1=φ(xk) x ∗ x^* x 附件具有局部收敛性

      因为实际中 x ∗ x^* x 事先不知道,但初值在根领域,根据 φ ′ ( x ) \varphi'(x) φ(x) 的连续性,可采用
      ∣ φ ′ ( x 0 ) ∣ < 1 |\varphi'(x_0)|<1 φ(x0)<1
      来代替 ∣ φ ′ ( x ∗ ) ∣ < 1 |\varphi'(x^*)|<1 φ(x)<1 ,判断迭代收敛性

      例: 方程 x 3 − x − 1 = 0 x^3-x-1=0 x3x1=0 x = 1.5 x=1.5 x=1.5 附近有根,把方程写出三种不同的等价形式

      1. x = x + 1 3 x=\sqrt[3]{x+1} x=3x+1
      2. x = 1 + 1 x x=\sqrt{1+\dfrac1x} x=1+x1
      3. x = x 3 − 1 x=x^3-1 x=x31

      迭代格式在 x 0 = 1.5 x_0=1.5 x0=1.5 处不收敛的是()

      解: 对各等价形式求导得 φ ′ ( x ) \varphi'(x) φ(x)

      分别求出 φ ′ ( x 0 ) \varphi'(x_0) φ(x0) ,若其大于一,则迭代不收敛

      故选 3


  • 迭代过程的收敛速度

    设迭代过程 x k + 1 = φ ( x k ) x_{k+1}=\varphi(x_k) xk+1=φ(xk) 收敛于 x = φ ( x ) x=\varphi(x) x=φ(x) 的根 x ∗ x^* x ,令迭代误差 e k = x k − x ∗ e_k=x_k-x^* ek=xkx ,若存在常数 p   ( p ≥ 1 ) p\ (p\ge1) p (p1) c   ( c > 0 ) c\ (c>0) c (c>0) ,使得
    lim ⁡ k → + ∞ ∣ e k + 1 ∣ ∣ e k ∣ p = c \lim\limits_{k\rightarrow+\infty}\dfrac {|e_{k+1}|}{|e_k|^p}=c k+limekpek+1=c
    则称序列 x k {x_k} xk p p p 阶收敛的

    p = 1 p=1 p=1 时称线性收敛 p = 2 p=2 p=2 时称平方收敛或二次收敛


    简单判断方法

    对迭代过程 x k + 1 = φ ( x k ) x_{k+1}=\varphi(x_k) xk+1=φ(xk) ,若 φ ( p ) ( x ) \varphi^{(p)}(x) φ(p)(x) 在所求根 x ∗ x^* x 领域连续,且
    φ ′ ( x ∗ ) = φ ′ ′ ( x ∗ ) = ⋯ = φ ( p − 1 ) ( x ∗ ) = 0 \varphi'(x^*)=\varphi''(x^*)=\cdots=\varphi^{(p-1)}(x^*)=0 φ(x)=φ(x)==φ(p1)(x)=0

    φ ( p ) ( x ∗ ) ≠ 0 \varphi^{(p)}(x^*)\ne0 φ(p)(x)=0

    则迭代过程在 x ∗ x^* x 领域是 p p p 阶收敛的

    例: 迭代过程 x k + 1 = 2 3 x k + 1 x k 2 x_{k+1}=\dfrac 23x_k+\dfrac 1{x_k^2} xk+1=32xk+xk21 收敛于 x ∗ = 3 3 x^*=\sqrt[3]3 x=33 时,求其收敛速度

    解: φ ( x ) = 2 3 x + 1 x 2 \varphi(x)=\dfrac 23x+\dfrac 1{x^2} φ(x)=32x+x21

    φ ′ ( x 0 ) = 0 \varphi'(x_0)=0 φ(x0)=0 φ ′ ′ ( x 0 ) ≠ 0 \varphi''(x_0)\ne0 φ(x0)=0

    x k {x_k} xk 平方收敛


    • φ ′ ( x ∗ ) ≠ 0 \varphi'(x^*)\ne0 φ(x)=0 最多线性收敛
    • φ ′ ( x ∗ ) = 0 \varphi'(x^*)=0 φ(x)=0 至少平方收敛

  • 迭代加速

    加权法加速

    x k x_k xk 是根 x ∗ x^* x 的近似值,在 [   x k ,   x ∗   ] [\ x_k,\ x^*\ ] [ xk, x ] φ ′ ( x ) \varphi'(x) φ(x) 变化不大,其估计值 c c c ,则有加权法加速公式
    x k + 1 = 1 1 − c [   φ ( x k ) − c x k   ] x_{k+1}=\dfrac 1{1-c}[\ \varphi(x_k)-cx_k\ ] xk+1=1c1[ φ(xk)cxk ]

    例: 用加权法加速求方程 x = e − x x=e^{-x} x=ex 在 0.5 附近的一个根

    解: 因为在 x 0 = 0.5 x_0=0.5 x0=0.5 附近有
    φ ′ ( x ) ∣ 0.5 = − e − x ∣ 0.5 = − e − 0.5 ≈ − 0.6 \varphi'(x)|_{0.5}=-e^{-x}|_{0.5}=-e^{-0.5}\approx-0.6 φ(x)0.5=ex0.5=e0.50.6
    故加速迭代公式写成
    x k + 1 = 1 1.6 ( e − x k + 0.6 x k ) x_{k+1}=\dfrac 1{1.6}(e^{-x_k}+0.6x_k) xk+1=1.61(exk+0.6xk)

牛顿迭代法

  • 迭代公式的建立

    对于非线性方程 f ( x ) = 0 f(x)=0 f(x)=0 ,若 f ′ ( x k ) ≠ 0 f'(x_k)\ne0 f(xk)=0 ,建立迭代格式
    x k + 1 = x k − f ( x k ) f ′ ( x k )   ,   k = 0 , 1 , ⋯ x_{k+1}=x_k-\dfrac {f(x_k)}{f'(x_k)}\ ,\ k=0,1,\cdots xk+1=xkf(xk)f(xk) , k=0,1,
    相应的迭代函数
    φ ( x ) = x − f ( x ) f ′ ( x ) \varphi(x)=x-\dfrac {f(x)}{f' (x)} φ(x)=xf(x)f(x)

    牛顿迭代法的计算步骤:

    1. 给出 x 0 x_0 x0 , ε \varepsilon ε N N N
    2. 计算 x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1=x_0-\dfrac {f(x_0)}{f'(x_0)} x1=x0f(x0)f(x0)
    3. ∣ x 1 − x 0 ∣ < ε |x_1-x_0|<\varepsilon x1x0<ε 则转 4, 否则 x 0 = x 1 x_0=x_1 x0=x1 ,转步骤 2
    4. 输出 x 1 x_1 x1 ,结束
  • 牛顿迭代法的收敛情况

    • 局部收敛性

      f ( x ∗ ) = 0 f(x^*)=0 f(x)=0 f ′ ( x ∗ ) ≠ 0 f'(x^*)\ne0 f(x)=0 f ′ ′ ( x ∗ ) f''(x^*) f(x) x ∗ x^* x 邻域连续,则牛顿迭代法在 x ∗ x^* x 局部收敛,且至少 2 阶收敛,并有
      lim ⁡ k → ∞ e k + 1 e k 2 = f ′ ′ ( x ∗ ) 2 f ′ ( x ∗ ) \lim\limits_{k\rightarrow\infty}\dfrac {e_{k+1}}{e_k^2}=\dfrac {f''(x^*)}{2f'(x^*)} klimek2ek+1=2f(x)f(x)

      例: 设函数 f ( x ) = ( x 3 − a ) 2 f(x)=(x^3-a)^2 f(x)=(x3a)2 ,写出解 f ( x ) = 0 f(x)=0 f(x)=0 的牛顿迭代格式,并证明此格式的收敛阶

      解: f ( x ) = ( x 3 − a ) 2 f(x)=(x^3-a)^2 f(x)=(x3a)2 f ′ ( x ) = 6 ( x 3 − a ) x 2 f'(x)=6(x^3-a)x^2 f(x)=6(x3a)x2

      故迭代格式为 x k + 1 = x k − ( x k 3 − a ) 2 6 ( x k 3 − a ) x k 2 = 5 6 x k + a 6 x k 2 x_{k+1}=x_k-\dfrac {(x_k^3-a)^2}{6(x_k^3-a)x_k^2}=\dfrac 56x_k+\dfrac a{6x_k^2} xk+1=xk6(xk3a)xk2(xk3a)2=65xk+6xk2a

      迭代函数 φ ( x ) = 2 3 x + a 3 x 2 \varphi(x)=\dfrac 23x+\dfrac a{3x^2} φ(x)=32x+3x2a φ ′ ( x ) = 2 3 − 2 a 3 x 3 \varphi'(x)=\dfrac 23-\dfrac{2a}{3x^3} φ(x)=323x32a ,又有 x ∗ = a 3 x^*=\sqrt[3]a x=3a

      φ ′ ( a 3 ) = 0.5 < 1 ≠ 0 \varphi'(\sqrt[3]a)=0.5<1\ne0 φ(3a )=0.5<1=0 ,故牛顿迭代法线性收敛


  • 牛顿迭代法的修正

    • 简化牛顿迭代法(平行弦法)

      简化牛顿迭代法为 x k + 1 = x k − f ( x k ) c x_{k+1}=x_k-\dfrac {f(x_k)}c xk+1=xkcf(xk) ,其中 c c c 为常数

      c c c 一般取 c = f ′ ( x 0 ) c=f'(x_0) c=f(x0)

    • 牛顿下山法

      牛顿下山法需要满足所选初值能使函数值单调下降,即下山条件
      ∣ f ( x k + 1 ) ∣ < ∣ f ( x k ) ∣ |f(x_{k+1})|<|f(x_k)| f(xk+1)<f(xk)
      加入权值 λ \lambda λ ,有迭代公式
      x k + 1 = x k − λ f ( x k ) f ′ ( x k ) x_{k+1}=x_k-\lambda\dfrac {f(x_k)}{f'(x_k)} xk+1=xkλf(xk)f(xk)
      其中 λ \lambda λ 为下山因子

      下山因子的选择是逐步探索进行的,从 λ = 1 \lambda=1 λ=1 开始反复将 λ \lambda λ 的值减半进行试算,一旦单调下降条件成立,则下山成功;反之,下山失败,需要**另选初值 ** x 0 x_0 x0 重算

      牛顿下山法运算步骤

      1. 给出初值 x 0 x_0 x0 ε λ \varepsilon_\lambda ελ
      2. λ = 1 \lambda =1 λ=1
      3. x 0 x_0 x0 计算 x 1 x_1 x1 x 0 − λ f ( x 0 ) f ′ ( x 0 ) → x 1 x_0-\lambda\dfrac {f(x_0)}{f'(x_0)}\rightarrow x_1 x0λf(x0)f(x0)x1
      4. ∣ f ( x 1 ) ∣ < ∣ f ( x 0 ) ∣ |f(x_{1})|<|f(x_0)| f(x1)<f(x0) ,下山成功, x 1 → x 0 x_1\rightarrow x_0 x1x0 转牛顿法
      5. 否则若 λ < ε λ \lambda<\varepsilon_\lambda λ<ελ ,下山失败,停止迭代,另选初值 x 0 x_0 x0
      6. λ 2 → λ \dfrac \lambda 2\rightarrow \lambda 2λλ ,返回步骤 3
    • 重根时的修正(重根数已知

      x ∗ x^* x f ( x ) = 0 f(x)=0 f(x)=0 m ( m ≥ 2 ) m(m\ge2) m(m2) 重根时,牛顿法仅为线性收敛。改进牛顿法
      x k + 1 = x k − m f ( x k ) f ′ ( x k ) x_{k+1}=x_k-m\dfrac {f(x_k)}{f'(x_k)} xk+1=xkmf(xk)f(xk)
      二阶收敛的方法

弦截法

  • 单点弦法

    x k + 1 = x k − f ( x k ) f ( x k ) − f ( x 0 ) ( x k − x 0 )   ,   k = 1 , 2 , ⋯ x_{k+1}=x_k-\dfrac {f(x_k)}{f(x_k)-f(x_0)}(x_k-x_0)\ ,\ k=1,2,\cdots xk+1=xkf(xk)f(x0)f(xk)(xkx0) , k=1,2,

  • 双点弦法(收敛速度低于牛顿迭代法,高于不动点迭代法)

    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-\dfrac {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,

你可能感兴趣的:(线性代数,算法)