方程的迭代解法

  • 确定初值
    • 画图法
    • 扫描法
      • 在有根区间中,选定一个步长 hh,用零点定理确定当前区间 [x0,x0+h][x_0,x_0 + h] 内是否有根,并令 x0x0+hx_0 \longleftarrow x_0 + h,判断下一个区间。
      • 如果 hh 过大可能漏掉根,如果过小则计算量大。
    • 二分法
      • 不断切分当前区间 [a,b][a,b],进入有根的子区间,并继续寻找。
      • 切分 nn 次后,最终子区间长度为 ba2n\dfrac{b - a}{2^n},方法误差 Δxnba2n|\Delta x_n| \le \dfrac{b - a}{2^n}
      • 如果要求 Δxnε|\Delta x_n| \le \varepsilon,则 nlog2baε=ln(ba)lnεln2n \ge \log_2\dfrac{b - a}{\varepsilon} = \dfrac{\ln(b - a) - \ln \varepsilon}{\ln 2}
      • 二分法无法求复根以及偶重根。
  • 迭代方法
    • 迭代计算
      • 已知方程 f(x)=0f(x) = 0,则将其变换为 x=φ(x)x = \varphi(x),则 xn+1=φ(xn)x_{n + 1} = \varphi(x_n) 是迭代公式。
      • 从初值 x0x_0 开始,得到 x1=φ(x0),x2=φ(x1),x_1 = \varphi(x_0),x_2 = \varphi(x_1),\dots,则 x0,x1,x2,x_0,x_1,x_2,\dots 是迭代序列。
      • 如果 limn+xn=α\lim\limits_{n \to +\infty} x_n = \alpha 存在,则 α\alpha 就是方程的根。如果发散,则这种迭代法失效。
    • 收敛性
      • 类型
        • 大范围收敛:任意位置都可以收敛。
        • 局部收敛:收敛速度更块,但需要初值接近根。
      • 收敛的充分条件
        • 如果在 [a,b][a, b]φ(x)\varphi(x) 可导,且满足 φ(x)q<1|\varphi'(x)| \le q < 1,则迭代过程收敛。
        • qq 在此处保证 φ(x)|\varphi'(x)| 不是收敛于 11
        • qq 越小则收敛越快。
        • 实际应用中,[a,b][a,b] 长度较小,φ(x)|\varphi'(x)| 变化较小,所以只判断 φ(x0)<1|\varphi(x_0)|<1
      • 收敛速度
        • 如果存在正数 r,cr,c 满足 limn+xn+1axnar=c\lim\limits_{n \to +\infty} \dfrac{|x_{n+1} - a|}{|x_n - a|^r} = c,则其 rr 阶收敛。
    • 终止条件
      • 迭代终止条件为 xnα<ε|x_n - \alpha| < \varepsilon,但需要估计一个 xnα|x_n - \alpha| 的上界来解决 α\alpha 未知的问题。
      • 常用上界公式:
        • xnαq1qxnxn1|x_n - \alpha| \le \dfrac{q}{1 - q}|x_n - x_{n - 1}|,对于 q0.5q\le 0.5 时,可以用 xnαxnxn1|x_n - \alpha| \le |x_n - x_{n - 1}| 替代。
        • xnαqn1qx1x0|x_n - \alpha| \le \dfrac{q^n}{1 - q}|x_1 - x_0|,该公式可以估计 nn
        • xnαφ(xn)m,mφ(x)|x_n - \alpha| \le \dfrac{|\varphi(x_n)|}{m},m \le |\varphi'(x)|
    • 误差分析
  • 常用迭代公式
    • 构造迭代公式
      • 构造法 1
        • 已知方程 x=φ(x)x = \varphi(x),引入参数 θ\theta 并变换得到 xθx=φ(x)θxx - \theta x = \varphi(x) - \theta x
        • 整理并构造一个迭代公式 xn+1=11θ(φ(x)θx)=ψ(x)x_{n + 1} = \dfrac{1}{1 - \theta}(\varphi(x) - \theta x) = \psi(x)
        • 通过选取 θψ(x)\theta \approx \psi'(x),可以使该迭代公式的 q|q| 较小。
      • 构造法 2
        • 已知方程 f(x)=0f(x) = 0,构造迭代公式 xn+1=xnλf(xn)x_{n + 1} = x_n - \lambda f(x_n)
      • 反函数法
        • 如果 φ(x)>1|\varphi'(x)|>1,则可以构造 φ(x)\varphi(x) 的反函数 ψ(x)\psi(x),变换迭代公式为 x=ψ(x)x = \psi(x),并且满足收敛条件。
    • 经典公式
      • 埃特金法
        • 埃特金法基于构造法 1。
        • 对于方程 x=φ(x)x = \varphi(x),首先选定初值 x0x_0,按照以下方式迭代:
          • 已知当前为 xnx_n,计算 yn+1=φ(xn)y_{n + 1} = \varphi(x_n)zn+1=φ(yn+1)=φ(φ(xn))z_{n + 1} = \varphi(y_{n + 1}) = \varphi(\varphi(x_n))
          • 计算 θn=zn+1yn+1yn+1xn\theta_n = \dfrac{z_{n + 1} - y_{n + 1}}{y_{n + 1} - x_n}
          • 得出 xn+1=11θn(φ(xn)θnxn)=xnzn+1yn+12xn2yn+1+zn+1x_{n + 1} = \dfrac{1}{1 - \theta_n}\left(\varphi(x_n) - \theta_n x_n\right) = \dfrac{x_n z_{n + 1} - y_{n + 1}^2}{x_n - 2y_{n + 1} + z_{n + 1}}
        • 整理后的迭代公式:xn+1=xnφ(φ(xn))(φ(xn))2xn2φ(xn)+φ(φ(xn))x_{n + 1} = \dfrac{x_n \varphi(\varphi(x_n)) - (\varphi(x_n))^2}{x_n - 2\varphi(x_n) + \varphi(\varphi(x_n))}
        • 埃特金法的几何意义是用割线代替曲线 y=φ(x)y = \varphi(x) 求与 y=xy = x 的交点。
        • 收敛阶为 22
      • 牛顿法
        • 牛顿法基于构造法 2,选取 λ=1f(xn)\lambda = \dfrac{1}{f'(x_n)},迭代公式为 xn+1=xnf(xn)f(xn)x_{n + 1} = x_n - \dfrac{f(x_n)}{f'(x_n)}
        • 牛顿法的几何意义是用切线代替曲线求与 xx 轴交点,又叫切线法。
        • 牛顿法在 [a,b][a,b] 内的收敛条件:
          • f(x)f(x)[a,b][a,b] 内二阶可导;
          • f(a)f(b)<0f(a)f(b) < 0
          • f(x)0f'(x) \ne 0f(x)f''(x) 不变号;
          • f(x0)f(x0)>0f(x_0)f''(x_0) > 0
        • 牛顿法对初值敏感,如果初值靠近根,则求解快速,否则不容易收敛。
        • 收敛阶为 22
      • 简化切线法
        • 基于构造法 2,选取 λ=1f(x0)\lambda = \dfrac{1}{f'(x_0)},迭代公式为 xn+1=xnf(xn)f(x0)x_{n + 1} = x_n - \dfrac{f(x_n)}{f'(x_0)}
        • 切线固定为初值处的切线。
      • 修正切线法
        • 基于构造法 2 和简化切线法,每迭代 mm 次,重新选取当前 xnx_n 处的切线斜率作为 λ\lambda
      • 牛顿下山法
        • 定义下山条件为 f(x)>f(x1)>f(x2)>|f(x)| > |f(x_1)| > |f(x_2)| > \cdots,牛顿下山法要求迭代的 xx 需要满足下山条件以保证收敛。
        • 引入下山因子 λ~\tilde\lambda,迭代公式改为 xn+1=xnλ~f(xn)f(xn)x_{n + 1} = x_n - \tilde\lambda\dfrac{f(x_n)}{f'(x_n)}
        • 对于某个 λ~\tilde\lambda,如果迭代出的下一个 xx 不满足下山条件,则不断缩小 λ~\tilde\lambda(一般除以 22),直到满足。
        • 每一次迭代, λ~\tilde\lambda 继承上一次的。
        • 通常为 λ~\tilde\lambda 设置一个最小值,如果减小过了最小值,则需要重新选取初值计算。
      • 单点弦截法
        • 基于构造法 2,λ\lambda 的计算中,用割线的斜率代替导数,即 λ=1ΔyΔx=xnx0f(xn)f(x0)\lambda = \dfrac{1}{\frac{\Delta y}{\Delta x}} = \dfrac{x_n - x_0}{f(x_n) - f(x_0)}
        • 迭代过程中,割线只有一个点变化,所以是单点弦截法。
        • 迭代公式为 xn+1=x0f(xn)xnf(x0)f(xn)f(x0)x_{n + 1} = \dfrac{x_0 f(x_n) - x_n f(x_0)}{f(x_n) - f(x_0)}
        • [a,b][a,b] 内的收敛条件:
          • f(x)f(x)[a,b][a,b] 内二阶可导;
          • f(a)f(b)<0f(a)f(b) < 0
          • f(x)0f'(x) \ne 0f(x)f''(x) 不变号;
          • f(x0)f(x0)>0f(x_0)f''(x_0) > 0
          • f(x0)f(x1)f(x_0) \ne f(x_1)
        • 收敛阶为 11
      • 双点弦截法
        • 基于构造法 2 和单点弦截法,割线选取最后两个点的连线,λ=1ΔyΔx=xnxn1f(xn)f(xn1)\lambda = \dfrac{1}{\frac{\Delta y}{\Delta x}} = \dfrac{x_n - x_{n - 1}}{f(x_n) - f(x_{n - 1})}
        • 迭代公式为 xn+1=xn1f(xn)xnf(xn1)f(xn)f(xn1)x_{n + 1} = \dfrac{x_{n - 1} f(x_n) - x_n f(x_{n - 1})}{f(x_n) - f(x_{n - 1})}
        • [a,b][a,b] 内的收敛条件:
          • f(x)f(x)[a,b][a,b] 内二阶可导;
          • f(a)f(b)<0f(a)f(b) < 0
          • f(x)0f'(x) \ne 0
        • 收敛阶为 1+52\dfrac{1 + \sqrt 5}{2}