数值分析

"课程架构"

"Basic Knowledge"

  • Chapter 1
    • Mean value theorem
    • Taylor expansion
    • Roundoff error

"Solution of Equations"

  • Chapter 2
    • Solution of equations with one variable
  • Chapter 6
    • Direct Matrix Solver
  • Chapter 7
    • Iterative Matrix Solver
  • Chapter 5
    • Initial value problem
      • Euler, Runge-kutta, multi-step

Convergence + Stability

"Interpolation and approximation"

  • Chapter 3: interpolation

    • Lagrange polynomial
    • Piecewise polynomial
  • Chapter 4

    • Numerical differentiation
    • Numerical integration
  • Chapter 8: approximation

    • Orthogonal polynomials
    • Least squares
    • Chebyshev polynomial

Error

Chapter 1 数学基础 | Mathematical Preliminaries

"本讲概述"

本讲主要介绍数值计算中的误差类型和误差分析,以及IEEE 754浮点数表示。

1.2 舍入误差和计算机算术 | Roundoff Errors and Computer Arithmetic

1.2.1 截断误差和舍入误差 | Truncation Error and Roundoff Error

1.2.2 截断法和舍入法 | Chopping and Rounding

使用舍入法或截断法产生的误差都叫做舍入误差

"函数表示"

Given a real number y=0.d1d2d3dkdk+1×10ny = 0.d_1d_2d_3\ldots d_kd_{k+1}\ldots \times 10^n(which is called Normalized decimal floating-point form of a real number)

fl(y)={0.d1d2d3dk×10n/* chopping */chop(y+5×10n(k+1))/* rounding */fl(y) = \begin{cases} 0.d_1d_2d_3\ldots d_k \times 10^n& \text{/* chopping */} \\ chop(y + 5 \times 10^{n-(k+1)}) & \text{/* rounding */} \end{cases}

1.2.3 绝对误差与相对误差 | Absolute error and relative error

Denote pp^* as the approximation of pp.

"近似产生的误差"

chopping:

yfl(y)y=0.dk+1dk+2×10nk0.d1d2d3dk×10n=0.dk+1dk+20.d1d2d3dk×10k<10.1×10k=10k+1\frac{|y - fl(y)|}{|y|} = \frac{0.d_{k+1}d_{k+2}\ldots \times 10^{n-k}}{0.d_1d_2d_3\ldots d_k \times 10^n} = \frac{0.d_{k+1}d_{k+2}\ldots}{0.d_1d_2d_3\ldots d_k} \times 10^{-k} < \frac{1}{0.1} \times 10^{-k} = 10^{-k+1}

Rounding:

yfl(y)y0.5×10nk0.d1d2d3dk×10n=0.50.1×10k=0.5×10k+1\frac{|y - fl(y)|}{|y|} \leq \frac{0.5 \times 10^{n-k}}{0.d_1d_2d_3\ldots d_k \times 10^n} = \frac{0.5}{0.1} \times 10^{-k} = 0.5 \times 10^{-k+1}

"误差产生"

  • 两个近乎相等的数相减二导致有效数字的相消,例如:a=0.123456789,b=0.123456788a=0.123456789, b=0.123456788,两者本来有9位有效数字,但是相减后只剩下1位有效数字。
  • 如果有限位的表示或计算产生了误差,则除以一个小数(或者乘以一个大数)会放大绝对误差。

误差计算举例:

Evaluate f(x)=x36.1x2+3.2x+1.5f(x) = x^3 - 6.1x^2 + 3.2x + 1.5 at x=4.71x = 4.71 using 3-digit arithmetic(3位有效数字).

xx x2x^2 x3x^3 6.1x26.1x^2 3.2x3.2x
exact 4.714.71 22.184122.1841 104.487111104.487111 135.32301135.32301 15.07215.072
Chopping 4.714.71 22.122.1 104.104. 6.122.1=134.81134.6.1*22.1=134.81\approx134. 15.015.0
Rounding 4.714.71 22.222.2 105.105. 6.122.2=135.42135.6.1*22.2=135.42\approx135. 15.115.1

Exact value: f(4.71)=104.487111135.32301+15.072+1.5=14.263899f(4.71) = 104.487111 - 135.32301 + 15.072 + 1.5 = -14.263899

Chopping: f(4.71)=104134+15.0+1.5=13.5f(4.71) = 104 - 134 + 15.0 + 1.5 = -13.5

Rounding: f(4.71)=105135+15.1+1.5=13.4f(4.71) = 105 - 135 + 15.1 + 1.5 = -13.4

可见,有时候舍入误差比截断误差更大。

但现在的误差还是太大了!介绍——秦九韶算法

乘法较多会导致式子的误差较大,此时可以使用秦九韶算法(其实就是不断提取xx)来减少乘法的次数。

把一个多项式f(x)=anxn+an1xn1++a1x+a0f(x) = a_nx^n + a_{n-1}x^{n-1} + \ldots + a_1x + a_0写成如下形式:

f(x)=(((anx+an1)x+an2)x+)x+a1)x+a0f(x) = ((\ldots(a_nx + a_{n-1})x + a_{n-2})x + \ldots)x + a_1)x + a_0

然后从最内层开始计算。

将上例改写成秦九韶算法:

f(x)=((x6.1)x+3.2)x+1.5f(x) = ((x-6.1)x + 3.2)x + 1.5

Chopping:

((4.716.1)4.71+3.2)4.71+1.5=(1.394.71+3.2)4.71+1.5=(6.54+3.2)4.71+1.5=3.344.71+1.5=15.7+1.5=14.2\begin{aligned} &((4.71-6.1)4.71 + 3.2)4.71 + 1.5 \\ =& (-1.39*4.71 + 3.2)4.71 + 1.5 \\ =& (-6.54 + 3.2)4.71 + 1.5 \\ =& -3.34*4.71 + 1.5 \\ =& -15.7 + 1.5 \\ =& -14.2 \end{aligned}

Relative error: 14.263899+14.214.2638990.44%\frac{|-14.263899 + 14.2|}{|-14.263899|} \approx 0.44\%

Rounding:

((4.716.1)4.71+3.2)4.71+1.5=(1.394.71+3.2)4.71+1.5=(6.55+3.2)4.71+1.5=3.354.71+1.5=15.8+1.5=14.3\begin{align*} &((4.71-6.1)4.71 + 3.2)4.71 + 1.5 \\ =& (-1.39*4.71 + 3.2)4.71 + 1.5 \\ =& (-6.55 + 3.2)4.71 + 1.5 \\ =& -3.35*4.71 + 1.5 \\ =& -15.8 + 1.5 \\ =& -14.3 \end{align*}

Relative error: 14.263899+14.314.2638990.25%\frac{|-14.263899 + 14.3|}{|-14.263899|} \approx 0.25\%

可见,此时误差明显减小了。

1.3 算法和收敛性 | Algorithms and Convergence

稳定性 | Stability

一个算法,如果初始数据的小变化会导致最终结果的小变化,则称为稳定(stable);否则称为不稳定(unstable)。

一个算法,如果只有在某些初始数据的选择下才是稳定的,则称为条件稳定(conditionally stable)。

误差增长 | The growth of errors

假设E0>0E_0 > 0是初始误差(initial error),EnE_n是第nn步的误差。

线性增长的误差通常是无法避免的,当CCE0E_0都很小的时候,结果通常是可以接受的。

指数增长的误差应该避免,因为即使E0E_0很小,CnC^n也会变得很大。这会导致不可接受的不准确性。

收敛速度 | Convergence rate

使用OO符号来表示收敛速度。

假设limh0F(h)=L\lim_{h\to 0} F(h) = Llimh0G(h)=0\lim_{h\to 0} G(h) = 0。如果存在正常数KK使得

F(h)LKG(h)|F(h)-L| \leq K|G(h)|

对于足够小的hh成立,则记为F(h)=L+O(G(h))F(h)=L+O(G(h))

我们通常取G(h)=hp,(p>0)G(h)=h^p,(p>0),并对最大的pp值感兴趣。

"求当h0h\to 0时下列函数的收敛速度"

F(h)=sinhhF(h) = \frac{\sin h}{h}, limh0sinhh=1\lim_{h\to 0}\frac{\sin h}{h} = 1

解: F(h)L=sinhh1=sinhhhhh36+o(h3)hhh26Kh2F(h)-L=\frac{\sin h}{h}-1 = \frac{\sin h-h}{h} \sim \frac{h-\frac{h^3}{6}+o(h^3)-h}{h} \sim-\frac{h^2}{6}\leq K|h^2|

所以收敛速度为O(h2)O(h^2)

1.4 IEEE 754 FLOATING POINT REPRESENTATION

二进制的科学计数法:x=±1.d1d2d3dk×2nx = \pm 1.d_1d_2d_3\ldots d_k \times 2^n,这里的did_i是二进制的数字,1.d1d2d3dk1.d_1d_2d_3\ldots d_k为有效位数(Significand)。

在计算机里有两种表示方法,分别是Single(32位)和double(64位)。均为下图的形式。

二进制

x=(1)S×(1+Fraction)×2ExponentBiasx = (-1)^S \times (1+Fraction) \times 2^{Exponent-Bias}

  • SS代表符号位(sign bit)。SS00表示非负数,SS11表示负数。
  • 有效位数(Significand=1+FractionSignificand = 1 + Fraction) 中11是默认的,我们只存储小数点后面的位数(即Fraction)。
  • FractionFraction 代表尾数部分(也称作mantissa)。
    • Single: 2323 bitsbits
    • Double: 5252 bitsbits
  • ExponentExponent 表示指数部分(也称作characteristic)。
    • Single: 88 bitsbits
    • Double: 1111 bitsbits
    • excess representation(偏移表示法) == actual exponent - bias,其中:
      • Single: bias=127bias = 127 bitsbits
      • Double: bias=1023bias = 1023 bitsbits
    • 指数为全 00 和全 11 时用作特殊值处理

"Single & Double的值域"

"Single的值域"

  • 最小值:

  • Exponent = 00000001, Fraction = 000...000

  • x=±(1+0.0)×21127=±1.0×2126±1.2×1038x = \pm (1+0.0) \times 2^{1-127} = \pm 1.0 \times 2^{-126} \approx \pm 1.2 \times 10^{-38}

  • 最大值:

  • Exponent = 11111110, Fraction = 111...111

  • x=±(1+0.111111)×2254127±2.0×2127±3.4×1038x = \pm (1+0.111\ldots 111) \times 2^{254-127} \approx \pm 2.0 \times 2^{127} \approx \pm 3.4 \times 10^{38}

"Double的值域"

  • 最小值:

  • Exponent = 00000000001, Fraction = 000...000

  • x=±(1+0.0)×211023=±1.0×21022±2.2×10308x = \pm (1+0.0) \times 2^{1-1023} = \pm 1.0 \times 2^{-1022} \approx \pm 2.2 \times 10^{-308}

  • 最大值:

  • Exponent = 11111111110, Fraction = 111...111

  • x=±(1+0.111111)×220461023±2.0×21023±1.8×10308x = \pm (1+0.111\ldots 111) \times 2^{2046-1023} \approx \pm 2.0 \times 2^{1023} \approx \pm 1.8 \times 10^{308}

"Single & Double的十进制精度"

"Single的十进制精度"

  • 最小分度: 2232^{-23}
  • log102236.92\log_{10}{2^{-23}}\approx -6.92
  • 所以约为小数点后六位有效数字

"Double的值域"

  • 最小分度: 2522^{-52}
  • log1025215.65\log_{10}{2^{-52}}\approx -15.65
  • 所以约为小数点后十六位有效数字

"十进制->IEEE754 浮点数"

"Represent 0.75–0.75"

  1. Convert to binary: 0.75=0.110.75 = 0.11
  2. Normalize: 0.11=1.1×210.11 = 1.1 × 2^{–1}
  3. Sign bit: S=1S = 1
  4. Exponent:
    • Single: 1+127=126=01111110–1 + 127 = 126 = 01111110
    • Double: 1+1023=1022=01111111110–1 + 1023 = 1022 = 01111111110
  5. Fraction:
    • Single: 0.1=100000.1 = 100\cdots 00,共23位
    • Double: 0.1=100000000.1 = 100\cdots 00000,共52位
      \therefore IEEE 754 Representation:
    • Single: 1 01111110 100001\ 01111110\ 100\cdots 00
    • Double: 1 01111111110 100000001\ 01111111110\ 100\cdots 00000

"IEEE754 浮点数->十进制"

"What number is represented by the single-precision float 11000000101000…00"

  1. Sign bit: S=1S = 1
  2. Exponent: E=10000001=129E = 10000001 = 129
  3. Actual exponent: E127=2E - 127 = 2
  4. Fraction: 010000001000\cdots 00
  5. Significand: 1.0100000=1.251.01000\cdots 00 = 1.25
  6. \therefore Number: 1.25×22=5.0–1.25 × 2^2 = –5.0

Chapter 2 一元方程的求解 | Solutions of Equations in One Variable

2.0 停机程序 | Stopping procedure

我们可以选择一个精度要求ϵ\epsilon,逐步迭代,直到满足下列条件之一:

  1. xi+1xi<ϵ|x_{i+1} - x_i| < \epsilon
  2. f(xi+1)<ϵ|f(x_{i+1})| < \epsilon
  3. xi+1xixi+1<ϵ\frac{|x_{i+1} - x_i|}{|x_{i+1}|} < \epsilon

如果xi+1xi|x_{i+1} - x_i|收敛于0而序列本身发散 ,1号会失效。

也有可能f(x)f(x)与0很接近,但是xnx_nxx差别很大,2号也不行了。

3号条件是能运用的最好的停机准则,因为它最接近测试相对误差。

2.1 二分法 | Bisection Method

Bisection Method

"为什么要用a+(b-a)/2,而不用(b+a)/2?"

  1. 因为a和b可能是很大的数,相加可能会溢出。
  2. 因为a和b可能是很小的数,相加可能会产生舍入误差。用此方法可以确保a+(b-a)/2落在a和b之间。
    1. 例如,用截断保留2位有效数字,a=0.91,b=0.93,(a+b)/2=1.8/2=0.9,而a+(b-a)/2=0.91+(0.93-0.91)/2=0.92。

2.2 不动点迭代 | Fixed-Point Iteration

Fixed-Point Iteration

不动点的存在性和唯一性的充分条件:

a. gC[a,b]g\in C[a,b]g(x)[a,b],x[a,b]g(x)\in [a,b], \forall x\in [a,b],则gg[a,b][a,b]上有不动点。

b. g(x)k<1,x(a,b)|g'(x)|\leq k < 1, \forall x\in (a,b),则该不动点是唯一的。

则对于任意p0[a,b]p_0\in [a,b],不动点迭代序列pn+1=g(xn)p_{n+1}=g(x_n)收敛于不动点。

且我们有误差限pnpkn1kp1p0|p_n-p| \leq \frac{k^n}{1-k}|p_1-p_0|,这将收敛速率和一阶导数的界联系起来。

"误差界分析"

pn+1pn=g(pn)g(pn1)=g(ξ)pnpn1kpnpn1k2pn1pn2knp1p0\begin{align*} |p_{n+1}-p_n| &= |g(p_n)-g(p_{n-1})| = |g'(\xi)||p_n-p_{n-1}| \leq k|p_n-p_{n-1}| \\ &\leq k^2|p_{n-1}-p_{n-2}| \leq \ldots \leq k^n|p_1-p_0| \end{align*}

pnp=pnpn1+pn1pn2++p1p0pnpn1+pn1pn2++p1p0(kn1+kn2++1)p1p0=kn1k1p1p0kn1kp1p0\begin{align*} |p_{n}-p| &= |p_{n}-p_{n-1}+p_{n-1}-p_{n-2}+\ldots+p_1-p_0| \\ &\leq |p_{n}-p_{n-1}|+|p_{n-1}-p_{n-2}|+\ldots+|p_1-p_0| \\ &\leq (k^{n-1}+k^{n-2}+\ldots+1)|p_1-p_0| \\ &= \frac{k^n-1}{k-1}|p_1-p_0| \leq \frac{k^n}{1-k}|p_1-p_0| \end{align*}

2.3 牛顿迭代法 | Newton's Method

就是用切线逼近零点,然后求切线与x轴的交点,作为下一个点,如此往复。

xn+1=xnf(xn)f(xn)x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}

Newton

"定理:设fC2[a,b]f\in C^2[a,b],如果p[a,b]p\in [a,b]满足f(p)=0f(p)=0f(p)0f'(p)\neq 0,则存在δ>0\delta>0,使得对任何初始值p0(pδ,p+δ)p_0\in (p-\delta, p+\delta),牛顿迭代法产生收敛于pp的序列{pn}n=1\{p_n\}_{n=1}^\infty。"

证明:

Alt text

牛顿迭代法的收敛性取决于初始近似值的选择。

2.4 迭代法的误差分析 | Error Analysis for Iterative Methods

假设{pn}n=0\{p_n\}_{n=0}^\infty收敛于pp,其中对pnp\forall p_n \neq p。如果存在正数λ\lambdaα\alpha,使得

limnpn+1ppnpα=λ\lim_{n\to\infty}\frac{|p_{n+1}-p|}{|p_n-p|^\alpha} = \lambda

则称{pn}n=0\{p_n\}_{n=0}^\inftyα\alpha阶收敛的(converges to p of order α),λ\lambda称为渐进误差常数(asymptotic error constant)。

一般具有高阶收敛性的序列收敛速度更快。

不动点法

不动点法的收敛阶和渐进误差常数:

pn+1p=g(pn)g(p)=g(ξ)(pnp)pn+1ppnp=g(ξ)limnpn+1ppnp=limng(ξ)=g(p)\begin{aligned} p_{n+1}-p = g(p_n)-g(p) = g'(\xi)(p_n-p) &\Rightarrow \frac{|p_{n+1}-p|}{|p_n-p|} = |g'(\xi)|\\ &\Rightarrow \lim_{n\to\infty}\frac{|p_{n+1}-p|}{|p_n-p|} = \lim_{n\to\infty}|g'(\xi)| = |g'(p)| \end{aligned}

因此,如果g(p)0g'(p)\neq 0,则不动点迭代法是线性收敛的,且渐进误差常数为g(p)|g'(p)|

牛顿迭代法

牛顿迭代法的收敛阶和渐进误差常数:

由泰勒展开:

0=f(p)=f(pn)+f(pn)(ppn)+f(ξ)2(ppn)2p=pnf(pn)f(pn)f(ξ)2f(pn)(ppn)2limnpn+1ppnp2=limnf(ξ)2f(pn)=f(p)2f(p)\begin{aligned} 0 &= f(p) = f(p_n) + f'(p_n)(p-p_n) + \frac{f''(\xi)}{2}(p-p_n)^2\\ &\Rightarrow p = p_n-\frac{f(p_n)}{f'(p_n)} - \frac{f''(\xi)}{2f'(p_n)}(p-p_n)^2\\ &\Rightarrow \lim_{n\to\infty}\frac{|p_{n+1}-p|}{|p_n-p|^2} = \lim_{n\to\infty}\frac{|f''(\xi)|}{2|f'(p_n)|} = \frac{|f''(p)|}{2|f'(p)|} \end{aligned}

因此,牛顿迭代法是二次收敛的,且渐进误差常数为f(p)2f(p)\frac{|f''(p)|}{2|f'(p)|}

不动点法的多重根情况

如果ppg(x)g(x)的不动点,存在正整数mm,使得g(p)=g(p)==g(m1)(p)=0g'(p)=g''(p)=\ldots=g^{(m-1)}(p)=0,且g(m)(p)0g^{(m)}(p)\neq 0,则称pn=g(pn1)p_n = g(p_{n-1})以阶mm收敛于pp,渐进误差常数为g(m)(p)m!\frac{|g^{(m)}(p)|}{m!}

pn+1=g(pn)=g(p)+g(p)(pnp)+g(ξ)2(pnp)2++g(m)(ξ)m!(pnp)mlimnpn+1ppnpm=limng(m)(ξ)m!=g(m)(p)m!\begin{aligned} p_{n+1} &= g(p_n) = g(p) + g'(p)(p_n-p) + \frac{g''(\xi)}{2}(p_n-p)^2 + \ldots + \frac{g^{(m)}(\xi)}{m!}(p_n-p)^m\\ &\Rightarrow \lim_{n\to\infty}\frac{|p_{n+1}-p|}{|p_n-p|^m} = \lim_{n\to\infty}\frac{|g^{(m)}(\xi)|}{m!} = \frac{|g^{(m)}(p)|}{m!} \end{aligned}

牛顿法的多重根情况

如果ppffmm重零点,则有f(x)=(xp)mq(x)f(x)=(x-p)^mq(x),记g(x)=xf(x)f(x)g(x)=x-\frac{f(x)}{f'(x)},牛顿法即为 pn=g(pn1)p_n=g(p_{n-1})

g(x)=1f(x)2f(x)f(x)(f(x))2=f(x)f(x)(f(x))2=(xp)mq(x)(m(m1)(xp)m2q(x)+2m(xp)m1q(x)+q(x)(xp)m)(m(xp)m1q(x)+q(x)(xp)m)2=(xp)2m2q(x)(m(m1)q(x)+2m(xp)q(x)+q(x)(xp)2)(xp)2m2(mq(x)+q(x)(xp))2=q(x)(m(m1)q(x)+2m(xp)q(x)+q(x)(xp)2)(mq(x)+q(x)(xp))2\begin{align*} g'(x) &= 1-\frac{f'(x)^2-f(x)f''(x)}{(f'(x))^2} \\ &= \frac{f(x)f''(x)}{(f'(x))^2} \\ &= \frac{(x-p)^mq(x)(m(m-1)(x-p)^{m-2}q(x)+2m(x-p)^{m-1}q'(x)+q''(x)(x-p)^m)}{(m(x-p)^{m-1}q(x)+q'(x)(x-p)^m)^2} \\ &= \frac{(x-p)^{2m-2}q(x)(m(m-1)q(x)+2m(x-p)q'(x)+q''(x)(x-p)^2)}{(x-p)^{2m-2}(mq(x)+q'(x)(x-p))^2} \\ &= \frac{q(x)(m(m-1)q(x)+2m(x-p)q'(x)+q''(x)(x-p)^2)}{(mq(x)+q'(x)(x-p))^2} \end{align*}

所以

g(p)=q(p)m(m1)q(p)(mq(p))2=11m<1g'(p)=\frac{q(p)m(m-1)q(p)}{(mq(p))^2}=1-\frac{1}{m}<1

由不动点法的迭代情况可知,此时为线性收敛,不为二次收敛。

牛顿法多重根下的优化

定义

μ(x)=f(x)f(x)\mu(x)=\frac{f(x)}{f'(x)}

如果ppffmm重零点,f(x)=(xp)mq(x)f(x)=(x-p)^mq(x),则

μ(x)=(xp)mq(x)m(xp)m1q(x)+q(x)(xp)m=(xp)q(x)mq(x)+q(x)(xp)\mu(x)=\frac{(x-p)^mq(x)}{m(x-p)^{m-1}q(x)+q'(x)(x-p)^m}=\frac{(x-p)q(x)}{mq(x)+q'(x)(x-p)}

q(p)0q(p)\neq 0,且

q(p)mq(p)+q(p)(pp)=1m0\frac{q(p)}{mq(p)+q'(p)(p-p)}=\frac{1}{m}\neq 0

所以ppμ(x)\mu(x)的单根,那么我们对μ\mu应用牛顿迭代法,就有

pn+1=g(pn)=pnμ(pn)μ(pn)=pnf(pn)f(pn)f(pn)f(pn)f(pn)f(pn)(f(pn))2=pnf(pn)f(pn)f(pn)2f(pn)f(pn)\begin{align*} p_{n+1}=g(p_n) &= p_n-\frac{\mu(p_n)}{\mu'(p_n)} \\ &= p_n-\frac{\frac{f(p_n)}{f'(p_n)}}{\frac{f'(p_n)f'(p_n)-f(p_n)f''(p_n)}{(f'(p_n))^2}} \\ &= p_n-\frac{f(p_n)f'(p_n)}{f'(p_n)^2-f(p_n)f''(p_n)} \\ \end{align*}

这就是让有多重根的牛顿法二次收敛的方法。

  1. 要求二阶导
  2. 分母由两个接近于0的数相减,会引起严重的舍入误差。

2.5 加速收敛 | Accelerating Convergence

二次收敛是很少可以得到的,我们在日常中总会碰到线性收敛。为了考虑如何加速线性收敛序列的收敛速度,下面介绍——AITKENΔ2\Delta^2方法

AITKENΔ2\Delta^2方法

"Δ\Delta"

对于给定的序列,向前差分(forward difference)定义为Δpn=pn+1pn\Delta p_n = p_{n+1}-p_n,对于更高的幂,我们有Δkpn=Δ(Δk1pn)\Delta^k p_n = \Delta(\Delta^{k-1}p_n),比如Δ2pn=Δ(Δpn)=Δ(pn+1pn)=(pn+2pn+1)(pn+1pn)\Delta^2 p_n = \Delta(\Delta p_n)= \Delta(p_{n+1}-p_n) = (p_{n+2}-p_{n+1}) -(p_{n+1}-p_n)

假设{pn}n=0\{p_n\}_{n=0}^\infty是线性收敛的,其极限为pp

为了便于构造比{pn}n=0\{p_n\}_{n=0}^\infty收敛更快的序列{p^n}n=0\{\hat{p}_n\}_{n=0}^\infty,我们假设pnp,pn+1p,pn+2pp_n-p, p_{n+1}-p, p_{n+2}-p的符号一致,又假设nn足够大,有

pn+1ppnppn+2ppn+1p\frac{p_{n+1}-p}{p_n-p} \approx \frac{p_{n+2}-p}{p_{n+1}-p}

从而

pn+122pn+1p+p2pn+2pn(pn+pn+2)p+p2p_{n+1}^2-2p_{n+1}p+p^2 \approx p_{n+2}p_n-(p_n+p_{n+2})p+p^2

解出pp,得到

ppn+2pnpn+12pn+22pn+1+pnpn(pn+1pn)2pn+22pn+1+pnp \approx \frac{p_{n+2}p_{n}-p_{n+1}^2}{p_{n+2}-2p_{n+1}+p_n} \approx p_n - \frac{(p_{n+1}-p_n)^2}{p_{n+2}-2p_{n+1}+p_n}

于是,我们可以构造序列{p^n}n=0\{\hat{p}_n\}_{n=0}^\infty,其中

p^n=pn(pn+1pn)2pn+22pn+1+pn=pn(Δpn)2Δ2pn\hat{p}_n = p_n - \frac{(p_{n+1}-p_n)^2}{p_{n+2}-2p_{n+1}+p_n}=p_n -\frac{(\Delta p_n)^2}{\Delta^2 p_n}

这样定义序列的方法就是AITKENΔ2\Delta^2

"为什么说更快?"

可以证明

limnpn^ppnp=0\lim_{n\rightarrow \infty} \frac{\hat{p_n}-p}{p_n-p} = 0

"怎么迭代?"

其实还是用序列本身的迭代法,不过在计算值的时候采取了AITKENΔ2\Delta^2法。

构造按如下顺序:

p0,p1=g(p0),p2=g(p1)p0^={Δ2}(p0)p3=g(p2)p1^={Δ2}(p1)p_0, p_1 = g(p_0), p_2 = g(p_1) \\ \hat{p_0} = \{\Delta^2\}(p_0)\\ p_3 = g(p_2) \\ \hat{p_1} = \{\Delta^2\}(p_1)\\ \vdots

Steffensen 方法

这个方法假设p0^\hat{p_0}p2p_2更好地逼近pp,从而把上述过程第三行的不动点迭代应用到p0^\hat{p_0}

p0(0),p1(0)=g(p0(0)),p2(0)=g(p1(0))p0(1)={Δ2}(p0(0))p1(1)=g(p0(0))p_0^{(0)}, p_1^{(0)} = g(p_0^{(0)}), p_2^{(0)} = g(p_1^{(0)}) \\ p_0^{(1)} = \{\Delta^2\}(p_0^{(0)})\\ p_1^{(1)} = g(p_0^{(0)}) \\ \vdots

算法如下:

Steffensen

注意Δ2pn\Delta^2 p_n可能为0,如果发生,则终止并选取p2(n1)p_2^{(n-1)}为近似解。

我们一般要求g(p)0g'(p)\neq 0,则在邻域内Steffensen法是二次收敛的

Chapter 3 插值和多项式逼近 | Interpolation and Polynomial Approximation

3.1 插值和 Lagrange 多项式 | Interpolation and Lagrange Polynomials

构造 Lagrange 多项式

拉格朗日插值就是构造一个次数至多为 nn 次的多项式使它通过 n+1n+1 个给定的点,这个多项式就是拉格朗日多项式。

" n=1n = 1 "

构造P(x)=a0+a1xP(x)=a_0+a_1x,使得P(x0)=y0P(x_0)=y_0P(x1)=y1P(x_1)=y_1

P(x)=y0+y1y0x1x0(xx0)=xx1x0x1y0+xx0x1x0y1P(x)=y_0+\frac{y_1-y_0}{x_1-x_0}(x-x_0)=\frac{x-x_1}{x_0-x_1}y_0+\frac{x-x_0}{x_1-x_0}y_1

其中xx1x0x1\frac{x-x_1}{x_0-x_1}xx0x1x0\frac{x-x_0}{x_1-x_0}分别记作L1,0(x)L_{1,0}(x)L1,1(x)L_{1,1}(x)(第一个下标即为nn的值,第二个下标为样本点的序号),这称为拉格朗日基函数(Lagrange Basis)。

可以知道,拉格朗日基函数总是满足Kronecker Delta函数δij\delta_{ij}

δij={1,i=j0,ij\delta_{ij} = \begin{cases} 1, & i = j \\ 0, & i \neq j \end{cases}

推广到nn次插值,构造P(x)=a0+a1x++anxnP(x)=a_0+a_1x+\cdots+a_nx^n,使得P(xi)=yiP(x_i)=y_ii=0,1,,ni=0,1,\cdots,n。就是要找到 Ln,i(x)L_{n,i}(x) 使得 Ln,i(xj)=δijL_{n,i}(x_j) = \delta_{ij}

分析可知,这里的Ln,i(x)L_{n,i}(x)nn 个根,分别为x0,x1,,xi1,xi+1,,xnx_0,x_1,\cdots,x_{i-1},x_{i+1},\cdots,x_n。所以可以构造出

Ln,i(x)=C(xx0)(xx1)(xxi1)(xxi+1)(xxn)L_{n,i}(x)=C(x-x_0)(x-x_1)\cdots(x-x_{i-1})(x-x_{i+1})\cdots(x-x_n)

又因为Ln,i(xi)=1L_{n,i}(x_i)=1,所以

Ln,i(x)=(xx0)(xx1)(xxi1)(xxi+1)(xxn)(xix0)(xix1)(xixi1)(xixi+1)(xixn)L_{n,i}(x)=\frac{(x-x_0)(x-x_1)\cdots(x-x_{i-1})(x-x_{i+1})\cdots(x-x_n)}{(x_i-x_0)(x_i-x_1)\cdots(x_i-x_{i-1})(x_i-x_{i+1})\cdots(x_i-x_n)}

Ln,i(x)=j=0,jinxxjxixjL_{n,i}(x)=\prod\limits_{j=0,j\neq i}^n\frac{x-x_j}{x_i-x_j}

于是我们根据拉格朗日基函数构造出了 nn 次拉格朗日插值多项式

Pn(x)=i=0nLn,i(x)yiP_n(x)=\sum\limits_{i=0}^nL_{n,i}(x)y_i

Lagrange 多项式的唯一性

nn 个不同的点 , nn 次拉格朗日插值多项式是唯一的

证明:

如果不唯一,假设存在另一个多项式Qn(x)Q_n(x),使得Qn(xi)=yiQ_n(x_i)=y_ii=0,1,,ni=0,1,\cdots,n,且Qn(x)Pn(x)Q_n(x)\neq P_n(x)

Rn(x)=Pn(x)Qn(x)R_n(x)=P_n(x)-Q_n(x)是一个次数不超过nn的多项式,且Rn(xi)=0R_n(x_i)=0i=0,1,,ni=0,1,\cdots,n

由于Rn(x)R_n(x)的次数不超过nnnn次多项式不可能有 n+1n+1 个解,所以Rn(x)=0R_n(x)=0,即Pn(x)=Qn(x)P_n(x)=Q_n(x),与假设矛盾。

如果 对 nn 个点 运用 超过nn 次的拉格朗日插值多项式,那么得到的多项式就不唯一了。

例如 P(x)=Ln(x)+p(x)i=0n(xxi)P(x)=L_n\left(x\right)+p(x)\prod\limits_{i=0}^n\left(x-x_i\right)

拉格朗日逼近的余项

假定ax0<x1<<xnba\leq x_0<x_1<\cdots<x_n\leq bfC[a,b]f\in C[a,b]Pn(x)P_n(x)f(x)f(x)x0,x1,,xnx_0,x_1,\cdots,x_n上的拉格朗日插值多项式,则对任意x[a,b]x\in[a,b],存在ξ(x)(a,b)\xi(x)\in(a,b),使得

f(x)Pn(x)=f(n+1)(ξ(x))(n+1)!i=0n(xxi)f(x)-P_n(x)=\frac{f^{(n+1)}(\xi(x))}{(n+1)!}\prod\limits_{i=0}^n(x-x_i)

"证明"

Rn(x)=f(x)Pn(x)R_n(x)=f(x)-P_n(x),则Rn(x)R_n(x)是一个次数不超过nn的多项式,且Rn(xi)=0R_n(x_i)=0i=0,1,,ni=0,1,\cdots,n。所以Rn(x)R_n(x)可记作C(x)i=0n(xxi)C(x)\prod\limits_{i=0}^n(x-x_i)

固定一个点xx (xxix\neq x_i) 时,记g(t)=Rn(t)C(x)i=0n(txi)g(t)=R_n(t)-C(x)\prod\limits_{i=0}^n(t-x_i),则g(x)=0g(x)=0g(xi)=0g(x_i)=0i=0,1,,ni=0,1,\cdots,n,所以g(t)g(t)存在n+2n+2个不同的零点

根据推广的Rolle定理,存在ξ(x)(a,b)\xi(x)\in(a,b),使得g(n+1)(ξ(x))=0g^{(n+1)}(\xi(x))=0,即

0=g(n+1)(ξ(x))=(Rn(ξ(x))C(x)i=0n(ξ(x)xi))(n+1)=(f(ξ(x))Pn(ξ(x))C(x)i=0n(txi))(n+1)=f(n+1)(ξ(x))C(x)(n+1)!//因为Pn(x)n次多项式,所以Pn(n+1)(x)=0\begin{aligned} 0=g^{(n+1)}(\xi(x))&=(R_n(\xi(x))-C(x)\prod\limits_{i=0}^n(\xi(x)-x_i))^{(n+1)}\\&=(f(\xi(x))-P_n(\xi(x))-C(x)\prod\limits_{i=0}^n(t-x_i))^{(n+1)}\\ &=f^{(n+1)}(\xi(x))-C(x)(n+1)! \quad //因为P_n(x)是n次多项式,所以P_n^{(n+1)}(x)=0\\ \end{aligned}

所以C(x)=f(n+1)(ξ(x))(n+1)!C(x)=\frac{f^{(n+1)}(\xi(x))}{(n+1)!},所以Rn(x)=f(n+1)(ξ(x))(n+1)!i=0n(xxi)R_n(x)=\frac{f^{(n+1)}(\xi(x))}{(n+1)!}\prod\limits_{i=0}^n(x-x_i)

因为这里的f(n+1)(ξ(x))f^{(n+1)}(\xi(x))是不知道的,所以我们经常用f(n+1)(x)f^{(n+1)}(x)的上界来估计余项。

分析余项可知,对于小于等于 nn 次的多项式 ff ,经过nn次拉格朗日插值得到的余项为0,得到的多项式就是 ff 本身

这里限制了ff为多项式

例子 1

假设为 x[0,1]x\in [0,1] 的函数 f(x)=exf(x)=e^x 做一个表格。设表中每一项精确的位数是 d8d\geq 8,相邻 xx 值之差即步长为 hh。为使线性插值(即一次Lagrange插值)的误差不超过 10610^{-6}hh应该是多少?

解:

假设 [0,1][0, 1] 被分成 nn 个等距的子区间 [x0,x1],[x1,x2],,[xn1,xn][x_0, x_1], [x_1, x_2], \cdots, [x_{n-1} , x_n]xx 在区间 [xk,xk+1][x_k, x_{k+1}] 中。则误差估计为

f(x)P1(x)=f(ξ(x))2!(xxk)(xxk+1)eξ2(xkh)(x(k+1)h)e2h24106\begin{aligned} |f(x)-P_1(x)| &= |\frac{f''(\xi(x))}{2!}(x-x_k)(x-x_{k+1})| \\ &\leq |\frac{e^\xi}{2}(x-kh)(x-(k+1)h)| \\ &\leq \frac{e}{2}\cdot \frac{h^2}{4} \\ &\leq 10^{-6} \end{aligned}

所以 h1.72×103h\leq 1.72\times 10^{-3}。我们不妨取 h=103h=10^{-3},则 n=1000n=1000

例子 2

Alt text

给三个点,我们有两种方法来线性插值。往往,内插(Intrapolation) 会比 外插(Extrapolation) 更加准确。

Alt text

高次的拉格朗日插值一般会比低次的插值更加准确,但是这不一定总成立。

Neville 迭代插值法

记号说明:ffx0,x1,,xnx_0,x_1,\cdots,x_n 上有定义,m1,m2,,mkm_1,m_2,\cdots,m_kkk 个不同的整数,0min0\leq m_i\leq ni=1,2,,ki=1,2,\cdots,k。记在这 kk 个点上与 f(x)f(x) 相同的拉格朗日多项式为 Pm1,m2,,mk(x)P_{m_1,m_2,\cdots,m_k}(x)

定理:ffx0,x1,,xnx_0,x_1,\cdots,x_n 上有定义,让 xix_ixjx_j 是这个集合中的两个不同的数。则

P(x)=(xxj)P0,1,...,j1,j+1,...,k(x)(xxi)P0,1,...,i1,i+1,...,k(x)(xixj)P(x)=\frac{(x-x_j)P_{0,1,...,j-1,j+1,...,k}(x)-(x-x_i)P_{0,1,...,i-1,i+1,...,k}(x)}{(x_i-x_j)}

描述了对 ffx0,x1,,xkx_0,x_1,\cdots,x_kk+1k+1个点 上的 kk 次插值多项式。

"五个点"

Alt text

证明:

对于任意 0rk0\leq r\leq krir\neq irjr\neq j,分子上的两个插值多项式在 xrx_r 处都等于 f(xr)f(x_r),所以 P(xr)=f(xr)P(x_r)=f(x_r)

分子上的第一个多项式在 xix_i 处等于 f(xi)f(x_i),而第二个多项式在 xix_i 处为0,所以 P(xi)=f(xi)P(x_i)=f(x_i)。同理 P(xj)=f(xj)P(x_j)=f(x_j)

所以 P(x)P(x)x0,x1,,xkx_0,x_1,\cdots,x_k 上与 f(x)f(x) 相同,因为 P(x)P(x)kk 次多项式,所以 P(x)=P0,1,,k(x)P(x)=P_{0,1,\cdots,k}(x)

伪代码

Alt text

3.2 Divided Differences | 差商

Newton's Interpolatory Divided-Difference formula | 差商型 Newton 插值多项式

Pn(x)P_n(x) 是函数 ff 在点 x0,x1,,xnx_0, x_1,\cdots,x_n 上的拉格朗日多项式,ff 关于 x0,x1,,xnx_0,x_1,\cdots,x_n 的差商被用于将 Pn(x)P_n(x) 表示为:

Pn(x)=f[x0]+f[x0,x1](xx0)++f[x0,x1,,xn](xx0)(xx1)(xxn1)P_n(x)=f[x_0]+f[x_0,x_1](x-x_0)+\cdots+f[x_0,x_1,\cdots,x_n](x-x_0)(x-x_1)\cdots(x-x_{n-1})

其中 f[x0,x1,,xn]f[x_0,x_1,\cdots,x_n]ff 关于 x0,x1,,xnx_0,x_1,\cdots,x_n 的差商,通过代值可以得到

f[x0]=f(x0),f[x0,x1]=f(x1)f(x2)x1x0,f[x0,x1,x2]=f[x1,x2]f[x0,x1]x2x0,f[x_0]=f(x_0), f[x_0,x_1]=\frac{f(x_1)-f(x_2)}{x_1-x_0}, f[x_0,x_1,x_2]=\frac{f[x_1,x_2]-f[x_0,x_1]}{x_2-x_0}, \cdots

f[x0,x1,,xn]=f[x1,x2,,xn]f[x0,x1,,xn1]xnx0f[x_0,x_1,\cdots,x_n]=\frac{f[x_1,x_2,\cdots,x_n]-f[x_0,x_1,\cdots,x_{n-1}]}{x_n-x_0}

我们记 f[x0],f[x0,x1],,f[x0,x1,,xn]f[x_0], f[x_0,x_1],\cdots,f[x_0,x_1,\cdots,x_n]ff 关于 x0,x1,,xnx_0,x_1,\cdots,x_n00 阶差商,11 阶差商,\cdotsnn 阶差商。

"六个点的三阶差商计算的例子"

Alt text

同时,我们称

Pn(x)=f[x0]+f[x0,x1](xx0)++f[x0,x1,,xn](xx0)(xx1)(xxn1)P_n(x)=f[x_0]+f[x_0,x_1](x-x_0)+\cdots+f[x_0,x_1,\cdots,x_n](x-x_0)(x-x_1)\cdots(x-x_{n-1})

差商型 Newton 插值多项式(Newton's Interpolatory Divided-Difference formula)。

伪代码

Alt text

差商和导数的关系
一阶差分

将中值定理应用到 ff[x0,x1][x_0,x_1] 上,得到

f[x0,x1]=f(x1)f(x0)x1x0=f(ξ)f[x_0,x_1]=\frac{f(x_1)-f(x_0)}{x_1-x_0}=f'(\xi)

nn 阶差分

fCn[a,b]f\in C^n[a,b]x0,x1,,xn[a,b]x_0,x_1,\cdots,x_n\in[a,b],则存在 ξ(a,b)\xi\in(a,b),使得

f[x0,x1,,xn]=f(n)(ξ)n!f[x_0,x_1,\cdots,x_n]=\frac{f^{(n)}(\xi)}{n!}

证明:

g(t)=f(t)Pn(t)g(t)=f(t)-P_n(t),则 g(xi)=0g(x_i)=0i=0,1,,ni=0,1,\cdots,n。所以 g(t)g(t)[x0,xn][x_0,x_n] 上有 n+1n+1 个零点,根据推广的 Rolle 定理,存在 ξ(a,b)\xi\in(a,b),使得 g(n)(ξ)=0g^{(n)}(\xi)=0,即

f(n)(ξ)Pn(n)(ξ)=0f^{(n)}(\xi)-P_n^{(n)}(\xi)=0

所以 Pn(n)(ξ)=f(n)(ξ)P_n^{(n)}(\xi)=f^{(n)}(\xi),因为

Pn(n)(ξ)=n!f[x0,x1,,xn]P_n^{(n)}(\xi)=n!f[x_0,x_1,\cdots,x_n]

所以

f[x0,x1,,xn]=f(n)(ξ)n!f[x_0,x_1,\cdots,x_n]=\frac{f^{(n)}(\xi)}{n!}

"PPT上采用的证明方法"

Alt text

差分记号引入

如果每个点都连续等步长排列,记步长为hh,令xi=x0+ihx_i=x_0+ih,则

引入**向前差分(forward difference)**记号:

Δf(xi)=f(xi+1)f(xi)Δ2f(xi)=Δf(xi+1)Δf(xi)Δ3f(xi)=Δ2f(xi+1)Δ2f(xi)\begin{aligned} \Delta f(x_i)&=f(x_{i+1})-f(x_i)\\ \Delta^2 f(x_i)&=\Delta f(x_{i+1})-\Delta f(x_i)\\ \Delta^3 f(x_i)&=\Delta^2 f(x_{i+1})-\Delta^2 f(x_i)\\ \cdots \end{aligned}

引入**向后差分(backward difference)**记号:

f(xi)=f(xi)f(xi1)2f(xi)=f(xi)f(xi1)3f(xi)=2f(xi)2f(xi1)\begin{aligned} \nabla f(x_i)&=f(x_i)-f(x_{i-1})\\ \nabla^2 f(x_i)&=\nabla f(x_i)-\nabla f(x_{i-1})\\ \nabla^3 f(x_i)&=\nabla^2 f(x_i)-\nabla^2 f(x_{i-1})\\ \cdots \end{aligned}

引入**中心差分(central difference)**记号:

δkfi=δk1fi+12δk1fi12\delta^k f_i = \delta^{k-1}f_{i+\frac{1}{2}}-\delta^{k-1}f_{i-\frac{1}{2}}

其中

fi±12=f(xi±h2)f_{i\pm\frac{1}{2}}=f(x_i\pm\frac{h}{2})

等距下的向前差商公式

在等距情况下,向前差商的公式可表示为:

Pn(xs)=Pn(x0+sh)=f[x0]+f[x0,x1]sh++f[x0,x1,,xn]s(s1)(sn+1)hn=k=0n(sk)k!hkf[x0,x1,,xk]\begin{aligned} P_n(x_s)=P_n(x_0+sh)&=f[x_0]+f[x_0,x_1]sh+\cdots+f[x_0,x_1,\cdots,x_n]s(s-1)\cdots(s-n+1)h^n\\ &=\sum\limits_{k=0}^n\begin{pmatrix}s\\k\end{pmatrix}k!h^kf[x_0,x_1,\cdots,x_k] \end{aligned}

这里的 (sk)\begin{pmatrix}s\\k\end{pmatrix} 是组合数,即 s(s1)(sk+1)k!\frac{s(s-1)\cdots(s-k+1)}{k!}

等距下的向前差分公式

由向前差分的记号可知道

f[x0,x1]=f(x1)f(x0)x1x0=1hΔf(x0)f[x0,x1,x2]=12h[Δf(x1)Δf(x0)h]=12h2Δ2f(x0),\begin{aligned} f[x_{0},x_{1}]& =\frac{f(x_{1})-f(x_{0})}{x_{1}-x_{0}}=\frac{1}{h}\Delta f(x_{0}) \\ f[x_{0},x_{1},x_{2}]& =\frac{1}{2h}\left[\frac{\Delta f(x_{1})-\Delta f(x_{0})}{h}\right]=\frac{1}{2h^{2}}\Delta^{2}f(x_{0}), \end{aligned}

由此可推广得出

f[x0,x1,,xk]=1k!hkΔkf(x0).f[x_{0},x_{1},\ldots,x_{k}]=\frac{1}{k!h^{k}}\Delta^{k}f(x_{0}).

所以

Pn(xs)=k=0n(sk)Δkf(x0)P_n(x_s)=\sum\limits_{k=0}^n\begin{pmatrix}s\\k\end{pmatrix}\Delta^{k}f(x_{0})

此即为向前差分的公式

等距下的向后差商公式

重排插值节点再计算,此时:

Pn(x)=f[xn]+f[xn,xn1](xxn)+f[xn,xn1,xn2](xxn)(xxn1)++f[xn,,x0](xxn)(xxn1)(xx1).\begin{aligned}P_n(x)=&f[x_n]+f[x_n,x_{n-1}](x-x_n)+f[x_n,x_{n-1},x_{n-2}](x-x_n)(x-x_{n-1})\\&+\cdots+f[x_n,\ldots,x_0](x-x_n)(x-x_{n-1})\cdots(x-x_1).\end{aligned}

在等距情况下,记 xs=xn+sh=xi+(s+ni)hx_s=x_n+sh=x_i+(s+n-i)h,有

Pn(xs)=Pn(xn+sh)=f[xn]+shf[xn,xn1]+s(s+1)h2f[xn,xn1,xn2]++s(s+1)(s+n1)hnf[xn,,x0]=k=0n(1)k(sk)k!hkf[xn,xn1,,xnk]\begin{aligned} P_{n}(x_s) =&P_{n}(x_{n}+sh) \\ =&f[x_{n}]+shf[x_{n},x_{n-1}]+s(s+1)h^{2}f[x_{n},x_{n-1},x_{n-2}]+\cdots \\ &+s(s+1)\cdots(s+n-1)h^nf[x_n,\ldots,x_0]\\ =&\sum\limits_{k=0}^n(-1)^k\begin{pmatrix}-s\\k\end{pmatrix}k!h^kf[x_n,x_{n-1},\cdots,x_{n-k}] \end{aligned}

这里的 (sk)\begin{pmatrix}-s\\k\end{pmatrix} 是组合数,即 s(s1)(sk+1)k!=(1)ks(s+1)(s+k1)k!\frac{-s(-s-1)\cdots(-s-k+1)}{k!}=(-1)^k \cdot \frac{s(s+1)\cdots(s+k-1)}{k!}

等距下的向后差分公式

由向后差分的记号可知道

f[xn,xn1]=1hf(xn),f[xn,xn1,xn2]=12h22f(xn),\begin{aligned} f[x_n,x_{n-1}]&=\frac1h\nabla f(x_n),\\ f[x_n,x_{n-1},x_{n-2}]&=\frac1{2h^2}\nabla^2f(x_n),\\\end{aligned}

由此可推广得出

f[xn,xn1,,xnk]=1k!hkkf(xn).\begin{aligned} f[x_n,x_{n-1},\ldots,x_{n-k}]&=\frac1{k!h^k}\nabla^kf(x_n).\end{aligned}

所以

Pn(xs)=k=0n(1)k(sk)kf(xn)P_n(x_s)=\sum\limits_{k=0}^n(-1)^k\begin{pmatrix}-s\\k\end{pmatrix}\nabla^kf(x_n)

3.3 Hermite Interpolation | Hermite 插值

Hermite 插值的目标是找到一个插值多项式

Osculating polynomials | 密切多项式

x0,x1,,xnx_0,x_1,\cdots,x_n 上逼近 fCm[a,b]f\in C^m[a,b]密切多项式(osculating polynomial) 是具有以下性质的多项式 Pn(x)P_n(x)

  1. Pn(x)P_n(x)x0,x1,,xnx_0,x_1,\cdots,x_n 上与 f(x)f(x) 相同
  2. 对每个 xix_iPn(x)P_n(x)f(x)f(x)xix_i 处的前 mim_i 阶导数相同
  3. 因此,我们可以得到 i=0n(mi+1)=i=0nmi+(n+1)\sum\limits_{i=0}^n(m_i+1)=\sum\limits_{i=0}^nm_i+(n+1) 个条件,于是 Pn(x)P_n(x) 是一个次数至多为 i=0nmi+n\sum\limits_{i=0}^nm_i+n 的多项式

我们给出密切多项式的定义:

定义:x0,x1,,xnx_0,x_1,\cdots,x_n[a,b][a,b] 上的 n+1n+1 个不同的点,m0,m1,,mnm_0,m_1,\cdots,m_nn+1n+1 个非负整数,假设fCm[a,b]f\in C^m[a,b],其中 m=max0inmim=\max\limits_{0\leq i\leq n}m_i。逼近 ff密切多项式 Pn(x)P_n(x) 是使得下式成立的最小次数的多项式:

dkdxkPn(xi)=dkdxkf(xi),k=0,1,,mi,i=0,1,,n\frac{d^k}{dx^k}P_n(x_i)=\frac{d^k}{dx^k}f(x_i),\quad k=0,1,\cdots,m_i,\quad i=0,1,\cdots,n

  1. n=0n=0 时,逼近 ff 的密切多项式是 ffx0x_0 处的 m0m_0 阶 Taylor 多项式。
  2. mi=0m_i=0 时,密切多项式就是对 ffx0,x1,,xnx_0,x_1,\cdots,x_n 上插值的 nn 次拉格朗日插值多项式。

Hermite 插值多项式

对密切多项式 mi=1m_i=1 的情况,我们定义其为 Hermite 多项式。也就是说,多项式 P(n)P(n) 和它的一阶导数 P(n)P'(n)xix_i 处与 ffff' 相同。

特殊例子

假设 x0x1x2x_0\neq x_1 \neq x_2,给定 f(x0),f(x1),f(x2),f(x1)f(x_0),f(x_1),f(x_2),f'(x_1),找到多项式使得P(xi)=f(xi)P(x_i)=f(x_i)P(x1)=f(x1)P'(x_1)=f'(x_1)

首先,其次数为3次,我们猜想其形式为

P(x)=i=02f(xi)hi(x)+f(x1)h^1(x)P(x)=\sum\limits_{i=0}^2f(x_i)h_i(x)+f'(x_1)\hat{h}_1(x)

其中hi(xj)=δi(xj),hi(x1)=0,h^1(xi)=0,h^1(x1)=1h_i(x_j)=\delta_i(x_j),h'_i(x_1)=0,\hat{h}_1(x_i)=0,\hat{h}'_1(x_1)=1

根据这个猜想,我们试图构造出 hi(x)h_i(x)h^1(x)\hat{h}_1(x)

首先,我们可以用拉格朗日同样的方法构造出三次多项式hi(x)h_i(x),使得hi(xj)=δi(xj)h_i(x_j)=\delta_i(x_j)hi(x1)=0h'_i(x_1)=0i=0,1,2i=0,1,2

对于h0(x)h_0(x),有根x1,x2x_1,x_2,且因为 h0(x1)=0h'_0(x_1)=0 所以 x1x_1h0(x)h_0(x) 的二重根,所以其形式为

h0(x)=C0(xx1)2(xx2)h_0(x)=C_0(x-x_1)^2(x-x_2)

又因为h0(x0)=1h'_0(x_0)=1,所以

h0(x)=(xx1)2(xx2)(x0x1)2(x0x2)h_0(x)=\frac{(x-x_1)^2(x-x_2)}{(x_0-x_1)^2(x_0-x_2)}

类似地,我们可以得到

h2(x)=(xx0)(xx1)2(x2x0)(x2x1)2h_2(x)=\frac{(x-x_0)(x-x_1)^2}{(x_2-x_0)(x_2-x_1)^2}

对于h1(x)h_1(x),有根x0,x2x_0,x_2,都是单根。所以其形式为

h1(x)=(Ax+B)(xx0)(xx2)h_1(x)=(Ax+B)(x-x_0)(x-x_2)

通过计算 h1(x1)=1h_1(x_1)=1h1(x1)=0h'_1(x_1)=0,可以得到 AABB 的值。此处略。

然后,我们构造h^1(x)\hat{h}_1(x),使得h^1(xi)=0\hat{h}_1(x_i)=0h^1(x1)=1\hat{h}'_1(x_1)=1。对于h^1(x)\hat{h}_1(x),有根x0,x1,x2x_0,x_1,x_2,所以

h^1(x)=C(xx0)(xx1)(xx2)\hat{h}_1(x)=C(x-x_0)(x-x_1)(x-x_2)

又因为h^1(x1)=1\hat{h}'_1(x_1)=1,所以可以通过计算得到 CC 的值。此处略。

一般情况

如果已知 f(x0),f(x1),,f(xn)f(x_0),f(x_1),\cdots,f(x_n)f(x0),f(x1),,f(xn)f'(x_0),f'(x_1),\cdots,f'(x_n),则可以构造出 Hermite 插值多项式

H2n+1(x)=i=0nf(xi)hi(x)+i=0nf(xi)h^i(x)H_{2n+1}(x)=\sum\limits_{i=0}^nf(x_i)h_i(x)+\sum\limits_{i=0}^nf'(x_i)\hat{h}_i(x)

其中(2n+1)(2n+1)阶多项式hi(xj)=δi(xj),hi(xj)=0,h^i(xj)=0,h^i(xj)=δi(xj)h_i(x_j)=\delta_i(x_j),h'_i(x_j)=0,\hat{h}_i(x_j)=0,\hat{h}'_i(x_j)=\delta_i(x_j)

对于hi(x)h_i(x),有根x0,x1,,xi1,xi+1,,xnx_0,x_1,\cdots,x_{i-1},x_{i+1},\cdots,x_n,且因为 hi(xj)=0(ji)h'_i(x_j)=0(j\neq i) 所以 xjx_jhi(x)h_i(x)22 重根,所以其形式为

hi(x)=(Ax+B)(xx0)2(xx1)2(xxi1)2(xxi+1)2(xxn)2=(Ax+B)Ln,i2(x)\begin{aligned} h_i(x)&=(A'x+B')(x-x_0)^2(x-x_1)^2\cdots(x-x_{i-1})^2(x-x_{i+1})^2\cdots(x-x_n)^2\\ &=(Ax+B)L_{n,i}^2(x) \end{aligned}

这里的常系数改变是因为引入 Ln,i(x)L_{n,i}(x) 的话,它相较前面的有额外系数

Ln,i(x)=j=0,jinxxjxixjL_{n,i}(x)=\prod\limits_{j=0,j\neq i}^n\frac{x-x_j}{x_i-x_j}

因为hi(xi)=1h_i(x_i)=1hi(xi)=0h'_i(x_i)=0,所以

hi(x)=(12(xxi)Ln,i(xi))(Ln,i(x))2h_i(x)=\left(1-2(x-x_i)L'_{n,i}(x_i)\right)\left(L_{n,i}(x)\right)^2

对于h^i(x)\hat{h}_i(x),有根x0,x1,,xnx_0,x_1,\cdots,x_n,且因为 h^i(xj)=0(ji)\hat{h}'_i(x_j)=0(j\neq i)h^i(xi)=1\hat{h}'_i(x_i)=1 所以 xix_ih^i(x)\hat{h}_i(x)11 重根,其余的都是 22 重根,所以其形式为

h^i(x)=Ci(xxi)(Ln,i(x))2\hat{h}_i(x)=C_i(x-x_i)\left(L_{n,i}(x)\right)^2

因为h^i(xi)=1\hat{h}'_i(x_i)=1,所以

h^i(x)=(xxi)(Ln,i(x))2\hat{h}_i(x)=\left(x-x_i\right)\left(L_{n,i}(x)\right)^2

余项

如果 a=x0<x1<<xn=ba=x_0<x_1<\cdots<x_n=bfC2n[a,b]f\in C^{2n}[a,b],余项为

f(x)Pn(x)=f(2n+2)(ξ(x))(2n+2)!i=0n(xxi)2f(x)-P_n(x)=\frac{f^{(2n+2)}(\xi(x))}{(2n+2)!}\prod\limits_{i=0}^n(x-x_i)^2

3.4 Cubic Spline Interpolation | 三次样条插值

Piecewise-polynomial approximation | 分段多项式逼近

最简单的分段多项式逼近是分段线性逼近,即在每个子区间上用一个一次多项式逼近函数 ff。但是,分段线性逼近的函数不光滑,所以我们希望用更高次的多项式来逼近 ff

Alt text

一个可替代的方法是使用 Hermite 插值多项式。例如,如果 ffff' 的值在每一个点 xix_i 处都已知,那么我们可以在每个子区间上使用一个三次多项式来逼近 ff。这样的逼近是光滑的,但是为了将该多项式应用于一般插值,需要知道所有的 ff' 的值,这是不现实的。

由此,我们引入了三次样条插值。

Cubic spline interpolation | 三次样条插值

三次样条的构造不假设插值函数的导数值与原函数的导数值相等,即使在插值点处也如此。

给定在 [a,b][a,b] 上的 n+1n+1 个点 x0,x1,,xnx_0,x_1,\cdots,x_na=x0<x1<<xn=ba=x_0<x_1<\cdots<x_n=b,以及 ff。三次样条插值是一个函数 S(x)S(x),满足以下条件:

  1. S(x)S(x) 在每个子区间 [xi,xi+1][x_i,x_{i+1}] 上是一个三次多项式,i=0,1,,n1i=0,1,\cdots,n-1
  2. S(xi)=f(xi)S(x_i)=f(x_i)i=0,1,,ni=0,1,\cdots,n
  3. Si+1(xi+1)=Si(xi+1)S_{i+1}(x_{i+1})=S_i(x_{i+1})i=0,1,,n2i=0,1,\cdots,n-2
  4. Si+1(xi+1)=Si(xi+1)S'_{i+1}(x_{i+1})=S'_i(x_{i+1})i=0,1,,n2i=0,1,\cdots,n-2
  5. Si+1(xi+1)=Si(xi+1)S''_{i+1}(x_{i+1})=S''_i(x_{i+1})i=0,1,,n2i=0,1,\cdots,n-2
  6. 下列的边界条件之一成立:
    1. S(x0)=S(xn)=0S''(x_0)=S''(x_n)=0,称为自由或自然边界(free or natural boundary)
    2. S(x0)=f(x0)S'(x_0)=f'(x_0)S(xn)=f(xn)S'(x_n)=f'(x_n),称为固支边界(clamped boundary)
    3. 其他边界条件(上面两个条件其实已经足以满足目的了)

我们介绍一种构造三次样条插值的方法:

Method of Bending Moments

hj=xjxj1h_j=x_j-x_{j-1},在 x[xj1,xj]x\in[x_{j-1},x_j] 上,S(x)=Sj(x)S(x)=S_j(x)S(x)=Sj(x)S'(x)=S'_j(x)S(x)=Sj(x)S''(x)=S''_j(x)

因为 S(x)S(x) 是一个三次多项式,所以 Sj(x)S''_j(x) 是一个一次多项式,由端点值决定,假设 Sj(xj1)=Mj1S''_j(x_{j-1})=M_{j-1}Sj(xj)=MjS''_j(x_j)=M_j。那么对于 x[xj1,xj]x\in[x_{j-1},x_j],有

Sj(x)=Mj1xjxhj+Mjxxj1hjS''_j(x)=M_{j-1}\frac{x_j-x}{h_j}+M_j\frac{x-x_{j-1}}{h_j}

积分得到

Sj(x)=Mj1(xjx)22hj+Mj(xxj1)22hj+AjS'_j(x)=-M_{j-1}\frac{(x_j-x)^2}{2h_j}+M_j\frac{(x-x_{j-1})^2}{2h_j}+A_j

再积分得到

Sj(x)=Mj1(xjx)36hj+Mj(xxj1)36hj+Ajx+BjS_j(x)=M_{j-1}\frac{(x_j-x)^3}{6h_j}+M_j\frac{(x-x_{j-1})^3}{6h_j}+A_jx+B_j

AjA_jBjB_j 是常数,可以通过 Sj(xj1)=yj1S_j(x_{j-1})=y_{j-1}Sj(xj)=yjS_j(x_j)=y_{j} 得到。

{Sj(xj1)=yj1Sj(xj)=yj{Mj1hj26+Ajxj1+Bj=yj1Mjhj26+Ajxj+Bj=yj{Aj=yjyj1hjMjMj16hjBj=yj1xjyjxj1hjMj1xjMjxj16hj\begin{aligned} \begin{cases} S_j(x_{j-1})=y_{j-1}\\ S_j(x_j)=y_{j} \end{cases} &\Rightarrow \begin{cases} M_{j-1}\frac{h_j^2}{6}+A_jx_{j-1}+B_j=y_{j-1}\\ M_j\frac{h_j^2}{6}+A_jx_j+B_j=y_{j} \end{cases}\\ &\Rightarrow \begin{cases} A_j=\frac{y_j-y_{j-1}}{h_j}-\frac{M_j-M_{j-1}}{6}h_j\\ B_j=\frac{y_{j-1}x_j-y_jx_{j-1}}{h_j}-\frac{M_{j-1}x_j-M_jx_{j-1}}{6}h_j \end{cases}\\ \end{aligned}

所以

Ajx+Bj=yjyj1hjx+yj1xjyjxj1hjMjMj16hjxMj1xjMjxj16hj=(yj1Mj16hj2)xjxhj+(yjMj6hj2)xxj1hj\begin{aligned} A_jx+B_j&=\frac{y_j-y_{j-1}}{h_j}x+\frac{y_{j-1}x_j-y_jx_{j-1}}{h_j}-\frac{M_j-M_{j-1}}{6}h_jx-\frac{M_{j-1}x_j-M_jx_{j-1}}{6}h_j\\ &=(y_{j-1}-\frac{M_{j-1}}{6}h_j^2)\frac{x_j-x}{h_j}+(y_j-\frac{M_j}{6}h_j^2)\frac{x-x_{j-1}}{h_j} \end{aligned}

所以,我们的目的就是求出 MjM_jj=0,1,,nj=0,1,\cdots,n

因为 SS' 是连续的,所以

[xj1,xj][x_{j-1},x_j] 上,Sj(x)=Mj1(xjx)22hj+Mj(xxj1)22hj+f[xj1,xj]MjMj16hjS'_j(x)=-M_{j-1}\frac{(x_j-x)^2}{2h_j}+M_j\frac{(x-x_{j-1})^2}{2h_j}+f[x_{j-1},x_j]-\frac{M_j-M_{j-1}}{6}h_j

[xj,xj+1][x_j,x_{j+1}] 上,Sj+1(x)=Mj(xj+1x)22hj+1+Mj+1(xxj)22hj+1+f[xj,xj+1]Mj+1Mj6hj+1S'_{j+1}(x)=-M_{j}\frac{(x_{j+1}-x)^2}{2h_{j+1}}+M_{j+1}\frac{(x-x_{j})^2}{2h_{j+1}}+f[x_j,x_{j+1}]-\frac{M_{j+1}-M_{j}}{6}h_{j+1}

Sj+1(xj)=Sj(xj)S'_{j+1}(x_j)=S'_j(x_j),所以我们可以得到 Mj1,Mj,Mj+1M_{j-1}, M_j, M_{j+1} 之间的关系:

λj=hj+1hj+hj+1\lambda_j=\frac{h_{j+1}}{h_j+h_{j+1}}μj=hjhj+hj+1\mu_j=\frac{h_{j}}{h_j+h_{j+1}}gj=6hj+hj+1(f[xj,xj+1]f[xj1,xj])g_j=\frac{6}{h_j+h_{j+1}}(f[x_j,x_{j+1}]-f[x_{j-1},x_j]),则

μjMj1+2Mj+λjMj+1=gj\mu_jM_{j-1}+2M_j+\lambda_jM_{j+1}=g_j

其中 j=1,2,,n1j=1,2,\cdots,n-1

[μ12λ1μ22λ2μn12λn1][M0M1Mn]=[g1g2gn1]\begin{bmatrix} \mu_1 & 2 & \lambda_1 & & & \\ & \mu_2 & 2 & \lambda_2 & & \\ & & \ddots & \ddots & \ddots & \\ & & & \mu_{n-1} & 2 & \lambda_{n-1} \\ \end{bmatrix} \begin{bmatrix} M_0\\ M_1\\ \vdots\\ M_n\\ \end{bmatrix}= \begin{bmatrix} g_1\\ g_2\\ \vdots\\ g_{n-1}\\ \end{bmatrix}

我们有 n+1n+1 个未知数,n1n-1个方程 → 由边界条件增加两个方程

Clamped boundary | 固支边界

此时我们知道 S(x0)=f(x0)S'(x_0)=f'(x_0)S(xn)=f(xn)S'(x_n)=f'(x_n),所以

[x0,x1][x_0,x_1] 上,S1(x)=M0(x1x)22h1+M1(xx0)22h1+f[x0,x1]M1M06h1S'_1(x)=-M_0\frac{(x_1-x)^2}{2h_1}+M_1\frac{(x-x_0)^2}{2h_1}+f[x_0,x_1]-\frac{M_1-M_0}{6}h_1

[xn1,xn][x_{n-1},x_n] 上,Sn(x)=Mn1(xnx)22hn+Mn(xxn1)22hn+f[xn1,xn]MnMn16hnS'_n(x)=-M_{n-1}\frac{(x_n-x)^2}{2h_n}+M_n\frac{(x-x_{n-1})^2}{2h_n}+f[x_{n-1},x_n]-\frac{M_n-M_{n-1}}{6}h_n

所以我们额外有两个方程:

{f(x0)=M0h12+f[x0,x1]M1M06h1f(xn)=Mnhn2+f[xn1,xn]MnMn16hn{2M0+M1=6h1(f[x0,x1]f(x0))g0Mn1+2Mn=6hn(f(xn)f[xn1,xn])gn\begin{cases} f'(x_0)=-M_0\frac{h_1}{2}+f[x_0,x_1]-\frac{M_1-M_0}{6}h_1\\ f'(x_n)=M_{n }\frac{h_n}{2}+f[x_{n-1},x_n]-\frac{M_n-M_{n-1}}{6}h_n \end{cases} \Rightarrow \begin{cases} 2M_0+M_1=\frac{6}{h_1}(f[x_0,x_1]-f'(x_0))\triangleq g_0\\ M_{n-1}+2M_n=\frac{6}{h_n}(f'(x_n)-f[x_{n-1},x_n]) \triangleq g_n \end{cases}

所以我们可以得到

[21μ12λ1μn12λn112][M0M1Mn]=[g0g1gn]\begin{bmatrix} 2 & 1 & & & &\\ \mu_1 & 2 & \lambda_1 & & &\\ & \ddots & \ddots & \ddots & &\\ & & \mu_{n-1} & 2 & \lambda_{n-1} &\\ & & & 1 & 2 \end{bmatrix} \begin{bmatrix} M_0\\ M_1\\ \vdots\\ M_n\\ \end{bmatrix}= \begin{bmatrix} g_0\\ g_1\\ \vdots\\ g_n \end{bmatrix}

Natural boundary | 自由边界

根据之前的假设,有 M0=S(x0)=y0M_0=S''(x_0)=y''_0Mn=S(xn)=ynM_n=S''(x_n)=y''_n,则

λ0=0,g0=2y0,μn=0,gn=2yn\lambda_0 = 0, g_0 = 2y''_0, \mu_n = 0, g_n = 2y''_n

S(x0)=S(xn)=0S''(x_0)=S''(x_n)=0,我们称之为自由边界(free boundary),此时 g0=gn=0g_0=g_n=0

[200μ12λ1μn12λn1002](n+1)×(n+1)[M0M1Mn1Mn](n+1)×1=[g0g1gn1gn](n+1)×1\begin{bmatrix} 2 & 0 & 0 & & &\\ \mu_1 & 2 & \lambda_1 & \\ & \ddots & \ddots & \ddots & \\ & & \mu_{n-1} & 2 & \lambda_{n-1} \\ & & 0& 0 & 2 \end{bmatrix}_{(n+1)\times (n+1)} \begin{bmatrix} M_0\\ M_1\\ \vdots\\ M_{n-1}\\ M_n\\ \end{bmatrix}_{(n+1)\times 1}= \begin{bmatrix} g_0\\ g_1\\ \vdots\\ g_{n-1}\\ g_n \end{bmatrix}_{(n+1)\times 1}

自由边界的情况下,有 S(x0)=S(xn)=0S''(x_0)=S''(x_n)=0

书上的方法

我们介绍另一种构造三次样条插值的方法:

给定在 [a,b][a,b] 上的 n+1n+1 个点 x0,x1,,xnx_0,x_1,\cdots,x_na=x0<x1<<xn=ba=x_0<x_1<\cdots<x_n=b,设三次多项式 Sj(x)S_j(x)

Sj(x)=aj+bj(xxj)+cj(xxj)2+dj(xxj)3,j=0,1,,n1S_j(x)=a_j+b_j(x-x_{j})+c_j(x-x_{j})^2+d_j(x-x_{j})^3,\quad j=0,1,\cdots,n-1

且满足

  1. S(x)S(x) 在每个子区间 [xi,xi+1][x_i,x_{i+1}] 上是一个三次多项式,i=0,1,,n1i=0,1,\cdots,n-1
  2. S(xi)=f(xi)S(x_i)=f(x_i)i=0,1,,ni=0,1,\cdots,n
  3. Si+1(xi+1)=Si(xi+1)S_{i+1}(x_{i+1})=S_i(x_{i+1})i=0,1,,n2i=0,1,\cdots,n-2
  4. Si+1(xi+1)=Si(xi+1)S'_{i+1}(x_{i+1})=S'_i(x_{i+1})i=0,1,,n2i=0,1,\cdots,n-2
  5. Si+1(xi+1)=Si(xi+1)S''_{i+1}(x_{i+1})=S''_i(x_{i+1})i=0,1,,n2i=0,1,\cdots,n-2
  6. 下列的边界条件之一成立:
    1. S(x0)=S(xn)=0S''(x_0)=S''(x_n)=0,称为自由或自然边界(free or natural boundary)
    2. S(x0)=f(x0)S'(x_0)=f'(x_0)S(xn)=f(xn)S'(x_n)=f'(x_n),称为固支边界(clamped boundary)
    3. 其他边界条件(上面两个条件其实已经足以满足目的了)

hj=xjxj1h_j=x_j-x_{j-1},由条件3,可得

aj+1=Sj+1(xj+1)=Sj(xj+1)=aj+bjhj+cjhj2+djhj3,j=0,1,,n1a_{j+1}=S_{j+1}(x_{j+1})=S_j(x_{j+1})=a_j+b_jh_j+c_jh_j^2+d_jh_j^3,\quad j=0,1,\cdots,n-1

又由条件4,因为 S(x)=bj+2cj(xxj)+3dj(xxj)2S'(x)=b_j+2c_j(x-x_j)+3d_j(x-x_j)^2,所以

bj+1=Sj+1(xj+1)=Sj(xj+1)=bj+2cjhj+3djhj2,j=0,1,,n1b_{j+1}=S'_{j+1}(x_{j+1})=S'_j(x_{j+1})=b_j+2c_jh_j+3d_jh_j^2,\quad j=0,1,\cdots,n-1

又由条件5,因为 S(x)=2cj+6dj(xxj)S''(x)=2c_j+6d_j(x-x_j),所以

cj+1=Sj+1(xj+1)2=cj+3djhj,j=0,1,,n1c_{j+1}=\frac{S''_{j+1}(x_{j+1})}{2}=c_j+3d_jh_j,\quad j=0,1,\cdots,n-1

所以

{aj+1=aj+bjhj+cjhj2+djhj3bj+1=bj+2cjhj+3djhj2cj+1=cj+3djhj,j=0,1,,n1\begin{cases} a_{j+1}=a_j+b_jh_j+c_jh_j^2+d_jh_j^3\\ b_{j+1}=b_j+2c_jh_j+3d_jh_j^2\\ c_{j+1}=c_j+3d_jh_j \end{cases},\quad j=0,1,\cdots,n-1

把最后一个式子代入前两个式子,消去 djd_j,得到

{aj+1=aj+bjhj+hj23(2cj+cj+1)bj+1=bj+hj(cj+cj+1),j=0,1,,n1\begin{cases} a_{j+1}=a_j+b_jh_j+\frac{h_j^2}{3}(2c_j+c_{j+1})\\ b_{j+1}=b_j+h_j(c_j+c_{j+1})\\ \end{cases},\quad j=0,1,\cdots,n-1

为了减少未知数,我们有

aj+1=aj+bjhj+hj23(2cj+cj+1){bj=1hj(aj+1aj)hj3(2cj+cj+1)bj1=1hj1(ajaj1)hj13(2cj1+cj)bj+1=bj+hj(cj+cj+1)bj=bj1+hj1(cj1+cj)\begin{aligned} a_{j+1}=a_j+b_jh_j+\frac{h_j^2}{3}(2c_j+c_{j+1})&\Rightarrow \begin{cases} b_j=\frac{1}{h_j}(a_{j+1}-a_j)-\frac{h_j}{3}(2c_j+c_{j+1})\\ b_{j-1}=\frac{1}{h_{j-1}}(a_{j}-a_{j-1})-\frac{h_{j-1}}{3}(2c_{j-1}+c_{j}) \end{cases}\\ b_{j+1}=b_j+h_j(c_j+c_{j+1})&\Rightarrow b_j=b_{j-1}+h_{j-1}(c_{j-1}+c_j) \end{aligned}

所以

{bj=1hj(aj+1aj)hj3(2cj+cj+1)bj1=1hj1(ajaj1)hj13(2cj1+cj)bj=bj1+hj1(cj1+cj)1hj(aj+1aj)hj3(2cj+cj+1)=1hj1(ajaj1)hj13(2cj1+cj)+hj1(cj1+cj)hj1cj1+2(hj1+hj)cj+hjcj+1=3hj(aj+1aj)3hj1(ajaj1)(j=1,2,,n1)\begin{aligned} &\begin{cases} b_j&=\frac{1}{h_j}(a_{j+1}-a_j)-\frac{h_j}{3}(2c_j+c_{j+1})\\ b_{j-1}&=\frac{1}{h_{j-1}}(a_{j}-a_{j-1})-\frac{h_{j-1}}{3}(2c_{j-1}+c_{j})\\ b_j&=b_{j-1}+h_{j-1}(c_{j-1}+c_j) \end{cases}\\ &\Rightarrow \frac{1}{h_j}(a_{j+1}-a_j)-\frac{h_j}{3}(2c_j+c_{j+1}) =\frac{1}{h_{j-1}}(a_{j}-a_{j-1})-\frac{h_{j-1}}{3}(2c_{j-1}+c_{j})+h_{j-1}(c_{j-1}+c_j)\\ &\Rightarrow h_{j-1}c_{j-1}+2(h_{j-1}+h_j)c_j+h_jc_{j+1} =\frac{3}{h_j}(a_{j+1}-a_j)-\frac{3}{h_{j-1}}(a_{j}-a_{j-1}) \quad (j=1,2,\cdots,n-1)\\ \end{aligned}

因为 aja_j, hjh_j 已知,所以上式未知量仅为 cjc_j,而且求出 cjc_j 后,bjb_j 也就求出了。(bj=1hj(aj+1aj)hj3(2cj+cj+1)b_j=\frac{1}{h_j}(a_{j+1}-a_j)-\frac{h_j}{3}(2c_j+c_{j+1})

所以我们有 n1n-1 个方程,n+1n+1 个未知数,所以我们需要额外的两个方程。

Natural boundary | 自由边界

书上给的是 S(a)=S(b)=0S''(a)=S''(b)=0,实际上,我们在做题中扩展到了 S(a)=s0S''(a)=s_0S(b)=snS''(b)=s_n,此时

c0=S(a)2=s02,cn=S(b)2=sn2c_0=\frac{S''(a)}{2}=\frac{s_0}{2},\quad c_n=\frac{S''(b)}{2}=\frac{s_n}{2}

所以,我们可以将上面的方程组写成 Ax=b\mathbf{Ax}=\mathbf{b} 的形式,其中 A\mathbf{A}(n+1)×(n+1)(n+1)\times(n+1) 的矩阵

A=[100000h02(h0+h1)h10000h12(h1+h2)000000hn22(hn2+hn1)hn1000001]\mathbf{A}=\begin{bmatrix} 1&0&0&\cdots&0&0&0\\ h_0&2(h_0+h_1)&h_1&\cdots&0&0&0\\ 0&h_1&2(h_1+h_2)&\cdots&0&0&0\\ \vdots&\vdots&\vdots&\ddots&\vdots&\vdots&\vdots\\ 0&0&0&\cdots&h_{n-2}&2(h_{n-2}+h_{n-1})&h_{n-1}\\ 0&0&0&\cdots&0&0&1 \end{bmatrix}

b\mathbf{b}x\mathbf{x}(n+1)×1(n+1)\times1 的向量

b=[s023h1(a2a1)3h0(a1a0)3h2(a3a2)3h1(a2a1)3hn1(anan1)3hn2(an1an2)sn2],x=[c0c1c2cn1cn]\mathbf{b}=\begin{bmatrix} \frac{s_0}{2}\\ \frac{3}{h_1}(a_{2}-a_1)-\frac{3}{h_0}(a_{1}-a_0)\\ \frac{3}{h_2}(a_{3}-a_2)-\frac{3}{h_1}(a_{2}-a_1)\\ \vdots\\ \frac{3}{h_{n-1}}(a_{n}-a_{n-1})-\frac{3}{h_{n-2}}(a_{n-1}-a_{n-2})\\ \frac{s_n}{2} \end{bmatrix} ,\quad \mathbf{x}=\begin{bmatrix} c_0\\ c_1\\ c_2\\ \vdots\\ c_{n-1}\\ c_n \end{bmatrix}

因为矩阵 A\mathbf{A} 是严格对角占优的,所以该方程组有唯一解。

伪代码

Alt text

固支边界

固支边界要求 S(a)=f(a)S'(a)=f'(a)S(b)=f(b)S'(b)=f'(b)

因为 f(a)=S(a)=S(x0)=b0f'(a)=S'(a)=S'(x_0)=b_0f(b)=S(b)=S(xn)=bnf'(b)=S'(b)=S'(x_n)=b_n,所以

{f(a)=b0=1h0(a1a0)h03(2c0+c1)f(b)=bn=bn1+hn1(cn1+cn)=1hn1(anan1)+hn13(cn1+2cn){2h0c0+h0c1=3h0(a1a0)3f(a)hn1cn1+2hn1cn=3f(b)3hn1(anan1)\begin{aligned} &\begin{cases} f'(a)&=b_0=\frac{1}{h_0}(a_1-a_0)-\frac{h_0}{3}(2c_0+c_1)\\ f'(b)&=b_n=b_{n-1}+h_{n-1}(c_{n-1}+c_n)=\frac{1}{h_{n-1}}(a_{n}-a_{n-1})+\frac{h_{n-1}}{3}(c_{n-1}+2c_n) \end{cases}\\ \Rightarrow& \begin{cases} 2h_0c_0+h_0c_1&=\frac{3}{h_0}(a_1-a_0)-3f'(a)\\ h_{n-1}c_{n-1}+2h_{n-1}c_n&=3f'(b)-\frac{3}{h_{n-1}}(a_n-a_{n-1}) \end{cases} \end{aligned}

所以,我们可以将上面的方程组写成 Ax=b\mathbf{Ax}=\mathbf{b} 的形式,其中 A\mathbf{A}(n+1)×(n+1)(n+1)\times(n+1) 的矩阵

A=[2h0h00000h02(h0+h1)h10000h12(h1+h2)000000hn22(hn2+hn1)hn10000hn12hn1]\mathbf{A}=\begin{bmatrix} 2h_0&h_0&0&\cdots&0&0&0\\ h_0&2(h_0+h_1)&h_1&\cdots&0&0&0\\ 0&h_1&2(h_1+h_2)&\cdots&0&0&0\\ \vdots&\vdots&\vdots&\ddots&\vdots&\vdots&\vdots\\ 0&0&0&\cdots&h_{n-2}&2(h_{n-2}+h_{n-1})&h_{n-1}\\ 0&0&0&\cdots&0&h_{n-1}&2h_{n-1} \end{bmatrix}

b\mathbf{b}x\mathbf{x}(n+1)×1(n+1)\times1 的向量

b=[3h0(a1a0)3f(a)3h1(a2a1)3h0(a1a0)3h2(a3a2)3h1(a2a1)3hn1(anan1)3hn2(an1an2)3f(b)3hn1(anan1)],x=[c0c1c2cn1cn]\mathbf{b}=\begin{bmatrix} \frac{3}{h_0}(a_1-a_0)-3f'(a)\\ \frac{3}{h_1}(a_{2}-a_1)-\frac{3}{h_0}(a_{1}-a_0)\\ \frac{3}{h_2}(a_{3}-a_2)-\frac{3}{h_1}(a_{2}-a_1)\\ \vdots\\ \frac{3}{h_{n-1}}(a_{n}-a_{n-1})-\frac{3}{h_{n-2}}(a_{n-1}-a_{n-2})\\ 3f'(b)-\frac{3}{h_{n-1}}(a_n-a_{n-1}) \end{bmatrix} ,\quad \mathbf{x}=\begin{bmatrix} c_0\\ c_1\\ c_2\\ \vdots\\ c_{n-1}\\ c_n \end{bmatrix}

因为矩阵 A\mathbf{A} 是严格对角占优的,所以该方程组有唯一解。

伪代码

Alt text

Properties of cubic splines | 三次样条的性质

Chapter 4 数值微分与积分 | Numerical Differentiation and Integration

4.1 数值微分 | Numerical Differentiation

两点法

最简单的方法:用两个点,取h>0h>0

Forward : f(x)=f(x+h)f(x)h+O(h)f'(x) = \frac{f(x+h) - f(x)}{h} + O(h)

Backward : f(x)=f(x)f(xh)h+O(h)f'(x) = \frac{f(x) - f(x-h)}{h} + O(h)

Alt text

构造由 x0x_0x0+hx_0+h 确定的一次 Lagrange 插值多项式:

f(x)=f(x0)(xx0h)x0x0h+f(x0+h)(xx0)x0+hx0+(xx0)(xx0h)2!f(ξx)f(x)=f(x0+h)f(x0)h+2(xx0)h2f(ξx)+(xx0)(xx0h)2!ddxf(ξx)f(x0)=f(x0+h)f(x0)hh2f(ξx)\begin{aligned} f(x) &=\frac{f(x_0)(x-x_0-h)}{x_0-x_0-h}+\frac{f(x_0+h)(x-x_0)}{x_0+h-x_0} + \frac{(x-x_0)(x-x_0-h)}{2!}f''(\xi_x) \\ f'(x) &= \frac{f(x_0+h)-f(x_0)}{h} + \frac{2(x-x_0)-h}{2}f''(\xi_x) + \frac{(x-x_0)(x-x_0-h)}{2!}\frac{\mathrm{d}}{\mathrm{d}x}f''(\xi_x) \\ f'(x_0) &= \frac{f(x_0+h)-f(x_0)}{h} - \frac{h}{2}f''(\xi_x) \end{aligned}

一般方法

n+1n+1 个点,构造 nn 次 Lagrange 插值多项式:

f(x)=k=0nf(xk)Lk(x)+(xx0)(xxn)(n+1)!f(n+1)(ξx)f(xj)=k=0nf(xk)Lk(xj)+f(n+1)(ξj)(n+1)!k=0,kjn(xjxk)\begin{aligned}f(x)&=\sum\limits_{k=0}^nf(x_k)L_k(x)+\frac{(x-x_0)\cdots(x-x_n)}{(n+1)!}f^{(n+1)}(\xi_x)\\ f^{\prime}(x_j)&=\sum\limits_{k=0}^nf(x_k)L_k^{\prime}(x_j)+\frac{f^{(n+1)}(\xi_j)}{(n+1)!}\prod_{k = 0,k\neq j}^n(x_j-x_k) \end{aligned}

总体而言,更多的评估点会产生更高的准确性。另一方面,功能评估的数量增加,舍入误差也会增加。因此,数值微分是不稳定的!

三点公式

因为

L0(x)=(xx1)(xx2)(x0x1)(x0x2)L_0(x) = \frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}

所以

L0(x)=2xx1x2(x0x1)(x0x2)L'_0(x) = \frac{2x-x_1-x_2}{(x_0-x_1)(x_0-x_2)}

同理有

L1(x)=2xx0x2(x1x0)(x1x2)L'_1(x) = \frac{2x-x_0-x_2}{(x_1-x_0)(x_1-x_2)}

L2(x)=2xx0x1(x2x0)(x2x1)L'_2(x) = \frac{2x-x_0-x_1}{(x_2-x_0)(x_2-x_1)}

所以

f(xj)=f(x0)2xjx1x2(x0x1)(x0x2)+f(x1)2xjx0x2(x1x0)(x1x2)+f(x2)2xjx0x1(x2x0)(x2x1)+f(3)(ξj)3!k=0,kj2(xjxk)\begin{aligned} f'(x_j) =& f(x_0)\frac{2x_j-x_1-x_2}{(x_0-x_1)(x_0-x_2)} + f(x_1)\frac{2x_j-x_0-x_2}{(x_1-x_0)(x_1-x_2)} \\&+ f(x_2)\frac{2x_j-x_0-x_1}{(x_2-x_0)(x_2-x_1)}+\frac{f^{(3)}(\xi_j)}{3!}\prod_{k=0,k\neq j}^2(x_j-x_k) \end{aligned}

如果 x0,x1,x2x_0,x_1,x_2 等距,即 x1=x0+h,x2=x0+2hx_1=x_0+h,x_2=x_0+2h,则

f(xj)=f(x0)2xj2x03h2h2+f(x1)2xj2x02hh2+f(x2)2xj2x0h2h2+f(3)(ξj)3!k=0,kj2(xjxk)\begin{aligned} f'(x_j) =& f(x_0)\frac{2x_j-2x_0-3h}{2h^2} + f(x_1)\frac{2x_j-2x_0-2h}{-h^2} \\&+ f(x_2)\frac{2x_j-2x_0-h}{2h^2}+\frac{f^{(3)}(\xi_j)}{3!}\prod_{k=0,k\neq j}^2(x_j-x_k) \end{aligned}

所以

f(x0)=1h(32f(x0)+2f(x0+h)12f(x0+2h))+h23f(3)(ξ0)f(x1)=1h(12f(x0)+12f(x0+2h))h26f(3)(ξ1)f(x2)=1h(12f(x0)2f(x0+h)+32f(x0+2h))+h23f(3)(ξ2)\begin{aligned} f'(x_0) &= \frac{1}{h}(-\frac{3}{2}f(x_0)+2f(x_0+h)-\frac{1}{2}f(x_0+2h))+\frac{h^2}{3}f^{(3)}(\xi_0)\\ f'(x_1) &= \frac{1}{h}(-\frac{1}{2}f(x_0)+\frac{1}{2}f(x_0+2h))-\frac{h^2}{6}f^{(3)}(\xi_1)\\ f'(x_2) &= \frac{1}{h}(\frac{1}{2}f(x_0)-2f(x_0+h)+\frac{3}{2}f(x_0+2h))+\frac{h^2}{3}f^{(3)}(\xi_2) \end{aligned}

显然,中间的点误差最小,所以,我们可以用这种方法来估计导数值,即

f(x0)=12h[f(x0+h)f(x0h)]h26f(3)(ξ1)f^{\prime}(x_0)=\frac1{2h}[f(x_0+h)-f(x_0-h)]-\frac{h^2}6f^{(3)}(\xi_1)

Alt text

二阶导数

将函数 ffx0x_0 处展开为三阶 Taylor 多项式,并求在 x0+hx_0+hx0hx_0-h 处的值:

f(x0+h)=f(x0)+f(x0)h+12f(x0)h2+16f(x0)h3+124f(4)(ξ1)h4f(x0h)=f(x0)f(x0)h+12f(x0)h216f(x0)h3+124f(4)(ξ1)h4\begin{gathered} f(x_0+h)=f(x_0)+f^{\prime}(x_0)h+\frac12f^{\prime\prime}(x_0)h^2+\frac16f^{\prime\prime\prime}(x_0)h^3+\frac1{24}f^{(4)}(\xi_1)h^4 \\ f(x_0-h)=f(x_0)-f^{\prime}(x_0)h+\frac12f^{\prime\prime}(x_0)h^2-\frac16f^{\prime\prime\prime}(x_0)h^3+\frac1{24}f^{(4)}(\xi_{-1})h^4 \end{gathered}

将上面两式相加,得

f(x0)=f(x0+h)2f(x0)+f(x0h)h2h224[f(4)(ξ1)+f(4)(ξ1)]f^{\prime\prime}(x_0)=\frac{f(x_0+h)-2f(x_0)+f(x_0-h)}{h^2}-\frac{h^2}{24}[f^{(4)}(\xi_1)+f^{(4)}(\xi_{-1})]

由于 f(4)f^{(4)} 是连续函数,所以存在 ξ\xi 使得

f(4)(ξ)=12[f(4)(ξ1)+f(4)(ξ1)]f^{(4)}(\xi)=\frac12[f^{(4)}(\xi_1)+f^{(4)}(\xi_{-1})]

所以

f(x0)=f(x0+h)2f(x0)+f(x0h)h2h212f(4)(ξ)f^{\prime\prime}(x_0)=\frac{f(x_0+h)-2f(x_0)+f(x_0-h)}{h^2}-\frac{h^2}{12}f^{(4)}(\xi)

4.3 数值积分基础 | Elements of Numerical Integration

对于没有显式原函数或原函数难以计算的函数,我们通过 数值求积(Numerical Quadrature) 来近似计算积分值:使用和 i=0naif(xi)\sum\limits_{i=0}^n a_if(x_i) 来近似计算积分值 abf(x)dx\int_a^b f(x)\mathrm{d}x

为了确定系数 aia_i ,我们给出一种求积方法:

以第三章中给出的插值多项式为基础,得到 Lagrange 插值多项式:

Pn(x)=i=0nf(xi)Li(x)P_n(x)=\sum\limits_{i=0}^nf(x_i)L_i(x)

所以

abf(x)dxabPn(x)dx=i=0nf(xi)abLi(x)dx=i=0nf(xi)ai\int_a^b f(x)\mathrm{d}x\approx\int_a^b P_n(x)\mathrm{d}x=\sum\limits_{i=0}^nf(x_i)\int_a^b L_i(x)\mathrm{d}x=\sum\limits_{i=0}^n f(x_i)a_i

误差项为

abf(x)dxi=0nf(xi)ai=ab(f(x)Pn(x))dx=abf(n+1)(ξ)(n+1)!i=0n(xxi)dx\int_a^b f(x)\mathrm{d}x-\sum\limits_{i=0}^n f(x_i)a_i=\int_a^b (f(x)-P_n(x))\mathrm{d}x=\int_a^b \frac{f^{(n+1)}(\xi)}{(n+1)!}\prod_{i=0}^n(x-x_i)\mathrm{d}x

精确度 | Precision

求积公式的精确度 (precision/degree of accuracy) 是使得求积公式对 xkx^k 精确成立的最大正整数 kk

通用法则 - Newton-Cotes 求积公式

在等距节点上(h=banh = \frac{b-a}{n}),考察系数 aia_i 的值,我们可以得到一些通用的求积法则:

ai=x0xnLi(x)dx=x0xnj=0,jinxxjxixjdx\begin{aligned} a_i=\int_{x_0}^{x_n}L_i(x)\mathrm{d}x&=\int_{x_0}^{x_n}\prod_{j=0,j\neq i}^n\frac{x-x_j}{x_i-x_j}\mathrm{d}x\\ \end{aligned}

x=a+thx = a+th,则

ai=x0xnj=0,jinxxjxixjdx=0nj=0,jin(tj)h(ij)hhdt=h(1)nii!(ni)!0nj=0,jin(tj)dt\begin{aligned} a_i&=\int_{x_0}^{x_n}\prod_{j=0,j\neq i}^n\frac{x-x_j}{x_i-x_j}\mathrm{d}x\\ &=\int_0^n\prod_{j=0,j\neq i}^n\frac{(t-j)h}{(i-j)h}\cdot h\mathrm{d}t\\ &=h\cdot \frac{(-1)^{n-i}}{i!(n-i)!}\cdot \int_0^n\prod_{j=0,j\neq i}^n(t-j)\mathrm{d}t\\ \end{aligned}

梯形法则 | Trapezoidal Rule

n=1n=1 时:

ai=h(1)1ii!(1i)!01j=0,ji1(tj)dta0=h(1)100!(10)!01(t1)dt=12ha1=h(1)111!(11)!01(t0)dt=12h\begin{aligned} a_i&=h\cdot \frac{(-1)^{1-i}}{i!(1-i)!}\cdot \int_0^1\prod_{j=0,j\neq i}^1(t-j)\mathrm{d}t\\ a_0&=h\cdot \frac{(-1)^{1-0}}{0!(1-0)!}\cdot \int_0^1(t-1)\mathrm{d}t=\frac{1}{2}h\\ a_1&=h\cdot \frac{(-1)^{1-1}}{1!(1-1)!}\cdot \int_0^1(t-0)\mathrm{d}t=\frac{1}{2}h\\ \end{aligned}

此时,n=1n=1 的求积公式为

abf(x)dx=h2[f(a)+f(b)]h312f(ξ)\int_a^b f(x)\mathrm{d}x = \frac{h}{2}[f(a)+f(b)]-\frac{h^3}{12}f''(\xi)

此即为 梯形法则(Trapezoidal Rule)

精确度

梯形法则的精确度为 k=1k=1

Alt text

Simpson 法则 | Simpson's Rule

n=2n=2 时:

ai=h(1)2ii!(2i)!02j=0,ji2(tj)dta0=h(1)200!(20)!02(t1)(t2)dt=13ha1=h(1)211!(21)!02(t0)(t2)dt=43ha2=h(1)222!(22)!02(t0)(t1)dt=13h\begin{aligned} a_i&=h\cdot \frac{(-1)^{2-i}}{i!(2-i)!}\cdot \int_0^2\prod_{j=0,j\neq i}^2(t-j)\mathrm{d}t\\ a_0&=h\cdot \frac{(-1)^{2-0}}{0!(2-0)!}\cdot \int_0^2(t-1)(t-2)\mathrm{d}t=\frac{1}{3}h\\ a_1&=h\cdot \frac{(-1)^{2-1}}{1!(2-1)!}\cdot \int_0^2(t-0)(t-2)\mathrm{d}t=\frac{4}{3}h\\ a_2&=h\cdot \frac{(-1)^{2-2}}{2!(2-2)!}\cdot \int_0^2(t-0)(t-1)\mathrm{d}t=\frac{1}{3}h\\ \end{aligned}

此时,n=2n=2 的求积公式为

abf(x)dx=h3[f(a)+4f(a+b2)+f(b)]h590f(4)(ξ)\int_a^b f(x)\mathrm{d}x = \frac{h}{3}[f(a)+4f(\frac{a+b}{2})+f(b)]-\frac{h^5}{90}f^{(4)}(\xi)

此即为 Simpson 法则(Simpson's Rule)

其精确度为 k=3k=3

Simpson 3/8 法则 | Simpson's 3/8 Rule

n=3n=3 时,求积公式为

abf(x)dx=3h8[f(a)+3f(2a+b3)+3f(a+2b3)+f(b)]3h580f(4)(ξ)\begin{aligned} \int_a^b f(x)\mathrm{d}x &= \frac{3h}{8}[f(a)+3f(\frac{2a+b}{3})+3f(\frac{a+2b}{3})+f(b)]\\ &-\frac{3h^5}{80}f^{(4)}(\xi)\\ \end{aligned}

其精确度为 k=3k=3

Cotes 求积公式 | Cotes Rule

n=4n=4 时,求积公式为

abf(x)dx=2h45[7f(a)+32f(3a+b4)+12f(a+b2)+32f(a+3b4)+7f(b)]8h7945f(6)(ξ)\begin{aligned} \int_a^b f(x)\mathrm{d}x &= \frac{2h}{45}[7f(a)+32f(\frac{3a+b}{4})+12f(\frac{a+b}{2})+32f(\frac{a+3b}{4})+7f(b)]\\ &-\frac{8h^7}{945}f^{(6)}(\xi)\\ \end{aligned}

通用法则的一般结论

Alt text

注意:当 nn 是偶数时,精度的次数为 n+1n+1,即使插值多项式的次数至多为 nn。在 nn 是奇数的情况,精度的次数仅为 nn

4.4 复合数值积分 | Composite Numerical Integration

Newton-Cotes 以等距节点的插值多项式为基础。由于高次多项式的振荡性,这个过程在大的区间上是不精确的。为了解决这个问题,我们采用低阶 Newton-Cotes 的分段(piecewise)方法。

复合梯形法则 | Composite Trapezoidal Rule

将区间 [a,b][a,b] 分成 nn 个子区间,每个子区间长度为 h=banh = \frac{b-a}{n},则

xk1xkf(x)dxxkxk12[f(xk1)+f(xk)], k=1,...,n\int_{x_{k-1}}^{x_k}f(x)dx\approx\frac{x_k-x_{k-1}}2[f(x_{k-1})+f(x_k)],\mathrm{~}k=1,...,n

abf(x)dx=i=0n1xixi+1f(x)dx=h2[f(a)+2j=1n1f(xj)+f(b)]=Tn\int_a^b f(x)\mathrm{d}x = \sum\limits_{i=0}^{n-1}\int_{x_i}^{x_{i+1}}f(x)\mathrm{d}x=\frac{h}{2}[f(a)+2\sum\limits_{j=1}^{n-1}f(x_j)+f(b)]=\color{blue}{T_n}

其中,xi=a+ihx_i = a+ihξ[a,b]\xi\in[a,b]

误差项为

abf(x)dxTn=h212(ba)f(ξ)\int_a^b f(x)\mathrm{d}x-T_n=\frac{h^2}{12}(b-a)f''(\xi)

复合 Simpson 法则 | Composite Simpson's Rule

nn 必须是偶数。

将区间 [a,b][a,b] 分成 nn 个子区间,每个子区间长度为 h=banh = \frac{b-a}{n},则

xkxk+1f(x)dxh6[f(xk)+4f(xk+12)+f(xk+1)]\int_{x_k}^{x_{k+1}}f(x)dx\approx\frac h6[f(x_k)+4f(x_{k+\frac12})+f(x_{k+1})]

abf(x)dxh6[f(a)+4k=0n1f(xk+12)+2k=0n2f(xk+1)+f(b)]=Sn\int_a^bf(x)dx\approx\frac h6[f(a)+4\sum\limits_{k=0}^{n-1}f(x_{k+\frac12})+2\sum\limits_{k=0}^{n-2}f(x_{k+1})+f(b)]=\color{blue}{S_n}

其中,xi=a+ihx_i = a+ihξ[a,b]\xi\in[a,b]

误差项为

abf(x)dxSn=ba180(h2)4f(4)(ξ)\int_a^b f(x)\mathrm{d}x-S_n=-\frac{b-a}{180}(\frac{h}2)^4f^{(4)}(\xi)

为简化表达,我们取 n=2nn'=2n,则 h=ban=h2h' = \frac{b-a}{n'} = \frac{h}{2}x2k=xkx_{2k} = x_kx2k+1=xk+h2x_{2k+1} = x_k+\frac{h}{2},则

abf(x)dxh3[f(a)+4odd  kf(xk)+2even  kf(xk)+f(b)]=Sn\int_a^bf(x)dx\approx\frac{h'}3[f(a)+4\sum\limits_{odd\;k}f(x_{k})+2\sum\limits_{even\;k}f(x_{k})+f(b)]=\color{blue}{S_{n'}}

例题

Alt text

舍入误差的稳定性

所有的复合积分方法共有的一个重要性质是 舍入误差的稳定性

Alt text

可见,误差界与 hhnn 无关。这说明即使将一个区间分成更多子区间,也不会增加舍入误差。

4.5 Romberg 积分 | Romberg Integration

考察残差项,对于梯形法则,有

R2n[f]=(h2)2112(ba)f(ξ)14Rn[f]R_{2n}[f]=-(\frac{h}{2})^2\frac{1}{12}(b-a)f''(\xi)\approx\frac{1}{4}R_n[f]

所以

IT2nITn14\frac{I-T_{2n}}{I-T_n}\approx\frac{1}{4}

I4T2nTn41=43T2n13Tn=SnI\approx\frac{4T_{2n}-T_n}{4-1}=\frac43T_{2n}-\frac13T_n=\color{blue}{S_n}

同理,总体上,我们有

4T2nTn41=Sn,42S2nSn421=Cn,43C2nCn431=Rn,...\frac{4T_{2n}-T_n}{4-1}= S_n, \frac{4^2S_{2n}-S_n}{4^2-1}=C_n, \frac{4^3C_{2n}-C_n}{4^3-1}=R_n, ...

这里的 RnR_n 就是 Romberg 积分

所以算法为:

Alt text

其中,每一步计算误差有没有到,如果没到,继续向后算。

伪代码

Alt text

4.2 Richardson 外推法 | Richardson's Extrapolation

Target:使用低阶公式产生高精度的结果。

Alt text

4.6 自适应求积方法 | Adaptive Quadrature Methods

Target: 预测函数变化的大小,使步长适应变化的需求。

其实就是先整体估摸着求积,然后看看精度如何(此处判断精度的方式是与上一次得到的值作比较,以比值为判断条件——如果本次和上次的值差不多,说明趋于收敛);如果不够,就再细分一下,再求积。

举个例子:

Alt text

这里可以看到,S(a,a+b2)+S(a+b2,b)S(a,\frac{a+b}{2})+S(\frac{a+b}{2},b) 逼近 abf(x)dx\int_a^b f(x)\mathrm{d}x 的效果比 S(a,a+b2)+S(a+b2,b)S(a,\frac{a+b}{2})+S(\frac{a+b}{2},b) 逼近S(a,b)S(a,b) 好15倍。

4.7 Gauss 求积 | Gauss Quadrature

Target: 通过选择 n+1n+1 个合适的节点,使得求积公式的精度达到 2n+12n+1

"例子"

用 Gauss 求积公式,在 n=1n=1 的情况下估计 11xf(x)dx\int_{-1}^1 \sqrt{x}f(x)\mathrm{d}x,则精度为3,需满足 f(x)=1,x,x2,x3f(x)=1,x,x^2,x^3

11xf(x)dxA0f(x0)+A1f(x1)\int_{-1}^1 \sqrt{x}f(x)\mathrm{d}x \approx A_0f(x_0)+A_1f(x_1),则

{11xdx=A0+A111xxdx=A0x0+A1x111xx2dx=A0x02+A1x1211xx3dx=A0x03+A1x13\begin{cases} \int_{-1}^1 \sqrt{x}\mathrm{d}x = A_0+A_1 \\ \int_{-1}^1 \sqrt{x}x\mathrm{d}x = A_0x_0+A_1x_1 \\ \int_{-1}^1 \sqrt{x}x^2\mathrm{d}x = A_0x_0^2+A_1x_1^2 \\ \int_{-1}^1 \sqrt{x}x^3\mathrm{d}x = A_0x_0^3+A_1x_1^3 \\ \end{cases}

由此可求得四个未知数,从而得到求积公式

但是,求解非线性方程组是很困难的,所以我们采用另一种方法。

我们可以证明: x0...xnx_0...x_n are Gaussian points iff\color{blue}\text{iff} W(x)=k=0n(xxk)W(x)=\prod\limits_{k=0}^n\left(x-x_k\right) is orthogonal to all the polynomials of degree no greater than n.n.

Alt text

所以我们就是要找到一个正交多项式,它的零点就是我们要找的节点。

回到上面那个例子,我们就是要找到一个二阶多项式,其与小于二次的多项式的内积为0。

Alt text

Alt text

Gauss-Legendre 求积公式

Legendre 多项式Pn(x)=12nn!dndxn[(x21)n]P_n(x)=\frac{1}{2^nn!}\frac{\mathrm{d}^n}{\mathrm{d}x^n}[(x^2-1)^n]

其内积关系为:(Pk,Pl)={0,kl22k+1,k=l(P_k,P_l)=\begin{cases}0, & k\neq l \\ \frac{2}{2k+1}, & k=l\end{cases}

根据 P0(x)=1,P1(x)=xP_0(x)=1,P_1(x)=x,我们有递推关系:

Pn+1(x)=2n+1n+1xPn(x)nn+1Pn1(x)P_{n+1}(x)=\frac{2n+1}{n+1}xP_n(x)-\frac{n}{n+1}P_{n-1}(x)

这些就是Legendre多项式的集合,也就是我们要找的正交多项式。

Gauss-Chebyshev 求积公式

Alt text

Chapter 5 常微分方程的初值问题 | Initial-Value Problems for Ordinary Differential Equations

用数值方法来求解常微分方程的初值问题,就是找到 w0,w1,,wNw_0,w_1,\cdots,w_N,使得 wiy(ti)w_i\approx y(t_i)

5.1 初值问题的基本理论 | The Elementary Theory of Initial-Value Problems

Lipschitz 条件 | Lipschitz Condition

Alt text

实际上,就是关于 yy 的偏导数(如果可导)的上界

在 Lipschitz 条件下,初值问题的解是唯一的:

Alt text

良态问题 | Well-Posed Problems

Alt text

z(t)z(t) 那行的式子是原式的摄动问题(perturbed problem),即在原式的基础上加上一个扰动项(假定微分方程可能有误差δ\delta,或者初值有误差ϵ\epsilon

在 Lipschitz 条件下,初值问题是良态的:

Alt text

5.2 Euler 法 | Euler's Method

Euler 法的目的是获得如下形式的近似解:

{dydt=f(t,y)t[a,b]y(a)=α\begin{cases}\frac{dy}{dt}=f\left(t,y\right)\quad t\in[a,b]\\y(a)=\alpha&\end{cases}

得到的是一系列点的近似值。

Euler 法的思想是,用 f(t,y)f(t,y)(ti,yi)(t_i,y_i) 处的线性近似值来代替 f(t,y)f(t,y),即:

wi+1=wi+hf(ti,wi)w_{i+1}=w_i+hf(t_i,w_i)

我们称其为差分方程(difference equation)

Alt text

就是用一个点的导数值作为这个区间上的导数值

误差界

Alt text

如果考虑每次计算中的舍入误差,则有

Alt text

此时,往往有 h>2δ/Mh>\sqrt{2\delta /M}δ\delta 通常很小),所以随着 hh 的减小,误差会越来越小。(打勾函数的右沿)

其他 Euler 法

隐式欧拉法 | Implicit Euler Method

隐式欧拉法(implicit Euler method),又称后退欧拉法,是按照隐式公式进行数值求解的方法。隐式公式不能直接求解,一般需要用欧拉显式公式得到初值,然后用欧拉隐式公式进行迭代求解。因此,隐式公式比显式公式计算复杂,但稳定性好。

Alt text

梯形法 | Trapezoidal Method

梯形法(trapezoidal method)是一种求解常微分方程初值问题的数值方法。它是欧拉法和隐式欧拉法的结合,是一种二阶方法。梯形法的基本思想是用 f(ti,yi)f(t_i,y_i)f(ti+1,yi+1)f(t_{i+1},y_{i+1}) 的平均值来代替 f(t,y)f(t,y),即:

wi+1=wi+h2(f(ti,wi)+f(ti+1,wi+1))w_{i+1}=w_i+\frac{h}{2}(f(t_i,w_i)+f(t_{i+1},w_{i+1}))

Note: The local truncation error is indeed O(h2)O(h^2). However an implicit equation has to be solved iteratively.

双步法 | Double-step Method

双步法相较于之前的方法,需要两个初始值,即 w0w_0w1w_1,然后用这两个初始值来计算 w2w_2,再用 w1w_1w2w_2 来计算 w3w_3,以此类推。

Alt text

对比

Alt text

5.3 高阶 Taylor 法 | Higher-Order Taylor Methods

局部截断误差

局部截断误差只考虑一步的误差,即假设前面没有误差:

w0=αw_0=\alpha

wi+1=wi+hϕ(ti,wi),i=0,1,,N1w_{i+1}=w_i+h\phi(t_i,w_i),\quad i=0,1,\cdots,N-1

有局部截断误差

τi+1(h)=yi+1(yi+hϕ(ti,yi))h=yi+1yihϕ(ti,yi)\tau_{i+1}(h)=\frac{y_{i+1}-(y_i+h\phi(t_i,y_i))}{h}=\frac{y_{i+1}-y_i}{h}-\phi(t_i,y_i)

"对于 Euler 法"

Alt text

Euler 法实际上就是高阶 Taylor 法的一阶近似。

高阶 Taylor 法

yi+1=yi+hf(ti,yi)+h22f(ti,yi)++hnn!f(n1)(ti,yi)+hn+1(n+1)!f(n)(ξi,y(ξi))y_{i+1}=y_i+hf(t_i,y_i)+\frac{h^2}2f^{\prime}(t_i,y_i)+\cdots+\frac{h^n}{n!}f^{(n-1)}(t_i,y_i)+\frac{h^{n+1}}{(n+1)!}f^{(n)}(\xi_i,y(\xi_i))

nn 阶的 Taylor 法:

w0=αwi+1=wi+hT(n)(ti,wi)(i=0,...,n1)whereT(n)(ti,wi)=f(ti,wi)+h2f(ti,wi)+...+hn1n!f(n1)(ti,wi)\begin{aligned} w_{0}&=\alpha \\ w_{i+1}&=w_{i}+hT^{(n)}(t_{i},w_{i})\quad(i=0,...,n-1) \\ &\text{where}\quad T^{(n)}(t_i,w_i)=f(t_i,w_i)+\frac{h}{2}f^{\prime}(t_i,w_i)+...+\frac{h^{n-1}}{n!}f^{(n-1)}(t_i,w_i) \end{aligned}

其局部截断误差为 O(hn)O(h^{n})(如果 yCn+1[a,b]y\in C^{n+1}[a,b])。

"例子"

Alt text

f(t,y(t))=2ty(t)+t2etf(t,y(t))=\frac{2}{t}y(t)+t^2e^t 关于 tt 的一阶导数

f(t,y(t))=2ty+t2etf(t,y(t))=2ty2t2y+2tet+t2et=2t(2ty+t2et)2t2y+2tet+t2et=4t2y+2tet2t2y+2tet+t2et=2t2y+4tet+t2et\begin{aligned} f(t,y(t))&=\frac2ty+t^2e^t\\ f'(t,y(t))&=\frac2ty'-\frac{2}{t^2}y+2te^t+t^2e^t\\ &=\frac{2}{t}(\frac{2}{t}y+t^2e^t)-\frac{2}{t^2}y+2te^t+t^2e^t\\ &=\frac{4}{t^2}y+2te^t-\frac{2}{t^2}y+2te^t+t^2e^t\\ &=\frac{2}{t^2}y+4te^t+t^2e^t \end{aligned}

T(2)(ti,wi)=f(ti,wi)+h2f(ti,wi)=2tiwi+ti2eti+h2(2ti2wi+4tieti+ti2eti)\begin{aligned} T^{(2)}(t_i,w_i)&=f(t_i,w_i)+\frac{h}{2}f'(t_i,w_i)\\ &=\frac{2}{t_i}w_i+t_i^2e^{t_i}+\frac{h}{2}(\frac{2}{t_i^2}w_i+4t_ie^{t_i}+t_i^2e^{t_i})\\ \end{aligned}

所以 wi+1w_{i+1} 的表达式为:

wi+1=wi+hf(ti,wi)+h22f(ti,wi)=wi+h(2tiwi+ti2eti)+h22(2ti2wi+4tieti+ti2eti)\begin{aligned} w_{i+1}&=w_i+hf(t_i,w_i)+\frac{h^2}{2}f'(t_i,w_i)\\ &=w_i+h(\frac{2}{t_i}w_i+t_i^2e^{t_i})+\frac{h^2}{2}(\frac{2}{t_i^2}w_i+4t_ie^{t_i}+t_i^2e^{t_i})\\ \end{aligned}

h=0.1h=0.1 时:

ii tit_i wiw_i y(ti)y(t_i)
0 1.00 0.0000000 0.0000000
1 1.10 0.3397852 0.3459199
2 1.20 0.8521434 0.8666425
3 1.30 1.581770 1.607215
4 1.40 2.580997 2.620360
5 1.50 3.910985 3.967666
6 1.60 5.643081 5.720962
7 1.70 7.860382 7.963874
8 1.80 10.65951 10.79362
9 1.90 14.15268 14.32308
10 2.00 18.46999 18.68310

应用线性插值法,我们有

y(1.04)0.6y(1.00)+0.4y(1.10)=0.60.0000000+0.40.3397852=0.1359141y(1.55)0.5y(1.50)+0.5y(1.60)=0.53.910985+0.55.643081=4.777033y(1.97)0.3y(1.90)+0.7y(2.00)=0.314.15268+0.718.46999=17.17480\begin{aligned} y(1.04)&\approx 0.6y(1.00)+0.4y(1.10)\\ &=0.6*0.0000000+0.4*0.3397852\\ &=0.1359141\\ y(1.55)&\approx 0.5y(1.50)+0.5y(1.60)\\ &=0.5*3.910985+0.5*5.643081\\ &=4.777033\\ y(1.97)&\approx 0.3y(1.90)+0.7y(2.00)\\ &=0.3*14.15268+0.7*18.46999\\ &=17.17480 \end{aligned}

其精确值为:

y(1.04)=0.1199875y(1.55)=4.788635y(1.97)=17.27930\begin{aligned} y(1.04)&=0.1199875\\ y(1.55)&=4.788635\\ y(1.97)&=17.27930 \end{aligned}

5.4 Runge-Kutta 法 | Runge-Kutta Methods

泰勒方法需要计算 f(t,y)f(t,y) 的导数并求值,这是一个复杂、耗时的过程。Runge-Kutta 方法具有 Taylor 方法的高阶局部截断误差,但是不需要计算 f(t,y)f(t,y) 的导数。

二阶 Runge-Kutta 法 | Runge-Kutta method of order 2

我们考察改进欧拉法 KK 前面的系数以及 K2K_2 的步长,使局部截断误差为 O(h2)O(h^2)

{wi+1=wi+h[λ1K1+λ2K2]K1=f(ti,wi)K2=f(ti+ph,wi+phK1)\begin{cases}w_{i+1}&=&w_i+h[{\color{red}{\lambda_1}}K_1+{\color{red}{\lambda_2}}K_2]\\K_1&=&f(t_i,w_i)\\K_2&=&f(t_i+{\color{red}{p}}h,w_i+{\color{red}{p}}hK_1)\end{cases}

Alt text

这有无穷多种可能,我们称其为 二阶 Runge-Kutta 方法(Runge-Kutta method of order 2)。

以下三个是二阶 Runge-Kutta 方法的特例

中点法 | Midpoint Method

{w0=αwi+1=wi+hf(ti+h2,wi+h2f(ti,wi))\begin{cases}w_0=\alpha\\ w_{i+1}=w_i+hf(t_i+\frac{h}{2},w_i+\frac{h}{2}f(t_i,w_i))\end{cases}

改进欧拉法 | Modified Euler Method

{w0=αwi+1=wi+h(12K1+12K2)K1=f(ti,wi)K2=f(ti+h,wi+hK1)\begin{cases}w_0=\alpha\\ w_{i+1}=w_i+h(\frac12K_1+\frac12K_2)\\ K_1=f(t_i,w_i)\\ K_2=f(t_{i}+h,w_i+hK_1)\end{cases}

"是不是感觉和梯形法很像?"

梯形法是用 f(ti,wi)f(t_i,w_i)f(ti+1,wi+1)f(t_{i+1},w_{i+1}) 的平均值来代替 f(t,y)f(t,y),而改进欧拉法是用 f(ti,wi)f(t_i,w_i)f(ti+h,wi+hK1)f(t_{i}+h,w_i+hK_1) 的平均值来代替 f(t,y)f(t,y)。区别在于前者是隐式的,后者是显式的。

Heun 法 | Heun's Method

{w0=αwi+1=wi+h(14K1+34K2)K1=f(ti,wi)K2=f(ti+23h,wi+23hK1)\begin{cases}w_0=\alpha\\ w_{i+1}=w_i+h(\frac{1}{4}K_1+\frac{3}{4}K_2)\\ K_1=f(t_i,w_i)\\ K_2=f(t_{i}+\frac{2}{3}h,w_i+\frac{2}{3}hK_1)\end{cases}

高阶 Runge-Kutta 法 | Runge-Kutta methods of order mm

{w0=αwi+1=wi+h(λ1K1+λ2K2++λmKm)K1=f(ti,wi)K2=f(ti+α2h,wi+β21hK1)K3=f(ti+α3h,wi+β31hK1+β32hK2)Km=f(ti+αmh,wi+βm1hK1+βm2hK2++βm,m1hKm1)\begin{cases}w_0=\alpha\\ w_{i+1}=w_i+h({\color{red}{\lambda_1}}K_1+{\color{red}{\lambda_2}}K_2+\cdots+{\color{red}{\lambda_m}}K_m)\\ K_1=f(t_i,w_i)\\ K_2=f(t_i+{\color{red}{\alpha_2}}h,w_i+{\color{red}{\beta_{21}}}hK_1)\\ K_3=f(t_i+{\color{red}{\alpha_3}}h,w_i+{\color{red}{\beta_{31}}}hK_1+{\color{red}{\beta_{32}}}hK_2)\\ \vdots\\ K_m=f(t_i+{\color{red}{\alpha_m}}h,w_i+{\color{red}{\beta_{m1}}}hK_1+{\color{red}{\beta_{m2}}}hK_2+\cdots+{\color{red}{\beta_{m,m-1}}}hK_{m-1})\end{cases}

"Order 4-the most popular one"

{w0=αwi+1=wi+h(16K1+13K2+13K3+16K4)K1=f(ti,wi)K2=f(ti+h2,wi+h2K1)K3=f(ti+h2,wi+h2K2)K4=f(ti+h,wi+hK3)\begin{cases}w_0=\alpha\\ w_{i+1}=w_i+h(\frac16K_1+\frac13K_2+\frac13K_3+\frac16K_4)\\ K_1=f(t_i,w_i)\\ K_2=f(t_i+\frac{h}{2},w_i+\frac{h}{2}K_1)\\ K_3=f(t_i+\frac{h}{2},w_i+\frac{h}{2}K_2)\\ K_4=f(t_i+h,w_i+hK_3)\end{cases}

我们给出每步的求值次数和局部阶段误差的阶之间的关系:

Alt text

这说明了为什么人们更喜欢使用具有较小步长的小于 5 阶的 Runge-Kutta 方法。

因为 Runge-Kutta 方法是基于 Taylor 展开的,所以 y 必须足够平滑,才能获得更高阶方法的更高精度。通常情况下,人们更喜欢使用较小步长的低阶方法,而不是使用较大步长的高阶方法。

如果 yy 不够光滑,那么高阶的 Runge-Kutta 方法也不会有很好的效果,所以一般会用低阶的 Runge-Kutta 方法,但是步长会更小

5.6 多步法 | Multistep Methods

在一些网格点(mesh points)上使用 yyyy' 的线性组合来更好地近似 y(ti+1)y(t_{i+1})

求解初值问题

y=f(t,y),atb,y(a)=αy'=f(t,y),\quad a\leq t\leq b,\quad y(a)=\alpha

mm 步多步法(mm-step multistep method)的一般形式为

wi+1=am1wi+am2wi1+...+a0wi+1m+h[bmf(ti+1,wi+1)+bm1f(ti,wi)+...+b0f(ti+1m,wi+1m)]\begin{aligned} w_{i+1}=&{\color{red}{a_{m-1}}}w_i+{\color{red}{a_{m-2}}}w_{i-1}+...+{\color{red}{a_0}}w_{i+1-m}\\+&h[{\color{red}{b_m}}f(t_{i+1},w_{i+1})+{\color{red}{b_{m-1}}}f(t_i,w_i)+...+{\color{red}{b_0}}f(t_{i+1-m},w_{i+1-m})] \end{aligned}

其中 h=(ba)/Nh=(b-a)/N,给定 mm 个初始值 w0,w1,...,wm1w_0,w_1,...,w_{m-1}a0,a1,...,am1a_0,a_1,...,a_{m-1}b0,b1,...,bmb_0,b_1,...,b_m 是常数。

bm=0b_m=0 的方法称为显式(explicit);bm0b_m\neq 0 的方法称为隐式(implicit)

局部截断误差(local truncation error)为

τi+1(h)=yi+1wi+1h=yi+1am1yiam2yi1...a0yi+1mhbmf(ti+1,yi+1)bm1f(ti,yi)...b0f(ti+1m,yi+1m)\begin{aligned} \tau_{i+1}(h)&=\frac{y_{i+1}-w_{i+1}}{h}\\ &=\frac{y_{i+1}-{\color{red}{a_{m-1}}}y_i-{\color{red}{a_{m-2}}}y_{i-1}-...-{\color{red}{a_0}}y_{i+1-m}}{h}\\ &-{\color{red}{b_m}}f(t_{i+1},y_{i+1})-{\color{red}{b_{m-1}}}f(t_i,y_i)-...-{\color{red}{b_0}}f(t_{i+1-m},y_{i+1-m}) \end{aligned}

Adams-Bashforth 显式 m 步方法 | Adams-Bashforth explicit m-step technique

注意到

y(ti+1)=y(ti)+titi+1f(t,y(t))dty(t_{i+1})=y(t_i)+\int_{t_i}^{t_{i+1}}f(t,y(t))dt

为了推导 Adams-Bashforth 显式 m 步方法,我们通过(ti,f(ti,y(ti)))(t_i,f(t_i,y(t_i)))(ti1,f(ti1,y(ti1)))(t_{i-1},f(t_{i-1},y(t_{i-1})))(ti2,f(ti2,y(ti2)))(t_{i-2},f(t_{i-2},y(t_{i-2}))),...,(ti+1m,f(ti+1m,y(ti+1m)))(t_{i+1-m},f(t_{i+1-m},y(t_{i+1-m}))) 形成向后差分多项式 Pm1(t)P_{m-1}(t),然后用 Pm1(t)P_{m-1}(t) 来代替 f(t,y(t))f(t,y(t)),从而得到

f(t,y(t))=Pm1(t)+f(m)(ξi,y(ξi))m!(tti)(tti1)...(tti+1m)f(t,y(t))=P_{m-1}(t)+\frac{f^{(m)}(\xi_i,y(\xi_i))}{m!}(t-t_i)(t-t_{i-1})...(t-t_{i+1-m})

"向后差分多项式"

Pn(xs)=k=0n(1)k(sk)kf(xn)P_n(x_s)=\sum\limits_{k=0}^n(-1)^k\begin{pmatrix}-s\\k\end{pmatrix}\nabla^kf(x_n)

titi+1f(t,y(t))dt=titi+1Pm1(t)dt+titi+1Rm1(t)dt=h01Pm1(ti+sh)ds+h01Rm1(ti+sh)ds=hk=0m1kf(ti,y(ti))(1)k01(sk)ds+hm+1m!01f(m)(ξi,y(ξi))s(s+1)...(s+m1)ds\begin{aligned} \int_{t_i}^{t_{i+1}}f(t,y(t))dt&=\int_{t_i}^{t_{i+1}}P_{m-1}(t)dt+\int_{t_i}^{t_{i+1}}R_{m-1}(t)dt\\ &=h\int_{0}^{1}P_{m-1}(t_i+sh)ds+h\int_{0}^{1}R_{m-1}(t_i+sh)ds\\ &=h\sum\limits_{k=0}^{m-1}\nabla^kf(t_i,y(t_i))(-1)^k\int_{0}^{1}\begin{pmatrix}-s\\k\end{pmatrix}ds\\&+\frac{h^{m+1}}{m!}\int_{0}^{1}f^{(m)}(\xi_i,y(\xi_i))s(s+1)...(s+m-1)ds\\ \end{aligned}

其中 Rm1(t)R_{m-1}(t) 是余项,也就是截断误差。

我们有

wi+1=wi+h01Pm1(ti+sh)ds=wi+hk=0m1kf(ti,y(ti))(1)k01(sk)dstiti+1Rm1(t)dt=hm+1m!01f(m)(ξi,y(ξi))s(s+1)...(s+m1)ds=hm+1f(m)(μi,y(μi))m!01s(s+1)...(s+m1)ds=hm+1f(m)(μi,y(μi))(1)m01(sm)ds\begin{aligned} w_{i+1}&=w_i+h\int_{0}^{1}P_{m-1}(t_i+sh)ds\\ &=w_i+h\sum\limits_{k=0}^{m-1}\nabla^kf(t_i,y(t_i))(-1)^k\int_{0}^{1}\begin{pmatrix}-s\\k\end{pmatrix}ds\\ \int_{t_i}^{t_{i+1}}R_{m-1}(t)dt&=\frac{h^{m+1}}{m!}\int_{0}^{1}f^{(m)}(\xi_i,y(\xi_i))s(s+1)...(s+m-1)ds\\ &=\frac{h^{m+1}f^{(m)}(\mu_i,y(\mu_i))}{m!}\int_{0}^{1}s(s+1)...(s+m-1)ds\\ &={h^{m+1}f^{(m)}(\mu_i,y(\mu_i))}(-1)^m\int_{0}^{1}\begin{pmatrix}-s\\m\end{pmatrix}ds\\ \end{aligned}

局部截断误差

τi+1(h)=yi+1am1yiam2yi1...a0yi+1mhbmf(ti+1,yi+1)bm1f(ti,yi)...b0f(ti+1m,yi+1m)=1htiti+1Rm1(t)dt=hmf(m)(μi,y(μi))(1)m01(sm)ds\begin{aligned} \tau_{i+1}(h)&=\frac{y_{i+1}-{\color{red}{a_{m-1}}}y_i-{\color{red}{a_{m-2}}}y_{i-1}-...-{\color{red}{a_0}}y_{i+1-m}}{h}\\ &-{\color{red}{b_m}}f(t_{i+1},y_{i+1})-{\color{red}{b_{m-1}}}f(t_i,y_i)-...-{\color{red}{b_0}}f(t_{i+1-m},y_{i+1-m})\\ &=\frac{1}{h}\int_{t_i}^{t_{i+1}}R_{m-1}(t)dt\\ &={h^{m}f^{(m)}(\mu_i,y(\mu_i))}(-1)^m\int_{0}^{1}\begin{pmatrix}-s\\m\end{pmatrix}ds \end{aligned}

"(1)k01(sk)ds(-1)^k\int_{0}^{1}\begin{pmatrix}-s\\k\end{pmatrix}ds"

kk (1)k01(sk)ds(-1)^k\int_{0}^{1}\begin{pmatrix}-s\\k\end{pmatrix}ds
00 11
11 12\frac{1}{2}
22 512\frac{5}{12}
33 38\frac{3}{8}
44 251720\frac{251}{720}
55 95288\frac{95}{288}

"2步"

m=2m=2,我们有

wi+1=wi+h[0f(ti,wi)+121f(ti,wi)]=wi+h[32f(ti,wi)12f(ti1,wi1)]\begin{aligned} w_{i+1}&=w_i+h[\nabla^0f(t_i,w_i)+\frac12\nabla^1f(t_i,w_i)]\\ &=w_i+h[\frac32f(t_i,w_i)-\frac12f(t_{i-1},w_{i-1})]\\ \end{aligned}

因为 yi+1=yi+h[bmf(ti+1,wi+1)+bm1f(ti,wi)+...+b0f(ti+1m,wi+1m)]+titi+1Rm1(t)dty_{i+1}=y_i+h[{\color{red}{b_m}}f(t_{i+1},w_{i+1})+{\color{red}{b_{m-1}}}f(t_i,w_i)+...+{\color{red}{b_0}}f(t_{i+1-m},w_{i+1-m})]+\int_{t_i}^{t_{i+1}}R_{m-1}(t)dt,所以

其局部截断误差为

τi+1(h)=hmf(m)(μi,y(μi))(1)m01(sm)ds=512h2f(μi,y(μi))=512h2y(μi)\begin{aligned} \tau_{i+1}(h)&={h^{m}f^{(m)}(\mu_i,y(\mu_i))}(-1)^m\int_{0}^{1}\begin{pmatrix}-s\\m\end{pmatrix}ds\\ &=\frac{5}{12}h^2f''(\mu_i,y(\mu_i))\\ &=\frac{5}{12}h^2y'''(\mu_i) \end{aligned}

mm fif_i fi1f_{i-1} fi2f_{i-2} fi3f_{i-3}
11 11 - - -
22 32\frac{3}{2} 12-\frac{1}{2} - -
33 2312\frac{23}{12} 43-\frac{4}{3} 512\frac{5}{12} -
44 5524\frac{55}{24} 5924-\frac{59}{24} 3724\frac{37}{24} 38-\frac{3}{8}

查表可得,Adams-Bashforth 显式 4 步方法的为

wi+1=wi+h24(55fi59fi1+37fi29fi3)w_{i+1}=w_i+\frac{h}{24}(55f_i-59f_{i-1}+37f_{i-2}-9f_{i-3})

Adams-Moulton 隐式 m 步方法 | Adams-Moulton implicit m-step technique

同样的,我们采用向前差分多项式,可以得到 Adams-Moulton 隐式 m 步方法:

Alt text

Adams 预测-校正系统 | Adams predictor-corrector system

Adams 预测-校正系统是 Adams-Bashforth 显式 m 步方法和 Adams-Moulton 隐式 m 步方法的结合:

  1. 用 Runge-Kutta 法计算出 mm 个初始值 w0,w1,...,wm1w_0,w_1,...,w_{m-1} (如果初值的个数不够)
  2. 预测:用 Adams-Bashforth 显式 m 步方法计算出 wm,wm+1,...w_m,w_{m+1},... 直到 wN1w_{N-1}
  3. 校正:用 Adams-Moulton 隐式 m 步方法计算出 wm,wm+1,...w_m,w_{m+1},... 直到 wN1w_{N-1}

在这三步中使用的所有公式的局部截断误差的阶必须相同。

最常用的系统是以 4 阶 Adams-Bashforth 方法作为预测器,以 Adams-Moulton 方法的一次迭代作为校正器,其起始值来自 4 阶 Runge-Kutta 方法。

宏观角度:Taylor 展开

Alt text

通过对比系数,可以有一族解。

通过对这个解的再限制(添加两个条件),我们可以得到多种方法。

Alt text

5.9 高阶方程和微分方程组 | Higher-Order Equations and Systems of Differential Equations

微分方程组的矩阵形式

mm 阶微分方程组:

{u1(t)=f1(t,u1(t),u2(t),...,um(t))um(t)=fm(t,u1(t),u2(t),...,um(t))\begin{cases} u_1'(t)=f_1(t,u_1(t),u_2(t),...,u_m(t))\\ \vdots\\ u_m'(t)=f_m(t,u_1(t),u_2(t),...,u_m(t))\\ \end{cases}

给定 mm 个初始值 u1(a),u2(a),...,um(a)u_1(a),u_2(a),...,u_m(a),我们可以用 mm 步的 Runge-Kutta 法来求解。

用矩阵的形式可以记作

{y(t)=f(t,y(t))y(a)=α\begin{cases} \mathbf{y}'(t)=\mathbf{f}(t,\mathbf{y}(t))\\ \mathbf{y}(a)=\mathbf{\alpha}\\ \end{cases}

高阶微分方程的转化

Alt text

"例题"

Alt text

"modified Euler's method"

Alt text

Alt text

"第一次迭代:"

Alt text

"第二次迭代:"

Alt text

5.10 稳定性 | Stability

相容 | Consistency

Alt text

注意到这个定义是在局部上的定义

收敛 | Convergence

Alt text

这是对整体而言

稳定性 | Stability

除了这两个概念,我们还需要一个概念:稳定性。如果初始条件的小变化或扰动会导致后续近似值的相应小变化,则该方法被称为稳定

特征方程与稳定性

已知方程

w0=α,w1=α1,,wm1=αm1wi+1=am1wi+am2wi1++a0wi+1m+hF(ti,h,wi+1,wi,,wi+1m)\begin{aligned} w_0&=\alpha,w_1=\alpha_1,\cdots,w_{m-1}=\alpha_{m-1}\\ w_{i+1}&=a_{m-1}w_i+a_{m-2}w_{i-1}+\cdots+a_0w_{i+1-m}+hF(t_i,h,w_{i+1},w_i,\cdots,w_{i+1-m}) \end{aligned}

我们给出一个相关的多项式,称为特征多项式(characteristic polynomial):

P(λ)=λmam1λm1am2λm2a0P(\lambda)=\lambda^m-a_{m-1}\lambda^{m-1}-a_{m-2}\lambda^{m-2}-\cdots-a_0

  • 如果 P(λ)P(\lambda) 的所有根的模都小于等于 1,且取等时为单根,则称该方法满足根条件(root condition)
    • 如果有且仅有一个根的模等于 1,则该方法是强稳定(strongly stable)的
    • 如果有多个根的模等于 1,则该方法是弱稳定(weakly stable)的
  • 如果方法不满足根条件,则该方法是不稳定的

测试方程 | Test Equation

我们将一个特定的方法应用于一个简单的测试方程:

y=λy,y(0)=α,where Re(λ)<0y’ = \lambda y, y(0) = \alpha, \text{where } Re(\lambda) < 0

假设舍入误差只在初始点引入。如果这个初始误差会在某个步长 hh 下减小,那么这个方法就被称为绝对稳定(absolutely stable),此时 H=λhH = \lambda h。所有这样的 HH 的集合构成了绝对稳定域(region of absolute stability)。

Alt text

如果方法 A 的绝对稳定域比方法 B 的大,那么方法 A 就比方法 B 更稳定

显式 Euler 法的稳定性

在显式 Euler 法中,我们有

wi+1=wi+hf(ti,wi)w_{i+1}=w_i+hf(t_i,w_i)

在这个测试方程中,我们有

wi+1=(1+λh)wi=(1+H)wi=(1+H)i+1αw_{i+1}=(1+\lambda h)w_i=(1+H)w_i=(1+H)^{i+1}\alpha

我们给初值加上一个扰动项 ϵ\epsilon,即 α=α+ϵ\alpha^*=\alpha+\epsilon,则

wi+1=(1+H)i+1(α+ϵ)w_{i+1}^*=(1+H)^{i+1}(\alpha+\epsilon)

所以

ϵi+1=(1+H)i+1ϵ\epsilon_{i+1}=(1+H)^{i+1}\epsilon

要确保稳定性,我们需要 (1+H)i+1<1|(1+H)^{i+1}|<1,即 1+H<1|1+H|<1

隐式 Euler 法的稳定性

在隐式 Euler 法中,我们有

wi+1=wi+hf(ti+1,wi+1)w_{i+1}=w_i+hf(t_{i+1},w_{i+1})

在这个测试方程中,我们有

wi+1=wi+hλwi+1w_{i+1}=w_i+h\lambda w_{i+1}

所以

wi+1=11hλwi=11Hwi=(11H)i+1αw_{i+1}=\frac{1}{1-h\lambda}w_i=\frac{1}{1-H}w_i=(\frac{1}{1-H})^{i+1}\alpha

我们给初值加上一个扰动项 ϵ\epsilon,即 α=α+ϵ\alpha^*=\alpha+\epsilon,则

wi+1=(11H)i+1(α+ϵ)w_{i+1}^*=(\frac{1}{1-H})^{i+1}(\alpha+\epsilon)

所以

ϵi+1=(11H)i+1ϵ\epsilon_{i+1}=(\frac{1}{1-H})^{i+1}\epsilon

要确保稳定性,我们需要 (11H)i+1<1|(\frac{1}{1-H})^{i+1}|<1,即 11H<1|\frac{1}{1-H}|<1

二阶 隐式 Runge-Kutta 法的稳定性

在二阶 隐式 Runge-Kutta 法中,我们有

{wi+1=wi+hK1K1=f(ti+12h,wi+12hK1)\begin{cases}w_{i+1}&=&w_i+hK_1\\K_1&=&f(t_i+\frac12h,w_i+\frac12hK_1)\end{cases}

在这个测试方程中,我们有

K1=λ(wi+12hK1)K1=λwi112hλwi+1=wi+hK1=wi+hλwi112hλ=wi+Hwi112H=2+H2Hwi=(2+H2H)i+1α\begin{aligned} K_1&=\lambda (w_i+\frac12hK_1)\Rightarrow K_1=\frac{\lambda w_i}{1-\frac12h\lambda}\\ w_{i+1}&=w_i+hK_1\\ &=w_i+h\frac{\lambda w_i}{1-\frac12h\lambda}\\ &=w_i+\frac{H w_i}{1-\frac12H}\\ &=\frac{2+H}{2-H}w_i\\ &=(\frac{2+H}{2-H})^{i+1}\alpha\\ \end{aligned}

我们给初值加上一个扰动项 ϵ\epsilon,即 α=α+ϵ\alpha^*=\alpha+\epsilon,则

wi+1=(2+H2H)i+1(α+ϵ)w_{i+1}^*=(\frac{2+H}{2-H})^{i+1}(\alpha+\epsilon)

所以

ϵi+1=(2+H2H)i+1ϵ\epsilon_{i+1}=(\frac{2+H}{2-H})^{i+1}\epsilon

要确保稳定性,我们需要 2+H2H<1|\frac{2+H}{2-H}|<1

四阶 显式 Runge-Kutta 法的稳定性

在四阶 显式 Runge-Kutta 法中,我们有

{wi+1=wi+h6(K1+2K2+2K3+K4)K1=f(ti,wi)K2=f(ti+12h,wi+12hK1)K3=f(ti+12h,wi+12hK2)K4=f(ti+h,wi+hK3)\begin{cases}w_{i+1}&=&w_i+\frac{h}{6}(K_1+2K_2+2K_3+K_4)\\ K_1&=&f(t_i,w_i)\\ K_2&=&f(t_i+\frac12h,w_i+\frac12hK_1)\\ K_3&=&f(t_i+\frac12h,w_i+\frac12hK_2)\\ K_4&=&f(t_i+h,w_i+hK_3)\\ \end{cases}

在这个测试方程中,我们有

K1=λwiK2=λ(wi+12hK1)=λwi(1+12H)K3=λ(wi+12hK2)=λwi(1+12H+14H2)K4=λ(wi+hK3)=λwi(1+H+12H2+14H3)wi+1=wi+h6(K1+2K2+2K3+K4)=wi+h6λwi(1+2(1+12H)+2(1+12H+14H2)+(1+H+12H2+14H3))=wi+H6wi(6+3H+H2+14H3)=wi(1+H+12H2+16H3+124H4)=α(1+H+12H2+16H3+124H4)i+1\begin{aligned} K_1&=\lambda w_i\\ K_2&=\lambda (w_i+\frac12hK_1)=\lambda w_i(1+\frac12H )\\ K_3&=\lambda (w_i+\frac12hK_2)=\lambda w_i(1+\frac12H +\frac14H^2 )\\ K_4&=\lambda (w_i+hK_3)=\lambda w_i(1+H +\frac12H^2 +\frac14H^3 )\\ w_{i+1}&=w_i+\frac{h}{6}(K_1+2K_2+2K_3+K_4)\\ &=w_i+\frac{h}{6} \lambda w_i(1+2(1+\frac12H )+2(1+\frac12H +\frac14H^2 )+(1+H +\frac12H^2 +\frac14H^3 ))\\ &=w_i+\frac{H}{6} w_i(6+3H+H^2+\frac{1}{4}H^3)\\ &=w_i(1+H+\frac{1}{2}H^2+\frac{1}{6}H^3+\frac{1}{24}H^4)\\ &=\alpha(1+H+\frac{1}{2}H^2+\frac{1}{6}H^3+\frac{1}{24}H^4)^{i+1}\\ \end{aligned}

我们给初值加上一个扰动项 ϵ\epsilon,即 α=α+ϵ\alpha^*=\alpha+\epsilon,则

wi+1=α(1+H+12H2+16H3+124H4)i+1w_{i+1}^*=\alpha^*(1+H+\frac{1}{2}H^2+\frac{1}{6}H^3+\frac{1}{24}H^4)^{i+1}

所以

ϵi+1=(1+H+12H2+16H3+124H4)i+1ϵ\epsilon_{i+1}=(1+H+\frac{1}{2}H^2+\frac{1}{6}H^3+\frac{1}{24}H^4)^{i+1}\epsilon

要确保稳定性,我们需要 1+H+12H2+16H3+124H4<1|1+H+\frac{1}{2}H^2+\frac{1}{6}H^3+\frac{1}{24}H^4|<1

微分方程组

考虑一个微分方程组

{u1=9u1+24u2+5cost13sint,u1(0)=43u2=24u151u29cost+13sint,u2(0)=23\begin{cases}u_1^{\prime}&=9u_1+24u_2+5\cos t-\frac13\sin t,&u_1(0)&=\frac43\\\\u_2^{\prime}&=-24u_1-51u_2-9\cos t+\frac13\sin t,&u_2(0)&=\frac23\end{cases}

应用欧拉显式法,我们该如何选择步长 hh 才能保证稳定性?

我们将条件改写为矩阵形式:

(u1u2)=(9242451)(u1u2)+(5cost13sint9cost+13sint)\begin{pmatrix}u_1^{\prime}\\u_2^{\prime}\end{pmatrix}=\begin{pmatrix}9&24\\-24&-51\end{pmatrix}\begin{pmatrix}u_1\\u_2\end{pmatrix}+\begin{pmatrix}5\cos t-\frac13\sin t\\-9\cos t+\frac13\sin t\end{pmatrix}

应用欧拉显式法,我们有

(u1i+1u2i+1)=(u1iu2i)+h(9242451)(u1iu2i)+h(5costi13sinti9costi+13sinti)\begin{pmatrix}u_1^{i+1}\\u_2^{i+1}\end{pmatrix}=\begin{pmatrix}u_1^i\\u_2^i\end{pmatrix}+h\begin{pmatrix}9&24\\-24&-51\end{pmatrix}\begin{pmatrix}u_1^i\\u_2^i\end{pmatrix}+h\begin{pmatrix}5\cos t_i-\frac13\sin t_i\\-9\cos t_i+\frac13\sin t_i\end{pmatrix}

A=(9242451)\mathbf{A}=\begin{pmatrix}9&24\\-24&-51\end{pmatrix},则

(u1i+1u2i+1)=(I+hA)(u1iu2i)+h(5costi13sinti9costi+13sinti)\begin{pmatrix}u_1^{i+1}\\u_2^{i+1}\end{pmatrix}=(\mathbf{I}+h\mathbf{A})\begin{pmatrix}u_1^i\\u_2^i\end{pmatrix}+h\begin{pmatrix}5\cos t_i-\frac13\sin t_i\\-9\cos t_i+\frac13\sin t_i\end{pmatrix}

我们给初值加上一个扰动项 ϵ0\epsilon_0μ0\mu_0,即 u0=u0+(ϵ0μ0)\mathbf{u}^*_0=\mathbf{u}_0+\begin{pmatrix}\epsilon_0\\\mu_0\end{pmatrix},则

(u1i+1u2i+1)=(I+hA)(u1iu2i)+h(5costi13sinti9costi+13sinti)\begin{pmatrix}u_1^{i+1*}\\u_2^{i+1*}\end{pmatrix}=(\mathbf{I}+h\mathbf{A})\begin{pmatrix}u_1^{i*}\\u_2^{i*}\end{pmatrix}+h\begin{pmatrix}5\cos t_i-\frac13\sin t_i\\-9\cos t_i+\frac13\sin t_i\end{pmatrix}

上面两个式子相减,我们有

(ϵi+1μi+1)=(I+hA)(ϵiμi)\begin{pmatrix}\epsilon_{i+1}\\\mu_{i+1}\end{pmatrix}=(\mathbf{I}+h\mathbf{A})\begin{pmatrix}\epsilon_i\\\mu_i\end{pmatrix}

所以

(ϵi+1μi+1)=(I+hA)i+1(ϵ0μ0)\begin{pmatrix}\epsilon_{i+1}\\\mu_{i+1}\end{pmatrix}=(\mathbf{I}+h\mathbf{A})^{i+1}\begin{pmatrix}\epsilon_0\\\mu_0\end{pmatrix}

要确保稳定性,我们需要 (I+hA)i+1<1|(\mathbf{I}+h\mathbf{A})^{i+1}|<1

也就是说,我们需要 1+hλ<12<hλ<0|1+h\lambda|<1\Leftrightarrow -2<h\lambda<0,其中 λ\lambdaA\mathbf{A} 的特征值。

我们求解 A\mathbf{A} 的特征值,得到 λ1=3\lambda_1=-3λ2=39\lambda_2=-39

所以,我们需要 2<hλ1<023>h>0-2<h\lambda_1<0\Leftrightarrow \frac23>h>02<hλ2<0239>h>0-2<h\lambda_2<0\Leftrightarrow \frac{2}{39}>h>0

所以,我们需要 0<h<2390<h<\frac{2}{39}

Chapter 6 解线性方程组的直接法 | Direct Methods for Solving Linear Systems

6.1 回代的Gauss消去法 | Gaussian elimination with backward substitution

算法内容

解方程组Ax=b\mathbf{A}\vec{x}=\vec{b},记A(1)=A=aij(1)\mathbf{A}^{(1)}=\mathbf{A}=a_{ij}^{(1)}b(1)=b=(b1(1)b2(1)bn(1))\vec{b}^{(1)}=\vec{b}=\begin{pmatrix}b_{1}^{(1)}\\b_{2}^{(1)}\\\vdots\\b_{n}^{(1)}\end{pmatrix}x(1)=x=(x1(1)x2(1)xn(1))\vec{x}^{(1)}=\vec{x}=\begin{pmatrix}x_{1}^{(1)}\\x_{2}^{(1)}\\\vdots\\x_{n}^{(1)}\end{pmatrix},则增广矩阵A~\tilde{\mathbf{A}}为:

A~=[a11(1)a12(1)a1n(1)b1(1)a21(1)a22(1)a2n(1)b2(1)an1(1)an2(1)ann(1)bn(1)]\tilde{\mathbf{A}}=\begin{bmatrix}a_{11}^{(1)}&a_{12}^{(1)}&\cdots&a_{1n}^{(1)}&b_{1}^{(1)}\\a_{21}^{(1)}&a_{22}^{(1)}&\cdots&a_{2n}^{(1)}&b_{2}^{(1)}\\\vdots&\vdots&\ddots&\vdots&\vdots\\a_{n1}^{(1)}&a_{n2}^{(1)}&\cdots&a_{nn}^{(1)}&b_{n}^{(1)}\end{bmatrix}

通过高斯消元我们可以得到新的增广矩阵A~(k)\tilde{\mathbf{A}}^{(k)}

A~(k)=[a11(k)a12(k)a1n(k)b1(k)0a22(k)a2n(k)b2(k)00ann(k)bn(k)]\tilde{\mathbf{A}}^{(k)}=\begin{bmatrix}a_{11}^{(k)}&a_{12}^{(k)}&\cdots&a_{1n}^{(k)}&b_{1}^{(k)}\\0&a_{22}^{(k)}&\cdots&a_{2n}^{(k)}&b_{2}^{(k)}\\\vdots&\vdots&\ddots&\vdots&\vdots\\0&0&\cdots&a_{nn}^{(k)}&b_{n}^{(k)}\end{bmatrix}

11次迭代过程为:如果 a11(1)0a_{11}^{(1)}\neq 0 ,记 mi1=ai1(1)/a11(1)m_{i1}= {a_{i1}^{(1)}}/{a_{11}^{(1)}} ,则

{aij(2)=aij(1)mi1a1j(1)bi(2)=bi(1)mi1b1(1)\begin{cases}a_{ij}^{(2)}=a_{ij}^{(1)}-m_{i1}a_{1j}^{(1)}\\b_{i}^{(2)}=b_{i}^{(1)}-m_{i1}b_{1}^{(1)}\end{cases}

tt次迭代过程为:如果att(t)0a_{tt}^{(t)}\neq 0,记 mit=ait(t)/att(t)m_{it}={a_{it}^{(t)}}/{a_{tt}^{(t)}} ,则

{aij(t+1)=aij(t)mitatj(t)bi(t+1)=bi(t)mitbt(t)\begin{cases}a_{ij}^{(t+1)}=a_{ij}^{(t)}-m_{it}a_{tj}^{(t)}\\b_{i}^{(t+1)}=b_{i}^{(t)}-m_{it}b_{t}^{(t)}\end{cases}

如果att(t)=0a_{tt}^{(t)}=0,则交换第tt行与第kk行,使得akk(k)0a_{kk}^{(k)}\neq 0,然后再进行第kk次迭代。如果找不到akk(k)0a_{kk}^{(k)}\neq 0,则方程组没有唯一解,算法停止。

写成伪代码如下:

Alt text

计算次数

由于在计算机上完成乘法或除法所需的时间大致相同,且大于完成加法或减法所需的时间,所以我们分开考虑乘法和除法的计算次数。

对上述算法进行分析,可以得到计算次数如下:

消元过程

在每个 ii 中,

所以,消元过程共需要完成 i=1n1((ni)+(ni)(ni+1))\sum\limits_{i=1}^{n-1}((n-i)+(n-i)(n-i+1)) 次乘法/除法和 i=1n1(ni)(ni+1)\sum\limits_{i=1}^{n-1}(n-i)(n-i+1) 次加法/减法。

即消元过程共需要完成 13n3+12n256n\frac{1}{3}n^3+\frac{1}{2}n^2-\frac{5}{6}n 次乘法/除法和 13n313n\frac{1}{3}n^3-\frac{1}{3}n 次加法/减法。

回代过程

Step 8 需要完成 11 次除法。

在每个 ii 中,

所以,回代过程共需要完成 1+i=1n1((ni)+1)1+\sum\limits_{i=1}^{n-1}((n-i)+1) 次乘法/除法和 i=1n1(ni)\sum\limits_{i=1}^{n-1}(n-i) 次加法/减法。

即回代过程共需要完成 12n2+12n\frac{1}{2}n^2+\frac{1}{2}n 次乘法/除法和 12n212n\frac{1}{2}n^2-\frac{1}{2}n 次加法/减法。

总计算次数

乘法/除法:

(13n3+12n256n)+(12n2+12n)=13n3+n213n(\frac{1}{3}n^3+\frac{1}{2}n^2-\frac{5}{6}n)+(\frac{1}{2}n^2+\frac{1}{2}n)=\frac{1}{3}n^3+n^2-\frac{1}{3}n

加法/减法:

(13n313n)+(12n212n)=13n3+12n256n(\frac{1}{3}n^3-\frac{1}{3}n)+(\frac{1}{2}n^2-\frac{1}{2}n)=\frac{1}{3}n^3+\frac{1}{2}n^2-\frac{5}{6}n

从这里我们可以得知,高斯消元法的算法复杂度为O(N3)O(N^3)

6.2 选主元策略 | Pivoting Strategies

在上个算法中,我们观察到,如果与ajk(k)a_{jk}^{(k)}相比,akk(k)|a_{kk}^{(k)}|很小,那么乘数mik(k)=aik(k)akk(k)m_{ik}^{(k)}=\frac{a_{ik}^{(k)}}{a_{kk}^{(k)}}就会很大,这样就会导致误差的积累。而且在代换时,xk(k)x_{k}^{(k)}的值也会很大,这样就会导致误差的积累。所以我们需要选取一个合适的主元,使得误差的积累最小。

部分主元选取策略 | Partial Pivoting

我们考虑选择一个比较大的元素作为主元,这样就可以减小误差的积累。

所以我们可以在每次迭代时,从第kk行开始,选取该列中绝对值最大的元素作为主元,然后再进行消元。

"伪代码如下:"

Alt text

Alt text

比例因子选取策略 | Scaling Partial Pivoting

这个方法通过比较"每一行的元素都除以该行的最大元素的绝对值",然后通过这个结果进行部分主元选取策略,再对原方程组部分进行行交换,从而选取主元。

这里的比例因子就是每一行的最大元素的绝对值,即

si=max1jnaijs_{i}=\max_{1\leq j\leq n}|a_{ij}|

比例因子只在初始过程中计算一次,然后在每次迭代过程中,比例因子也需要参与交换。

"伪代码与部分主元策略的差别如下:"

Alt text

Alt text

全主元选取策略 | Complete Pivoting

上个算法中,比例因子只在初始过程中计算一次。如果考虑到过程被修改,使得每次作行变换的决定时,要确定新的比例因子,那这种方法就是全主元选取策略(Complete Pivoting)。

6.5 矩阵分解 | Matrix Factorization

LU分解 | LU Factorization

假设Gauss消去法在此次解方程后没有进行行交换,Gauss消去法的第一步是对j=2,3,,nj=2,3,\cdots,n行进行计算:

(Ejmj1E1)Ej,mj1=aj1(1)a11(1)(E_j-m_{j1}E_1)\rightarrow E_j,\quad m_{j1}=\frac{a_{j1}^{(1)}}{a_{11}^{(1)}}

那我们可以把这个过程写成矩阵的形式:

[100m2110m3100mn101][a11(1)a12(1)a1n(1)a21(1)a22(1)a2n(1)an1(1)an2(1)ann(1)]=[a11(1)a12(1)a1n(1)0a22(2)a2n(2)0a32(2)a3n(2)0an2(2)ann(2)]\begin{bmatrix}1&0&\cdots&0\\-m_{21}&1&\cdots&0\\-m_{31}&0&\cdots&0\\\vdots&\vdots&\ddots&\vdots\\-m_{n1}&0&\cdots&1\end{bmatrix}\begin{bmatrix}a_{11}^{(1)}&a_{12}^{(1)}&\cdots&a_{1n}^{(1)}\\a_{21}^{(1)}&a_{22}^{(1)}&\cdots&a_{2n}^{(1)}\\\vdots&\vdots&\ddots&\vdots\\a_{n1}^{(1)}&a_{n2}^{(1)}&\cdots&a_{nn}^{(1)}\end{bmatrix}=\begin{bmatrix}a_{11}^{(1)}&a_{12}^{(1)}&\cdots&a_{1n}^{(1)}\\0&a_{22}^{(2)}&\cdots&a_{2n}^{(2)}\\0&a_{32}^{(2)}&\cdots&a_{3n}^{(2)}\\\vdots&\vdots&\ddots&\vdots\\0&a_{n2}^{(2)}&\cdots&a_{nn}^{(2)}\end{bmatrix}

记最左边的矩阵为M(1)\mathbf{M}^{(1)},中间的矩阵为A(1)\mathbf{A}^{(1)},右边的矩阵为A(2)\mathbf{A}^{(2)},则有M(1)A(1)=A(2)\mathbf{M}^{(1)}\mathbf{A}^{(1)}=\mathbf{A}^{(2)}

这里的M(1)\mathbf{M}^{(1)}称作第一Gauss交换矩阵(first Gauss transformation matrix)。

b(2)\mathbf{b}^{(2)}表示b(1)\mathbf{b^{(1)}}经过第一次Gauss消去法后的结果,则有A(2)x=M(1)A(1)x=M(1)b(1)=b(2)\mathbf{A}^{(2)}\mathbf{x}=\mathbf{M}^{(1)}\mathbf{A}^{(1)}\mathbf{x}=\mathbf{M}^{(1)}\mathbf{b}^{(1)}=\mathbf{b}^{(2)}

一般的,如果A(k)x=b(k)\mathbf{A}^{(k)}\mathbf{x}=\mathbf{b}^{(k)}已经构建,则由第kk个Gauss变换矩阵:

M(k)=[100010001000mk+1,k100mk+2,k000mn,k01]\mathbf{M}^{(k)}= \begin{bmatrix} 1&0&\cdots&\cdots&\cdots&\cdots&\cdots&0\\ 0&1&0&\cdots&\cdots&\cdots&\cdots&0\\ \vdots&\vdots&\ddots&\ddots&\cdots&\cdots&\cdots&\vdots\\ 0&\cdots&\cdots&1&0&\cdots&\cdots&0\\ 0&\cdots&\cdots&-m_{k+1,k}&1&\cdots&\cdots&0\\ 0&\cdots&\cdots&-m_{k+2,k}&0&\ddots&\cdots&0\\ \vdots&\vdots&\vdots&\vdots&\vdots&\ddots&\ddots&\vdots\\ 0&\cdots&\cdots&-m_{n,k}&0&\cdots&\cdots&1 \end{bmatrix}

则有A(k+1)x=M(k)A(k)x=M(k)b(k)=b(k+1)\mathbf{A}^{(k+1)}\mathbf{x}=\mathbf{M}^{(k)}\mathbf{A}^{(k)}\mathbf{x}=\mathbf{M}^{(k)}\mathbf{b}^{(k)}=\mathbf{b}^{(k+1)}

这个过程结束在第A(n)x=b(n)\mathbf{A}^{(n)}\mathbf{x}=\mathbf{b}^{(n)},这里的A(n)=M(n1)A(n2)==M(n1)M(n2)M(1)A(1)\mathbf{A}^{(n)}=\mathbf{M}^{(n-1)}\mathbf{A}^{(n-2)}=\cdots=\mathbf{M}^{(n-1)}\mathbf{M}^{(n-2)}\cdots\mathbf{M}^{(1)}\mathbf{A}^{(1)}。由高斯消元法知道,A(n)\mathbf{A}^{(n)}是一个上三角矩阵。

此过程就形成了A=LU\mathbf{A}=\mathbf{L}\mathbf{U}的分解中的U\mathbf{U}部分,而L\mathbf{L}部分就是上文A\mathbf{A}左侧矩阵的逆矩阵,即(M(n1)M(n2)M(1))1=M(1)1M(2)1M(n1)1\mathbf{M}^{(n-1)}\mathbf{M}^{(n-2)}\cdots\mathbf{M}^{(1)})^{-1}=\mathbf{M}^{(1)^{-1}}\mathbf{M}^{(2)^{-1}}\cdots\mathbf{M}^{(n-1)^{-1}}

因为M(k)\mathbf{M}^{(k)}的逆矩阵就是把对角线下方的元素取反,所以L\mathbf{L}的元素为:

L(k)=(M(k))1=[100010001000mk+1,k100mk+2,k000mn,k01]\mathbf{L}^{(k)}=(\mathbf{M}^{(k)})^{-1}=\begin{bmatrix}1&0&\cdots&\cdots&\cdots&\cdots&\cdots&0\\0&1&0&\cdots&\cdots&\cdots&\cdots&0\\\vdots&\vdots&\ddots&\ddots&\cdots&\cdots&\cdots&\vdots\\0&\cdots&\cdots&1&0&\cdots&\cdots&0\\0&\cdots&\cdots&m_{k+1,k}&1&\cdots&\cdots&0\\0&\cdots&\cdots&m_{k+2,k}&0&\ddots&\cdots&0\\\vdots&\vdots&\vdots&\vdots&\vdots&\ddots&\ddots&\vdots\\0&\cdots&\cdots&m_{n,k}&0&\cdots&\cdots&1\end{bmatrix}

所以

L=L(1)L(2)L(n1)=[100m21100m31m320mn1mn2mn,n11]\mathbf{L}=\mathbf{L}^{(1)}\mathbf{L}^{(2)}\cdots\mathbf{L}^{(n-1)}=\begin{bmatrix}1&0&\cdots&\cdots&0\\m_{21}&1&0&\cdots&0\\m_{31}&m_{32}&\ddots&\ddots&\vdots\\\vdots&\vdots&\ddots&\ddots&0\\m_{n1}&m_{n2}&\cdots&m_{n,n-1}&1\end{bmatrix}

由此我们可以得到:

如果Gauss消去法在线性方程组Ax=b\mathbf{A}\vec{x}=\vec{b}中没有进行行交换,则A=LU\mathbf{A}=\mathbf{L}\mathbf{U}
其中

L=L(1)L(2)L(n1)=[100m21100m31m320mn1mn2mn,n11]\mathbf{L}=\mathbf{L}^{(1)}\mathbf{L}^{(2)}\cdots\mathbf{L}^{(n-1)}=\begin{bmatrix}1&0&\cdots&\cdots&0\\m_{21}&1&0&\cdots&0\\m_{31}&m_{32}&\ddots&\ddots&\vdots\\\vdots&\vdots&\ddots&\ddots&0\\m_{n1}&m_{n2}&\cdots&m_{n,n-1}&1\end{bmatrix}

U=A(n)=[a11(1)a12(1)a1n(1)0a22(2)a2n(2)00a3n(3)00ann(n)]\mathbf{U}=\mathbf{A}^{(n)}=\begin{bmatrix}a_{11}^{(1)}&a_{12}^{(1)}&\cdots&a_{1n}^{(1)}\\0&a_{22}^{(2)}&\cdots&a_{2n}^{(2)}\\0&0&\cdots&a_{3n}^{(3)}\\\vdots&\vdots&\ddots&\vdots\\0&0&\cdots&a_{nn}^{(n)}\end{bmatrix}

如果LL是单位下三角矩阵,则这个分解是唯一的。

用反证法。

如果A=L1U1=L2U2\mathbf{A}=\mathbf{L}_1\mathbf{U}_1=\mathbf{L}_2\mathbf{U}_2,其中L1\mathbf{L}_1L2\mathbf{L}_2是单位下三角矩阵,U1\mathbf{U}_1U2\mathbf{U}_2是上三角矩阵。则有

U1U21=L11L2\mathbf{U_1}\mathbf{U_2}^{-1}=\mathbf{L_1}^{-1}\mathbf{L_2}

因为上三角阵的逆依然是上三角阵,下三角阵同理。所以等式左右分别为上三角阵和下三角阵。又因为L11L2\mathbf{L_1}^{-1}\mathbf{L_2}的对角线上的元素均为11,所以两式相等当且仅当

U1U21=L11L2=I\mathbf{U_1}\mathbf{U_2}^{-1}=\mathbf{L_1}^{-1}\mathbf{L_2}=\mathbf{I}

U1=U2\mathbf{U_1}=\mathbf{U_2}L1=L2\mathbf{L_1}=\mathbf{L_2}

所以这个分解是唯一的。

伪代码

先进行LU分解。

Alt text

Alt text

解第一个方程Ly=b\mathbf{L}\vec{y}=\vec{b}

Alt text

解第二个方程Ux=y\mathbf{U}\vec{x}=\vec{y}

Alt text

6.6 特殊类型的矩阵 | Special Types of Matrices

严格对角占优矩阵 | Strictly Diagonally Dominant Matrices

如果对矩阵A\mathbf{A}的每一行,对角线上的元素的绝对值大于该行上其他元素的绝对值之和,则称A\mathbf{A}为严格对角占优矩阵。

定理:严格对角占优矩阵是非奇异的。而且,在此情况下,Gauss消去法可用在形如Ax=b\mathbf{A}\vec{x}=\vec{b}的方程组中以得到唯一解,而且不需要进行或列交换,并且对于舍入误差的增长而言计算是稳定的。

正定矩阵 | Positive Definite Matrices

本书中的正定矩阵是指对称正定矩阵,与其他书中的定义不同。

一个矩阵A\mathbf{A}是正定的,如果它是对称的,并且对于所有非零向量x\vec{x},都有xTAx>0\vec{x}^T\mathbf{A}\vec{x}>0

"定理"

如果A\mathbf{A}n×nn\times n的正定矩阵,则

a. A\mathbf{A}是非奇异的。

b. aii>0a_{ii}>0i=1,2,,ni=1,2,\cdots,n

c. max1k,jnakj<max1inaii\max\limits_{1\leq k,j\leq n}|a_{kj}|<\max\limits_{1\leq i\leq n}|a_{ii}|,其中 kjk\neq j

d. (aij)2<aiiajj(a_{ij})^2<a_{ii}a_{jj}iji\neq j

重要结论:如果A\mathbf{A}是正定的,则A\mathbf{A}的所有主子式都是正的。

A=LDLT\mathbf{A}=\mathbf{L}\mathbf{D}\mathbf{L}^T分解

我们可以把A=LU\mathbf{A}=\mathbf{L}\mathbf{U}中的U\mathbf{U}进一步分解为对角矩阵D\mathbf{D}和单位上三角矩阵U~\widetilde{\mathbf{U}},如下图所示:

Alt text

我们知道,A\mathbf{A}是对称的,所以A=AT\mathbf{A}=\mathbf{A}^T,即LU=LDU~=U~TDLT\mathbf{L}\mathbf{U}=\mathbf{L}\mathbf{D}\widetilde{\mathbf{U}}=\widetilde{\mathbf{U}}^T\mathbf{D}\mathbf{L}^T,所以可以有L=U~T\mathbf{L}=\widetilde{\mathbf{U}}^T,所以A=LDLT\mathbf{A}=\mathbf{L}\mathbf{D}\mathbf{L}^T。其中L\mathbf{L}是一个主对角线为1的下三角矩阵,D\mathbf{D}是对角线元素为正值的对角矩阵。

伪代码如下:

Alt text

Cholesky分解

Alt text

L~=LD12\widetilde{\mathbf{L}}=\mathbf{L}\mathbf{D}^{\frac{1}{2}},则有A=L~L~T\mathbf{A}=\widetilde{\mathbf{L}}\widetilde{\mathbf{L}}^T。其中L~\widetilde{\mathbf{L}}是一个具有非零对角线元素的下三角矩阵。

伪代码如下:

Alt text

Alt text

三对角矩阵 | Tridiagonal Matrices

三对角矩阵是指除了对角线和对角线上方和下方的第一条对角线外,其他元素均为0的矩阵,形式如下:

[a11a1200a21a22a23000a32a33a340an1,n00an,n1ann]\begin{bmatrix}a_{11}&a_{12}&0&\cdots&\cdots&0\\a_{21}&a_{22}&a_{23}&0&\cdots&0\\0&a_{32}&a_{33}&a_{34}&\cdots&0\\\vdots&\ddots&\ddots&\ddots&\ddots&\vdots\\\vdots&\cdots&\ddots&\ddots&\ddots&a_{n-1,n}\\0&\cdots&\cdots&0&a_{n,n-1}&a_{nn}\end{bmatrix}

定理:假设A\mathbf{A}是三对角矩阵,对每个i=2,3,,n1i=2,3,\cdots,n-1,有ai,i1ai,i+10a_{i,i-1}a_{i,i+1}\neq 0,如果a11>a12|a_{11}|>|a_{12}|aii>ai,i1+ai,i+1|a_{ii}|>|a_{i,i-1}|+|a_{i,i+1}|ann>an,n1|a_{nn}|>|a_{n,n-1}|,则A\mathbf{A}是非奇异的,且在Crout分解中,liil_{ii}的值都是非零的。

Crout分解

Crout分解是LU分解的一种特殊情况,我们可以求出具有形式

L=[l11000l21l22000l32l33000ln,n1lnn],U=[1u120001u23000100001]\mathbf{L}=\begin{bmatrix}l_{11}&0&0&\cdots&0\\l_{21}&l_{22}&0&\cdots&0\\0&l_{32}&l_{33}&\cdots&0\\\vdots&\ddots&\ddots&\ddots&\vdots\\0&\cdots&0&l_{n,n-1}&l_{nn}\end{bmatrix},\quad\mathbf{U}=\begin{bmatrix}1&u_{12}&0&\cdots&0\\0&1&u_{23}&\cdots&0\\0&0&1&\cdots&0\\\vdots&\ddots&\ddots&\ddots&\vdots\\0&\cdots&0&0&1\end{bmatrix}

的三对角矩阵A\mathbf{A}的分解。

通过矩阵乘法,我们可以得到:

{a11=l11ai,i1=li,i1ai,i=li,i1ui1,i+li,iai,i+1=li,iui,i+1\begin{cases}a_{11}=l_{11}\\a_{i,i-1}=l_{i,i-1}\\a_{i,i}=l_{i,i-1}u_{i-1,i}+l_{i,i}\\a_{i,i+1}=l_{i,i}u_{i,i+1}\end{cases}

在求解部分,我们可以先解Lz=b\mathbf{L}\mathbf{z}=\mathbf{b},然后再解Ux=z\mathbf{U}\mathbf{x}=\mathbf{z}。有伪代码:

Alt text

Chapter 7 矩阵代数中的迭代方法 | Iterative Techniques in Matrix Algebra

7.1 向量和矩阵范数 | Norms of Vectors and Matrices

向量范数

Rn\mathbf{R}^n上的向量范数是一个函数:RnR\|\cdot\|:\mathbf{R}^n\rightarrow\mathbf{R},满足下列条件:

  1. x0\|\mathbf{x}\|\geq 0,且x=0\|\mathbf{x}\|=0当且仅当x=0\mathbf{x}=\mathbf{0};(xRn\mathbf{x}\in\mathbf{R}^n)
  2. αx=αx\|\alpha\mathbf{x}\|=|\alpha|\|\mathbf{x}\|,其中αR,xRn\alpha\in\mathbf{R},\mathbf{x}\in\mathbf{R}^n
  3. x+yx+y\|\mathbf{x}+\mathbf{y}\|\leq\|\mathbf{x}\|+\|\mathbf{y}\|。(x,yRn\mathbf{x},\mathbf{y}\in\mathbf{R}^n)

常用的向量范数有:

  1. pp-范数:xp=(i=1nxip)1/p\|\mathbf{x}\|_p=(\sum\limits_{i=1}^n|x_i|^p)^{1/p},其中p1p\geq 1
  2. 无穷范数:x=max1inxi\|\mathbf{x}\|_\infty=\max_{1\leq i\leq n}|x_i|
向量的收敛性

Rn\mathbf{R}^n上的向量序列{x(k)}k=1\{\mathbf{x}^{(k)}\}_{k=1}^\infty按照向量范数\|\cdot\|收敛到向量x\mathbf{x},当且仅当对于任意的ϵ>0\epsilon>0,存在整数N(ϵ)N(\epsilon),使得当k>N(ϵ)k>N(\epsilon)时,有x(k)x<ϵ\|\mathbf{x}^{(k)}-\mathbf{x}\|<\epsilon

对于无穷范数,如果向量序列{x(k)}k=1\{\mathbf{x}^{(k)}\}_{k=1}^\infty按照无穷范数\|\cdot\|_\infty收敛到向量x\mathbf{x},当且仅当对于任意i=1,2,,ni=1,2,\cdots,n,有limkxi(k)=xi\lim_{k\rightarrow\infty}x_i^{(k)}=x_i

范数的等价性

等价性定义:Rn\mathbf{R}^n上的向量范数\|\cdot\|\|\cdot\|'等价,当且仅当存在正常数c1,c2c_1,c_2,使得对于任意的xRn\mathbf{x}\in\mathbf{R}^n,有c1xxc2xc_1\|\mathbf{x}\|\leq\|\mathbf{x}\|'\leq c_2\|\mathbf{x}\|

实际上,Rn\mathbf{R}^n上的所有范数都是等价的。也就是说,如果\|\cdot\|\|\cdot\|'Rn\mathbf{R}^n上的任意两个范数,并且{x(k)}k=1\{\mathbf{x}^{(k)}\}_{k=1}^\infty按照\|\cdot\|收敛到x\mathbf{x},那么{x(k)}k=1\{\mathbf{x}^{(k)}\}_{k=1}^\infty也按照\|\cdot\|'收敛到x\mathbf{x}

我们接下来证明对于范数2\|\cdot\|_2\|\cdot\|_\infty,它们是等价的。

"2\|\cdot\|_2\|\cdot\|_\infty的等价性"

x=max1inxi=xj\|\mathbf{x}\|_\infty=\max\limits_{1\leq i\leq n}|x_i|=|x_j|。那么

x2=i=1nxi2xj2=xj=x\|\mathbf{x}\|_2=\sqrt{\sum\limits_{i=1}^n|x_i|^2}\geq\sqrt{|x_j|^2}=|x_j|=\|\mathbf{x}\|_\infty

并且

x2=i=1nxi2i=1nxj2=nxj\|\mathbf{x}\|_2=\sqrt{\sum\limits_{i=1}^n|x_i|^2}\leq\sqrt{\sum\limits_{i=1}^n|x_j|^2}=\sqrt{n}|x_j|

所以xx2nx\|\mathbf{x}\|_\infty\leq\|\mathbf{x}\|_2\leq\sqrt{n}\|\mathbf{x}\|_\infty,即2\|\cdot\|_2\|\cdot\|_\infty是等价的。

矩阵范数

Rn×n\mathbf{R}^{n\times n}上的矩阵范数是一个函数:Rn×nR\|\cdot\|:\mathbf{R}^{n\times n}\rightarrow\mathbf{R},满足下列条件:

  1. A0\|\mathbf{A}\|\geq 0,且A=0\|\mathbf{A}\|=0当且仅当A\mathbf{A}是零矩阵;(ARn×n\mathbf{A}\in\mathbf{R}^{n\times n})
  2. αA=αA\|\alpha\mathbf{A}\|=|\alpha|\|\mathbf{A}\|,其中αR,ARn×n\alpha\in\mathbf{R},\mathbf{A}\in\mathbf{R}^{n\times n}
  3. A+BA+B\|\mathbf{A}+\mathbf{B}\|\leq\|\mathbf{A}\|+\|\mathbf{B}\|。(A,BRn×n\mathbf{A},\mathbf{B}\in\mathbf{R}^{n\times n})
  4. ABAB\|\mathbf{AB}\|\leq\|\mathbf{A}\|\|\mathbf{B}\|。(A,BRn×n\mathbf{A},\mathbf{B}\in\mathbf{R}^{n\times n})

矩阵A\mathbf{A}B\mathbf{B}之间的距离定义为AB\|\mathbf{A}-\mathbf{B}\|

Frobenius范数

ARn×n\mathbf{A}\in\mathbf{R}^{n\times n}的Frobenius范数是A\mathbf{A}的所有元素的平方和的平方根,即AF=i=1nj=1naij2\|\mathbf{A}\|_F=\sqrt{\sum\limits_{i=1}^n\sum\limits_{j=1}^na_{ij}^2}

自然矩阵范数 | Natural Matrix Norm

如果\|\cdot\|Rn×n\mathbf{R}^{n\times n}上的向量范数,那么A=maxx=1Ax\|\mathbf{A}\|=\max\limits_{\|\mathbf{x}\|=1}\|\mathbf{Ax}\|Rn×n\mathbf{R}^{n\times n}上的矩阵范数,称为与向量范数\|\cdot\|相关的自然矩阵范数。

A=maxx=1Ax\|\mathbf{A}\|=\max\limits_{\|\mathbf{x}\|=1}\|\mathbf{Ax}\|也可以写成A=maxx0Axx\|\mathbf{A}\|=\max\limits_{\mathbf{x}\neq\mathbf{0}}\frac{\|\mathbf{Ax}\|}{\|\mathbf{x}\|}

常用的自然矩阵范数(Natural Norm)有:

  1. pp-范数:Ap=maxx0Axpxp\|\mathbf{A}\|_p=\max\limits_{\mathbf{x}\neq\mathbf{0}}\frac{\|\mathbf{Ax}\|_p}{\|\mathbf{x}\|_p},其中p1p\geq 1
  2. 无穷范数:A=max1inj=1naij\|\mathbf{A}\|_\infty=\max\limits_{1\leq i\leq n}\sum\limits_{j=1}^n|a_{ij}|;也就是A\mathbf{A}的所有行和的最大值;
  3. 11-范数:A1=max1jni=1naij\|\mathbf{A}\|_1=\max\limits_{1\leq j\leq n}\sum\limits_{i=1}^n|a_{ij}|;也就是A\mathbf{A}的所有列和的最大值;
  4. 22-范数(spectral norm):A2=λmax(ATA)\|\mathbf{A}\|_2=\sqrt{\lambda_{\max}(\mathbf{A}^T\mathbf{A})},其中λmax(ATA)\lambda_{\max}(\mathbf{A}^T\mathbf{A})ATA\mathbf{A}^T\mathbf{A}的最大特征值。

"推论"

根据 pp-范数的定义,我们可以得到:对于任意非零向量 z\mathbf{z} 和矩阵 A\mathbf{A} 和任意一个自然范数 \|\cdot\|,有

AzzA\frac{\|\mathbf{Az}\|}{\|\mathbf{z}\|}\leq\|\mathbf{A}\|

AzAz\|\mathbf{A}\mathbf{z}\|\leq\|\mathbf{A}\|\|\mathbf{z}\|

7.2 特征值与特征向量 | Eigenvalues and Eigenvectors

谱半径 | Spectral Radius

ARn×n\mathbf{A}\in\mathbf{R}^{n\times n}的谱半径定义为ρ(A)=max1inλi\rho(\mathbf{A})=\max\limits_{1\leq i\leq n}|\lambda_i|,其中λi\lambda_iA\mathbf{A}的特征值,这里的特征值可以是复数。

ρ(A)=max{1,1+3i,13i}=max{1,2,2}=2\rho(\mathbf{A})=\max\{1,|1+\sqrt{3}i|,|1-\sqrt{3}i|\}=\max\{1,2,2\}=2

对于任意一个自然范数\|\cdot\|,有ρ(A)A\rho(\mathbf{A})\leq\|\mathbf{A}\|

矩阵的收敛性

当满足以下条件时,矩阵ARn×n\mathbf{A}\in\mathbf{R}^{n\times n}是收敛的:

limk(Ak)ij=0\lim_{k\rightarrow\infty}(\mathbf{A}^k)_{ij}=\mathbf{0}

以下命题是等价的:

  1. 矩阵ARn×n\mathbf{A}\in\mathbf{R}^{n\times n}是收敛的;
  2. ρ(A)<1\rho(\mathbf{A})<1
  3. 对于某些自然范数\|\cdot\|,有limkAk=0\lim\limits_{k\rightarrow\infty}\|\mathbf{A}^k\|=0
  4. 对于任意的自然范数\|\cdot\|,有limkAk=0\lim\limits_{k\rightarrow\infty}\|\mathbf{A}^k\|=0
  5. 对于每一个xRn\mathbf{x}\in\mathbf{R}^n,有limkAkx=0\lim\limits_{k\rightarrow\infty}\mathbf{A}^k\mathbf{x}=\mathbf{0}

7.3 求解线性方程组的迭代法 | Iterative Techniques for Solving Linear Systems

Jacobi迭代法

记矩阵ARn×n\mathbf{A}\in\mathbf{R}^{n\times n}的下三角部分为L-\mathbf{L},上三角部分为U-\mathbf{U},对角线部分为D\mathbf{D},即A=DLU\mathbf{A}=\mathbf{D}-\mathbf{L}-\mathbf{U}

所以方程组Ax=b\mathbf{Ax}=\mathbf{b}可以写成Dx=(L+U)x+b\mathbf{Dx}=(\mathbf{L}+\mathbf{U})\mathbf{x}+\mathbf{b}

x=D1(L+U)x+D1b\mathbf{x}=\mathbf{D}^{-1}(\mathbf{L}+\mathbf{U})\mathbf{x}+\mathbf{D}^{-1}\mathbf{b}

引入符号Tj=D1(L+U)\mathbf{T}_j=\mathbf{D}^{-1}(\mathbf{L}+\mathbf{U})cj=D1b\mathbf{c}_j=\mathbf{D}^{-1}\mathbf{b},则x=Tjx+cj\mathbf{x}=\mathbf{T}_j\mathbf{x}+\mathbf{c}_j

Jacobi迭代法的迭代格式为:

x(k+1)=Tjx(k)+cj\mathbf{x}^{(k+1)}=\mathbf{T}_j\mathbf{x}^{(k)}+\mathbf{c}_j

其伪代码为:

Alt text

Gauss-Seidel迭代法

我们可以改进Jacobi迭代法,使得每次迭代时,都使用已经算出来的x(k)\mathbf{x}^{(k)}的元素来计算x(k)\mathbf{x}^{(k)}之后的元素。如下图所示:

Alt text

也就是说,可以使用:

xi(k)=j=1i1aijxj(k)j=i+1naijxj(k1)+biaiix_i^{(k)}=\frac{-\sum\limits_{j=1}^{i-1}a_{ij}x_j^{(k)}-\sum\limits_{j=i+1}^na_{ij}x_j^{(k-1)}+b_i}{a_{ii}}

来计算xi(k)x_i^{(k)}

结合之前D\mathbf{D}L\mathbf{L}U\mathbf{U}的定义,我们可以得到:

(DL)x(k)=Ux(k1)+b(\mathbf{D}-\mathbf{L})\mathbf{x}^{(k)}=\mathbf{U}\mathbf{x}^{(k-1)}+\mathbf{b}

即:

x(k)=(DL)1Ux(k1)+(DL)1b\mathbf{x}^{(k)}=(\mathbf{D}-\mathbf{L})^{-1}\mathbf{U}\mathbf{x}^{(k-1)}+(\mathbf{D}-\mathbf{L})^{-1}\mathbf{b}

引入符号Tg=(DL)1U\mathbf{T}_{g}=(\mathbf{D}-\mathbf{L})^{-1}\mathbf{U}cg=(DL)1b\mathbf{c}_{g}=(\mathbf{D}-\mathbf{L})^{-1}\mathbf{b},则x=Tgx(k1)+cg\mathbf{x}=\mathbf{T}_{g}\mathbf{x}^{(k-1)}+\mathbf{c}_{g}

Gauss-Seidel迭代法的迭代格式为:

x(k+1)=Tgx(k)+cg\mathbf{x}^{(k+1)}=\mathbf{T}_{g}\mathbf{x}^{(k)}+\mathbf{c}_{g}

其伪代码为:

Alt text

Alt text

两种迭代法的收敛性

对于任意一个x(0)Rn\mathbf{x}^{(0)}\in\mathbf{R}^n,由

x(k+1)=Tx(k)+c\mathbf{x}^{(k+1)}=\mathbf{Tx}^{(k)}+\mathbf{c}

定义的序列 {x(k)}k=0\{\mathbf{x}^{(k)}\}_{k=0}^\infty 收敛到x=Tx+c\mathbf{x}=\mathbf{Tx}+\mathbf{c}的唯一解,当且仅当ρ(T)<1\rho(\mathbf{T})<1

"证明"

\Leftarrow

ρ(T)<1\rho(\mathbf{T})<1,那么

x(k)=Tx(k1)+c=T(Tx(k2)+c)+c=T2x(k2)+(T+I)c=Tkx(0)+(Tk1+Tk2++T+I)c\begin{aligned} \mathbf{x}^{(k)}=&\mathbf{Tx}^{(k-1)}+\mathbf{c}\\ =&\mathbf{T}(\mathbf{Tx}^{(k-2)}+\mathbf{c})+\mathbf{c}\\ =&\mathbf{T}^2\mathbf{x}^{(k-2)}+(\mathbf{T}+\mathbf{I})\mathbf{c}\\ \vdots&\\ =&\mathbf{T}^k\mathbf{x}^{(0)}+(\mathbf{T}^{k-1}+\mathbf{T}^{k-2}+\cdots+\mathbf{T}+\mathbf{I})\mathbf{c}\\ \end{aligned}

由于ρ(T)<1\rho(\mathbf{T})<1,所以矩阵T\mathbf{T}是收敛的,且limkTkx(0)=0\lim\limits_{k\rightarrow\infty}\mathbf{T}^k\mathbf{x}^{(0)}=\mathbf{0}

由于limk(Tk1+Tk2++T+I)c=(IT)1c\lim\limits_{k\rightarrow\infty}(\mathbf{T}^{k-1}+\mathbf{T}^{k-2}+\cdots+\mathbf{T}+\mathbf{I})\mathbf{c}=(\mathbf{I}-\mathbf{T})^{-1}\mathbf{c},所以limkx(k)=(IT)1c=x\lim\limits_{k\rightarrow\infty}\mathbf{x}^{(k)}=(\mathbf{I}-\mathbf{T})^{-1}\mathbf{c}=\mathbf{x},这里的x\mathbf{x}就是x=Tx+c\mathbf{x}=\mathbf{Tx}+\mathbf{c}的唯一解。

\Rightarrow

{x(k)}k=0\{\mathbf{x}^{(k)}\}_{k=0}^\infty收敛到x=Tx+c\mathbf{x}=\mathbf{Tx}+\mathbf{c}的唯一解,取任意一个向量yRn\mathbf{y}\in\mathbf{R}^n,定义x(0)=xy\mathbf{x}^{(0)}=\mathbf{x}-\mathbf{y},那么

xx(k)=(Tx+c)(Tx(k1)+c)=T(xx(k1))\mathbf{x}-\mathbf{x}^{(k)}=(\mathbf{Tx}+\mathbf{c})-(\mathbf{Tx}^{(k-1)}+\mathbf{c})=\mathbf{T}(\mathbf{x}-\mathbf{x}^{(k-1)})

所以

xx(k)=Tk(xx(0))=Tky\mathbf{x}-\mathbf{x}^{(k)}=\mathbf{T}^k(\mathbf{x}-\mathbf{x}^{(0)})=\mathbf{T}^k\mathbf{y}

因此

limkTky=limk(xx(k))=0\lim_{k\rightarrow\infty}\mathbf{T}^k\mathbf{y}=\lim_{k\rightarrow\infty}(\mathbf{x}-\mathbf{x}^{(k)})=\mathbf{0}

由于y\mathbf{y}是任意的,根据矩阵的收敛性,ρ(T)<1\rho(\mathbf{T})<1

误差界 | Error Bounds for Iterative Methods

如果对任意自然矩阵范数T<1\|\mathbf{T}\|<1c\mathbf{c}是给定的向量,那么由x(k+1)=Tx(k)+c\mathbf{x}^{(k+1)}=\mathbf{Tx}^{(k)}+\mathbf{c}定义的序列{x(k)}k=0\{\mathbf{x}^{(k)}\}_{k=0}^\infty收敛到x=Tx+c\mathbf{x}=\mathbf{Tx}+\mathbf{c}的唯一解,且有误差界:

  1. xx(k)Tkx(0)x\|\mathbf{x}-\mathbf{x}^{(k)}\|\leq\|\mathbf{T}\|^k\|\mathbf{x}^{(0)}-\mathbf{x}\|
  2. xx(k)Tk1Tx(1)x(0)\|\mathbf{x}-\mathbf{x}^{(k)}\|\leq\frac{\|\mathbf{T}\|^k}{1-\|\mathbf{T}\|}\|\mathbf{x}^{(1)}-\mathbf{x}^{(0)}\|

通过(2)式,我们可以根据我们要的精度算出迭代次数kk

"证明(1)式"

xx(k)=(Tx+c)(Tx(k1)+c)=T(xx(k1))\mathbf{x}-\mathbf{x}^{(k)}=(\mathbf{Tx}+\mathbf{c})-(\mathbf{Tx}^{(k-1)}+\mathbf{c})=\mathbf{T}(\mathbf{x}-\mathbf{x}^{(k-1)})

所以

xx(k)=T(xx(k1))Txx(k1)Tkxx(0)\begin{aligned} \|\mathbf{x}-\mathbf{x}^{(k)}\|&=\|\mathbf{T}(\mathbf{x}-\mathbf{x}^{(k-1)})\|\\ &\leq\|\mathbf{T}\|\|\mathbf{x}-\mathbf{x}^{(k-1)}\|\\ &\leq\|\mathbf{T}\|^k\|\mathbf{x}-\mathbf{x}^{(0)}\| \end{aligned}

x(k)xρ(T)kx(0)x\|\mathbf{x}^{(k)}-\mathbf{x}\|\approx\rho(T)^k\|\mathbf{x}^{(0)}-\mathbf{x}\|

"证明(2)式"

x(k+1)x(k)=T(x(k)x(k1))Tx(k)x(k1)Tkx(1)x(0)\begin{aligned} \|\mathbf{x}^{(k+1)}-\mathbf{x}^{(k)}\| &=\|\mathbf{T}(\mathbf{x}^{(k)}-\mathbf{x}^{(k-1)})\|\\ &\leq\|\mathbf{T}\|\|\mathbf{x}^{(k)}-\mathbf{x}^{(k-1)}\|\\ &\leq\|\mathbf{T}\|^k \|\mathbf{x}^{(1)}-\mathbf{x}^{(0)}\| \end{aligned}

所以对于任意的mnm\geq n,有

x(m)x(n)=x(m)x(m1)+x(m1)x(m2)++x(n+1)x(n)x(m)x(m1)+x(m1)x(m2)++x(n+1)x(n)Tm1x(1)x(0)+Tm2x(1)x(0)++Tnx(1)x(0)=x(1)x(0)k=nm1Tk\begin{aligned} \|\mathbf{x}^{(m)}-\mathbf{x}^{(n)}\| &=\|\mathbf{x}^{(m)}-\mathbf{x}^{(m-1)}+\mathbf{x}^{(m-1)}-\mathbf{x}^{(m-2)}+\cdots+\mathbf{x}^{(n+1)}-\mathbf{x}^{(n)}\|\\ &\leq\|\mathbf{x}^{(m)}-\mathbf{x}^{(m-1)}\|+\|\mathbf{x}^{(m-1)}-\mathbf{x}^{(m-2)}\|+\cdots+\|\mathbf{x}^{(n+1)}-\mathbf{x}^{(n)}\|\\ &\leq\|\mathbf{T}\|^{m-1}\|\mathbf{x}^{(1)}-\mathbf{x}^{(0)}\|+\|\mathbf{T}\|^{m-2}\|\mathbf{x}^{(1)}-\mathbf{x}^{(0)}\|+\cdots+\|\mathbf{T}\|^{n}\|\mathbf{x}^{(1)}-\mathbf{x}^{(0)}\|\\ &=\|\mathbf{x}^{(1)}-\mathbf{x}^{(0)}\|\sum\limits_{k=n}^{m-1}\|\mathbf{T}\|^k\\ \end{aligned}

mm\rightarrow\infty时,k=nm1Tk=Tn1T\sum\limits_{k=n}^{m-1}\|\mathbf{T}\|^k=\frac{\|\mathbf{T}\|^n}{1-\|\mathbf{T}\|},所以

xx(n)Tn1Tx(1)x(0)\|\mathbf{x}-\mathbf{x}^{(n)}\|\leq\frac{\|\mathbf{T}\|^n}{1-\|\mathbf{T}\|}\|\mathbf{x}^{(1)}-\mathbf{x}^{(0)}\|

对于严格对角占优矩阵

如果A\mathbf{A}是严格对角占优的,那么Jacobi迭代法和Gauss-Seidel迭代法都是收敛的。

证明其不存在大于1的特征值

松弛法 | Relaxation Methods

假设x~Rn\tilde{\mathbf{x}}\in R^nAx=b\mathbf{Ax}=\mathbf{b}的一个近似解,那么相对于该方程组的剩余向量(residual vector)为r=bAx~\mathbf{r}=\mathbf{b}-\mathbf{A}\tilde{\mathbf{x}}

我们从剩余向量的视角来看Gauss-Seidel迭代法。

xi(k)=j=1i1aijxj(k)j=i+1naijxj(k1)+biaii=xi(k1)+1aii(bij=1i1aijxj(k)j=inaijxj(k1))=xi(k1)+ri(k)aii\begin{aligned} x_i^{(k)}&=\frac{-\sum\limits_{j=1}^{i-1}a_{ij}x_j^{(k)}-\sum\limits_{j=i+1}^na_{ij}x_j^{(k-1)}+b_i}{a_{ii}} \\ &=x_i^{(k-1)}+\frac{1}{a_{ii}}(b_i-\sum\limits_{j=1}^{i-1}a_{ij}x_j^{(k)}-\sum\limits_{j=i}^na_{ij}x_j^{(k-1)}) \\ &=x_i^{(k-1)}+\frac{r_i^{(k)}}{a_{ii}} \end{aligned}

我们可以添加一个参数ω\omega,使得

xi(k)=xi(k1)+ωri(k)aiix_i^{(k)}=x_i^{(k-1)}+\omega\frac{r_i^{(k)}}{a_{ii}}

这就是松弛法的基本思想,可以用来减少剩余向量的范数和加速收敛。

根据ω\omega的取值,松弛法可以分为:

  1. ω<1\omega<1:欠松弛法(Under-Relaxation methods);可使由Gauss-Seidel方法不能收敛的方程组收敛;
  2. ω=1\omega=1:退化为Gauss-Seidel迭代法;
  3. ω>1\omega>1:超松弛法(Over-Relaxation methods);可使收敛速度加快。

这些方法缩写为SOR方法(Successive Over-Relaxation)。

SOR方法的矩阵形式

我们尝试把SOR方法的迭代格式写成矩阵形式:

xi(k)=xi(k1)+ωri(k)aii=xi(k1)+ωaii(bij=1i1aijxj(k)j=inaijxj(k1))=(1ω)xi(k1)+ωaii(bij=1i1aijxj(k)j=i+1naijxj(k1))\begin{aligned} x_i^{(k)}&=x_i^{(k-1)}+\omega\frac{r_i^{(k)}}{a_{ii}}\\ &=x_i^{(k-1)}+\frac{\omega}{a_{ii}}(b_i-\sum\limits_{j=1}^{i-1}a_{ij}x_j^{(k)}-\sum\limits_{j=i}^na_{ij}x_j^{(k-1)}) \\ &=(1-\omega)x_i^{(k-1)}+\frac{\omega}{a_{ii}}(b_i-\sum\limits_{j=1}^{i-1}a_{ij}x_j^{(k)}-\sum\limits_{j=i+1}^na_{ij}x_j^{(k-1)}) \\ \end{aligned}

所以

x(k)=(1ω)x(k1)+ωD1(b+Lx(k)+Ux(k1))(IωD1L)x(k)=((1ω)I+ωD1U)x(k1)+ωD1bx(k)=(IωD1L)1((1ω)I+ωD1U)x(k1)+(IωD1L)1ωD1bx(k)=(DωL)1((1ω)D+ωU)x(k1)+ω(DωL)1b\begin{aligned} \mathbf{x}^{(k)}&=(1-\omega)\mathbf{x}^{(k-1)}+\omega\mathbf{D}^{-1}(\mathbf{b}+\mathbf{L}\mathbf{x}^{(k)}+\mathbf{U}\mathbf{x}^{(k-1)}) \\ (\mathbf{I}-\omega\mathbf{D}^{-1}\mathbf{L})\mathbf{x}^{(k)}&=((1-\omega)\mathbf{I}+\omega\mathbf{D}^{-1}\mathbf{U})\mathbf{x}^{(k-1)}+\omega\mathbf{D}^{-1}\mathbf{b} \\ \mathbf{x}^{(k)}&=(\mathbf{I}-\omega\mathbf{D}^{-1}\mathbf{L})^{-1}((1-\omega)\mathbf{I}+\omega\mathbf{D}^{-1}\mathbf{U})\mathbf{x}^{(k-1)}+(\mathbf{I}-\omega\mathbf{D}^{-1}\mathbf{L})^{-1}\omega\mathbf{D}^{-1}\mathbf{b} \\ \mathbf{x}^{(k)}&=(\mathbf{D}-\omega\mathbf{L})^{-1}((1-\omega)\mathbf{D}+\omega\mathbf{U})\mathbf{x}^{(k-1)}+\omega(\mathbf{D}-\omega\mathbf{L})^{-1}\mathbf{b} \\ \end{aligned}

Tω=(DωL)1((1ω)D+ωU)\mathbf{T}_{\omega}=(\mathbf{D}-\omega\mathbf{L})^{-1}((1-\omega)\mathbf{D}+\omega\mathbf{U})cω=ω(DωL)1b\mathbf{c}_{\omega}=\omega(\mathbf{D}-\omega\mathbf{L})^{-1}\mathbf{b},则SOR方法的迭代格式为:

x(k)=Tωx(k1)+cω\mathbf{x}^{(k)}=\mathbf{T}_{\omega}\mathbf{x}^{(k-1)}+\mathbf{c}_{\omega}

Kahan定理

如果aii0(i=1,2,,n)a_{ii}\neq 0(i=1,2,\cdots,n),那么ρ(Tω)ω1\rho(\mathbf{T}_{\omega})\geq|\omega-1|。这表明,SOR方法当且仅当ω(0,2)\omega\in(0,2)时收敛。

Ostrowski-Reich定理

如果A\mathbf{A}是一个正定矩阵,并且ω(0,2)\omega\in(0,2),那么SOR方法对于任意的初始近似向量x(0)Rn\mathbf{x}^{(0)}\in\mathbf{R}^n都收敛。

ω\omega的最佳选择

如果A\mathbf{A}是一个正定的三对角矩阵,那么ρ(Tg)=[ρ(Tj)]2<1\rho(\mathbf{T}_{g})=[\rho(\mathbf{T}_{j})]^2<1,并且SOR方法的最佳ω\omega选择是:

ωopt=21+1[ρ(Tj)]2\omega_{opt}=\frac{2}{1+\sqrt{1-[\rho(\mathbf{T}_{j})]^2}}

由此选择的ω\omega,有ρ(Tω)=ω1\rho(\mathbf{T}_{\omega})=\omega-1

SOR伪代码

Alt text

Alt text

7.4 误差界与迭代改进 | Error Bounds and Iterative Refinement

误差界

对于线性方程组 Ax=b\mathbf{Ax}=\mathbf{b}A\mathbf{A}是非奇异的。如果 A\mathbf{A}b\mathbf{b} 存在误差,那么解 x\mathbf{x} 也会存在误差。

A\mathbf{A} 精确,b\mathbf{b} 有误差

Ax=b\mathbf{Ax}=\mathbf{b} 变成 A(x+δx)=b+δb\mathbf{A(x+\delta x)}=\mathbf{b}+\delta\mathbf{b} 。所以有:

Aδx=δbδx=A1δb\begin{aligned} \mathbf{A}\delta\mathbf{x}&=\delta\mathbf{b}\\ \Rightarrow \delta\mathbf{x}&=\mathbf{A}^{-1}\delta\mathbf{b}\\ \end{aligned}

根据推论

对于任意向量 z0\mathbf{z}\neq\mathbf{0},矩阵 A\mathbf{A} 和任意一个自然范数 \|\cdot\|,有

AzzA\frac{\|\mathbf{Az}\|}{\|\mathbf{z}\|}\leq\|\mathbf{A}\|

我们有:

δxA1δb\| \delta\mathbf{x} \|\leq\|\mathbf{A}^{-1}\|\|\delta\mathbf{b}\|\\

b=Axb=AxAx\mathbf{b}=\mathbf{Ax}\Rightarrow\|\mathbf{b}\|=\|\mathbf{Ax}\|\leq\|\mathbf{A}\|\|\mathbf{x}\|\\

所以

δxxAA1δbb\frac{\|\delta\mathbf{x}\|}{\|\mathbf{x}\|}\leq\|\mathbf{A}\|\|\mathbf{A}^{-1}\|\frac{\|\delta\mathbf{b}\|}{\|\mathbf{b}\|}

我们记非奇异矩阵 AA 相对于范数 \|\cdot\| 的条件数为:

K(A)=AA1K(\mathbf{A})=\|\mathbf{A}\|\|\mathbf{A}^{-1}\|

K(A)K(\mathbf{A}) 很大时,A\mathbf{A} 是病态的,当 K(A)K(\mathbf{A}) 接近于 11 时,A\mathbf{A} 是良态的。

A\mathbf{A} 有误差,b\mathbf{b} 精确

Ax=b\mathbf{Ax}=\mathbf{b} 变成 (A+δA)(x+δx)=b\mathbf{(A+\delta A)(x+\delta x)}=\mathbf{b} 。所以有:

(A+δA)δx+xδA=0(\mathbf{A}+\delta\mathbf{A})\delta\mathbf{x}+\mathbf{x}\delta\mathbf{A}=0

这里的 δA\delta\mathbf{A} 往往是一个小量。

"证明(I+A1δA)111A1δA\|\mathbf{(I+A^{-1}\delta A)^{-1}}\|\leq\frac{1}{1-\|\mathbf{A^{-1}\delta A}\|}"

"推论"

对于矩阵 F\mathbf{F},若F<1\|\mathbf{F}\|<1,则I±F\mathbf{I}\pm\mathbf{F}是非奇异的,且

(I±F)111F\left\|\left(\mathbf{I}\pm \mathbf{F}\right)^{-1}\right\|\leq\frac1{1-\left\|\mathbf{F}\right\|}

"下面给出 IF\mathbf{I} - \mathbf{F}情况的证明"

因为 F=F<1\|\mathbf{-F}\|=\|\mathbf{F}\|<1,所以我们将F\mathbf{-F}替换 F\mathbf{F} ,就可以得到 I+F\mathbf{I+F}情况的证明

Alt text

"推论"

A1p=1minAxpxp\|\mathbf{A}^{-1}\|_{p}=\frac{1}{\min\frac{\left|\left|\mathbf{A}\mathbf{x}\right|\right|p}{\left|\left|\mathbf{x}\right|\right|p}}

"证明"

A1p=maxx0A1xpxp)=maxAx0A1AxpA1xp=maxx0xpAxp=maxx01Axpxp=1minAxpxp\begin{aligned} &\|\mathbf{A}^{-1}\|_{p}\\ =&\max_{\mathbf{x}\neq0}\frac{\|\mathbf{A}^{-1}\mathbf{x}\|_{p}}{\|\mathbf{x}\|_{p}})\\ =&\max_{\mathbf{A}\mathbf{x}\neq0}\frac{\| \mathbf{A}^{-1}\mathbf{A}\mathbf{x}\|p}{\parallel \mathbf{A}^{-1}\mathbf{x}\|p} \\ =&\max_{\mathbf{x}\neq0}\frac{\|\mathbf{x}\|p}{\|\mathbf{A}\mathbf{x}\|p} \\ =&\max_{\mathbf{x}\neq0}\frac{1}{\frac{\|\mathbf{A}\mathbf{x}\|p}{\|\mathbf{x}\|p}} \\ =&\frac{1}{\min\frac{\left|\left|\mathbf{A}\mathbf{x}\right|\right|p}{\left|\left|\mathbf{x}\right|\right|p}} \end{aligned}

我们有

(A+δA)=A(I+A1δA)\mathbf{(A+\delta A)}=\mathbf{A}\mathbf{(I+A^{-1}\delta A)}

A1δAA1δA=δAminAx1px1p\|\mathbf{A^{-1}\delta A}\| \leq \|\mathbf{A^{-1}}\|\|\mathbf{\delta A}\| =\frac{\|\mathbf{\delta A}\|}{\min\frac{\left|\left|\mathbf{A}\mathbf{x_1}\right|\right|p}{\left|\left|\mathbf{x_1}\right|\right|p}}

因为δA\|\delta\mathbf{A}\|相对于A\|\mathbf{A}\|很小,所以往往有A1δA1\|\mathbf{A^{-1}\delta A}\|\leq 1,所以I+A1δA\mathbf{I+A^{-1}\delta A}是非奇异的,且

(I+A1δA)111A1δA\|\mathbf{(I+A^{-1}\delta A)^{-1}}\|\leq\frac{1}{1-\|\mathbf{A^{-1}\delta A}\|}

所以在A1δA1\|\mathbf{A^{-1}\delta A}\|\leq 1的情况下(我们不妨将其放缩为δA1A1\|\mathbf{\delta A}\|\leq\|\frac{\mathbf{1}}{A^{-1}}\|),有:

(I+A1δA)111A1δA\|\mathbf{(I+A^{-1}\delta A)^{-1}}\|\leq\frac{1}{1-\|\mathbf{A^{-1}\delta A}\|}

所以

(A+δA)δx+xδA=0A(I+A1δA)δx=xδAδx=(I+A1δA)1A1xδAδx(I+A1δA)1A1xδAA1xδA1A1δA\begin{aligned} (\mathbf{A}+\delta\mathbf{A})\delta\mathbf{x}+\mathbf{x}\delta\mathbf{A}&=0\\ \mathbf{A}(I+\mathbf{A}^{-1}\delta\mathbf{A})\delta\mathbf{x}&=-\mathbf{x}\delta\mathbf{A}\\ \delta\mathbf{x} &= -(I+\mathbf{A}^{-1}\delta\mathbf{A})^{-1}\mathbf{A}^{-1}\mathbf{x}\delta\mathbf{A}\\ \|\delta\mathbf{x}\| &\leq\|\mathbf{(I+A^{-1}\delta A)^{-1}}\|\|\mathbf{A}^{-1}\|\|\mathbf{x}\|\|\delta\mathbf{A}\|\\ &\leq \frac{\|\mathbf{A}^{-1}\|\|\mathbf{x}\|\|\delta\mathbf{A}\|}{1-\|\mathbf{A}^{-1}\|\|\delta\mathbf{A}\|}\\ \end{aligned}

所以:

δxxA1δA1A1δA=K(A)δAA1K(A)δAA\frac{\|\delta\mathbf{x}\|}{\|\mathbf{x}\|}\leq\frac{\|\mathbf{A}^{-1}\|\|\delta\mathbf{A}\|}{1-\|\mathbf{A}^{-1}\|\|\delta\mathbf{A}\|}=\frac{K(\mathbf{A})\frac{\|\delta\mathbf{A}\|}{\|\mathbf{A}\|}}{1-K(\mathbf{A})\frac{\|\delta\mathbf{A}\|}{\|\mathbf{A}\|}}

A\mathbf{A}b\mathbf{b} 都有误差

Ax=b\mathbf{Ax}=\mathbf{b} 变成 (A+δA)(x+δx)=b+δb\mathbf{(A+\delta A)(x+\delta x)}=\mathbf{b}+\delta\mathbf{b} 。所以有:

(A+δA)δx+xδA=δb\begin{aligned} (\mathbf{A}+\delta\mathbf{A})\delta\mathbf{x}+\mathbf{x}\delta\mathbf{A}&=\delta\mathbf{b}\\ \end{aligned}

所以,当δA<1A1\|\delta\mathbf{A}\|<\frac{1}{\|\mathbf{A}^{-1}\|}时,有:

δx=(I+A1δA)1A1(δbxδA)\begin{aligned} \delta\mathbf{x}&=(I+\mathbf{A}^{-1}\delta\mathbf{A})^{-1}\mathbf{A}^{-1}(\delta\mathbf{b}-\mathbf{x}\delta\mathbf{A})\\ \end{aligned}

所以

δxA11A1δAδbxδAA11A1δA(δb+xδA)K(A)1K(A)δAA(δbA+xδAA)K(A)1K(A)δAA(δbAx+δAA)xK(A)1K(A)δAA(δbAx+δAA)xK(A)1K(A)δAA(δbb+δAA)x\begin{aligned} \|\delta\mathbf{x}\|&\leq \frac{\|\mathbf{A}^{-1}\|}{1-\|\mathbf{A}^{-1}\|\|\delta\mathbf{A}\|}\|\delta\mathbf{b}-\mathbf{x}\delta\mathbf{A}\|\\ &\leq \frac{\|\mathbf{A}^{-1}\|}{1-\|\mathbf{A}^{-1}\|\|\delta\mathbf{A}\|}(\|\delta\mathbf{b}\|+\|\mathbf{x}\|\|\delta\mathbf{A}\|)\\ &\leq \frac{K(\mathbf{A})}{1-K(\mathbf{A})\frac{\|\delta\mathbf{A}\|}{\|\mathbf{A}\|}}(\frac{\|\delta\mathbf{b}\|}{\|\mathbf{A}\|}+\frac{\|\mathbf{x}\|\|\delta\mathbf{A}\|}{\|\mathbf{A}\|})\\ &\leq \frac{K(\mathbf{A})}{1-K(\mathbf{A})\frac{\|\delta\mathbf{A}\|}{\|\mathbf{A}\|}}(\frac{\|\delta\mathbf{b}\|}{\|\mathbf{A}\|\|\mathbf{x}\|}+\frac{\|\delta\mathbf{A}\|}{\|\mathbf{A}\|})\|\mathbf{x}\|\\ &\leq \frac{K(\mathbf{A})}{1-K(\mathbf{A})\frac{\|\delta\mathbf{A}\|}{\|\mathbf{A}\|}}(\frac{\|\delta\mathbf{b}\|}{\|\mathbf{A}\mathbf{x}\|}+\frac{\|\delta\mathbf{A}\|}{\|\mathbf{A}\|})\|\mathbf{x}\|\\ &\leq \frac{K(\mathbf{A})}{1-K(\mathbf{A})\frac{\|\delta\mathbf{A}\|}{\|\mathbf{A}\|}}(\frac{\|\delta\mathbf{b}\|}{\|\mathbf{b}\|}+\frac{\|\delta\mathbf{A}\|}{\|\mathbf{A}\|})\|\mathbf{x}\|\\ \end{aligned}

因此,当δA<1A1\|\delta\mathbf{A}\|<\frac{1}{\|\mathbf{A}^{-1}\|}时,有:

δxxK(A)1K(A)δAA(δbb+δAA)\frac{\|\delta\mathbf{x}\|}{\|\mathbf{x}\|}\leq\frac{K(\mathbf{A})}{1-K(\mathbf{A})\frac{\|\delta\mathbf{A}\|}{\|\mathbf{A}\|}}(\frac{\|\delta\mathbf{b}\|}{\|\mathbf{b}\|}+\frac{\|\delta\mathbf{A}\|}{\|\mathbf{A}\|})

K(A)K(\mathbf{A}) 的性质

我们记非奇异矩阵 AA 相对于范数 \|\cdot\| 的条件数为:

K(A)=AA1K(\mathbf{A})=\|\mathbf{A}\|\|\mathbf{A}^{-1}\|

K(A)K(\mathbf{A}) 很大时,A\mathbf{A} 是病态的,当 K(A)K(\mathbf{A}) 接近于 11 时,A\mathbf{A} 是良态的。

  1. K(A)p1K(\mathbf{A})_p\geq 1 对所有的自然范数 p\|\cdot\|_p 成立;
  2. 如果 A\mathbf{A} 是对称的,那么 K(A)2=λmaxλminK(\mathbf{A})_2=\frac{|\lambda_{max}|}{|\lambda_{min}|},其中 λmax\lambda_{max}λmin\lambda_{min} 分别是 A\mathbf{A} 的最大和最小特征值;
  3. K(aA)=K(A)K(a\mathbf{A})=K(\mathbf{A}),其中 aa 是一个非零常数;
  4. K(A)2=1K(\mathbf{A})_2=1 当且仅当 A\mathbf{A} 是正交矩阵(ATA=I\mathbf{A}^T\mathbf{A}=\mathbf{I});
  5. K(RA)2=K(AR)2=K(A)2K(\mathbf{RA})_2 =K(\mathbf{AR})_2 = K(\mathbf{A})_2,其中 R\mathbf{R} 是一个正交矩阵;

题目例子

Alt text

"(1)"

Alt text

"(2)"

Alt text

Chapter 8 逼近论 | Approximation Theory

逼近和插值的区别在于,插值是要求通过所有的数据点,而逼近没有这个限制,而是要求逼近的函数和原函数的误差尽可能小——尽可能接近每个点。

8.1 Discrete Least Squares Approximation | 离散最小二乘逼近

误差表达

p(x)p(x) 是逼近函数,yiy_{i} 是给定的 nn 个数据点,那么逼近误差的三种表达方式如下:

Minimax problem

E(p)=max{yif(x)}E_\infty(p) = \max \{|y_i - f(x)|\}

这用初等技术是解决不了的

Absolute deviation

E1(p)=i=1nyif(x)E_1(p) = \sum\limits_{i=1}^{n} |y_i - f(x)|

困难在于绝对值函数在零点不可微,可能无法求解多元函数的最小值。

Least squares

E2(p)=i=1n(yif(x))2E_2(p) = \sum\limits_{i=1}^{n} (y_i - f(x))^2

此即为最小二乘的误差表达,也是最常用的逼近方法。

我们的目标是找到一个 p(x)p(x),使得 E2(p)E_2(p) 最小。

离散最小二乘逼近

定义: Pn(x)P_n(x)mm 个数据点的离散最小二乘逼近,如果 Pn(x)P_n(x)nn 次多项式,且满足

p=argminpPni=1m(yip(xi))2p=\arg \min _{p \in \mathbb{P}_{n}} \sum\limits_{i=1}^{m}\left(y_{i}-p\left(x_{i}\right)\right)^{2}

其中 Pn\mathbb{P}_{n}nn 次多项式的集合,nn 应远远小于 mm,如果 n=m1n=m-1,其即为 lagrange 插值。

离散最小二乘逼近的解

Pn(x)=a0+a1x++anxn=i=0naixiP_n(x) = a_0 + a_1 x + \cdots + a_n x^n= \sum\limits_{i=0}^{n} a_i x^i

E2=i=1m(yiPn(xi))2\begin{aligned} E_2&=\sum\limits_{i=1}^{m}\left(y_{i}-P_n\left(x_{i}\right)\right)^{2} \\ \end{aligned}

为了使 E2E_2 最小,则其必要条件是

E2ak=0,k=0,1,,n\frac{\partial E_{2}}{\partial a_{k}}=0, \quad k=0,1, \cdots, n

E2ak=2i=1m(Pn(xi)yi)Pn(xi)ak=2i=1m(j=0najxijyi)xik=2(j=0n(aji=1mxij+k)i=1myixik)=0\begin{aligned} \frac{\partial E_{2}}{\partial a_{k}}&=2 \sum\limits_{i=1}^{m}\left(P_{n}\left(x_{i}\right)-y_{i}\right) \frac{\partial P_{n}\left(x_{i}\right)}{\partial a_{k}}\\ &=2 \sum\limits_{i=1}^{m}\left(\sum _{j=0}^{n} a_j x_i^j - y_i\right) x_i^k\\ &=2 \left(\sum\limits_{j=0}^{n} (a_j \sum\limits_{i=1}^{m} x_i^{j+k}) - \sum\limits_{i=1}^{m} y_i x_i^k \right)= 0 \end{aligned}

j=0n(aji=1mxij+k)=i=1myixik,k=0,1,,n\sum\limits_{j=0}^{n} (a_{j} \sum\limits_{i=1}^{m} x_{i}^{j+k})=\sum\limits_{i=1}^{m} y_{i} x_{i}^{k}, \quad k=0,1, \cdots, n

也就是

[i=1mxi0i=1mxi1i=1mxini=1mxi1i=1mxi2i=1mxin+1i=1mxini=1mxin+1i=1mxi2n][a0a1an]=[i=1myixi0i=1myixi1i=1myixin]\begin{bmatrix} \sum\limits_{i=1}^{m} x_{i}^{0} & \sum\limits_{i=1}^{m} x_{i}^{1} & \cdots & \sum\limits_{i=1}^{m} x_{i}^{n} \\ \sum\limits_{i=1}^{m} x_{i}^{1} & \sum\limits_{i=1}^{m} x_{i}^{2} & \cdots & \sum\limits_{i=1}^{m} x_{i}^{n+1} \\ \vdots & \vdots & \ddots & \vdots \\ \sum\limits_{i=1}^{m} x_{i}^{n} & \sum\limits_{i=1}^{m} x_{i}^{n+1} & \cdots & \sum\limits_{i=1}^{m} x_{i}^{2 n} \end{bmatrix} \begin{bmatrix} a_0\\ a_1\\ \vdots\\ a_n \end{bmatrix}= \begin{bmatrix} \sum\limits_{i=1}^{m} y_{i} x_{i}^{0}\\ \sum\limits_{i=1}^{m} y_{i} x_{i}^{1}\\ \vdots\\ \sum\limits_{i=1}^{m} y_{i} x_{i}^{n} \end{bmatrix}

P(x)P(x) 线性

n=1n=1 。此时,P1(x)=a0+a1xP_1(x) = a_0 + a_1 x,有

[mi=1mxii=1mxii=1mxi2][a0a1]=[i=1myii=1myixi]\begin{bmatrix} m & \sum\limits_{i=1}^{m} x_{i} \\ \sum\limits_{i=1}^{m} x_{i} & \sum\limits_{i=1}^{m} x_{i}^{2} \end{bmatrix} \begin{bmatrix} a_0\\ a_1 \end{bmatrix}= \begin{bmatrix} \sum\limits_{i=1}^{m} y_{i}\\ \sum\limits_{i=1}^{m} y_{i} x_{i} \end{bmatrix}

所以

{a0=i=1mxi2i=1myii=1mxii=1mxiyimi=1mxi2(i=1mxi)2a1=mi=1mxiyii=1mxii=1myimi=1mxi2(i=1mxi)2\begin{cases} a_0 = \frac{\sum\limits_{i=1}^{m} x_{i}^{2} \sum\limits_{i=1}^{m} y_{i}-\sum\limits_{i=1}^{m} x_{i} \sum\limits_{i=1}^{m} x_{i} y_{i}}{m \sum\limits_{i=1}^{m} x_{i}^{2}-\left(\sum\limits_{i=1}^{m} x_{i}\right)^{2}}\\ a_1 = \frac{m \sum\limits_{i=1}^{m} x_{i} y_{i}-\sum\limits_{i=1}^{m} x_{i} \sum\limits_{i=1}^{m} y_{i}}{m \sum\limits_{i=1}^{m} x_{i}^{2}-\left(\sum\limits_{i=1}^{m} x_{i}\right)^{2}} \end{cases}

P(x)=xax+bP(x)=\frac{x}{ax+b}

Yi=1yiY_i = \frac{1}{y_i}Xi=1xiX_i = \frac{1}{x_i},则可化为

Yi=a+bXiY_i = a + bX_i

线性最小二乘即可

P(x)=aeb/xP(x)=a e^{-b/x}

Yi=lnyiY_i = \ln y_iXi=1xiX_i = \frac{1}{x_i},则可化为

Yi=lnabXiY_i = \ln a - bX_i

线性最小二乘即可。

8.2 Orthogonal Polynomials and Least Squares Approximation | 正交多项式与最小二乘逼近

刚刚是离散化的最小二乘逼近,现在是连续的最小二乘逼近。

给定定义在 [a,b][a,b] 上的函数 f(x)f(x),我们希望找到一个 简单的函数 p(x)p(x) 来逼近 f(x)f(x),使得

E=abf(x)p(x)2dxE = \int_{a}^{b}\left|f(x)-p(x)\right|^{2} d x

最小。

广义多项式(Generalized Polynomial):用线性无关的函数 ϕ0(x),ϕ1(x),,ϕn(x)\phi_0(x), \phi_1(x), \cdots, \phi_n(x) 的线性组合 P(x)=i=0naiϕi(x)P(x)=\sum\limits_{i=0}^{n} a_{i} \phi_{i}(x) 来逼近 f(x)f(x),这里的 P(x)P(x) 称为广义多项式。

  • Trigonometric polynomial: ϕi(x)=cos(ix)\phi_{i}(x)=\cos (i x) or sin(ix)\sin (i x)
  • Exponential polynomial: ϕi(x)=ekix,kikj\phi_{i}(x)=e^{k_i x}, k_i \neq k_j
  • Πn(x)\Pi_n(x) 为 阶数最多为 nn 的多项式的集合,Πn(x)\Pi_n(x) 是一个线性空间,Πn(x)\Pi_n(x) 的基为 {1,x,x2,,xn}\{1, x, x^2, \cdots, x^n\},可以拿来做广义多项式的基。
Weight Function | 权函数

离散的情况下,为了在某些点上分配不同程度的重要性,我们在计算离散最小二乘逼近的误差表达式时附上权重:

E=i=1mwi(yip(xi))2E = \sum\limits_{i=1}^{m} w_i (y_i - p(x_i))^2

连续的情况下,我们也可以引入权重函数 w(x)w(x),使得

E=abw(x)f(x)p(x)2dxE = \int_{a}^{b} w(x) \left|f(x)-p(x)\right|^{2} d x

Inner Product and Norm | 内积与范数

我们定义内积为

f,g={i=1mwif(xi)g(xi)离散abw(x)f(x)g(x)dx连续\langle f, g\rangle= \begin{cases} \sum\limits_{i=1}^{m} w_i f(x_i) g(x_i) & \text{离散}\\ \int_{a}^{b} w(x) f(x) g(x) d x & \text{连续} \end{cases}

如果 f,g=0\langle f, g\rangle = 0,则称 ffgg 正交。

我们定义范数为

f=f,f\|f\|=\sqrt{\langle f, f\rangle}

所以我们可以把误差表达式写成

E=fp,fp=fp2E = \langle f-p, f-p\rangle=\|f-p\|^2

寻找多项式的系数

P(x)=a0ϕ0(x)+a1ϕ1(x)++anϕn(x)P(x)=a_{0} \phi_{0}(x)+a_{1} \phi_{1}(x)+\cdots+a_{n} \phi_{n}(x),与离散的情况类似,我们要使得 EE 最小,即

Eak=0(abw(x)i=0naiϕi(x)f(x)2)dxak=0(abw(x)((i=0naiϕi(x))22f(x)i=0naiϕi(x)+f(x)2))dxak=0abw(x)(2ϕk(x)i=0naiϕi(x)2f(x)ϕk(x))dx=0abw(x)ϕk(x)i=0naiϕi(x)dx=abw(x)ϕk(x)f(x)dxi=0naiabw(x)ϕk(x)ϕi(x)dx=abw(x)ϕk(x)f(x)dxi=0naiϕk,ϕi=ϕk,f\begin{aligned} \frac{\partial E}{\partial a_{k}}&=0\\ \frac{\partial (\int_{a}^{b} w(x) \left|\sum\limits_{i=0}^{n} a_{i} \phi_{i}(x)-f(x)\right|^{2} ) d x}{\partial a_{k}}&=0\\ \frac{\partial (\int_{a}^{b} w(x) ((\sum\limits_{i=0}^{n} a_{i} \phi_{i}(x))^2-2f(x)\sum\limits_{i=0}^{n} a_{i} \phi_{i}(x)+f(x)^2) )d x}{\partial a_{k}}&=0\\ \int_{a}^{b} w(x) (2\phi_{k}(x)\sum\limits_{i=0}^{n} a_{i} \phi_{i}(x)-2f(x)\phi_{k}(x)) d x&=0\\ \int_{a}^{b} w(x) \phi_{k}(x)\sum\limits_{i=0}^{n} a_{i} \phi_{i}(x) d x&=\int_{a}^{b} w(x)\phi_{k}(x)f(x) d x\\ \sum\limits_{i=0}^{n} a_{i} \int_{a}^{b} w(x) \phi_{k}(x)\phi_{i}(x) d x&=\int_{a}^{b} w(x) \phi_{k}(x)f(x) d x\\ \sum\limits_{i=0}^{n} a_{i} \langle \phi_{k}, \phi_{i}\rangle&=\langle \phi_{k},f\rangle\\ \end{aligned}

写成矩阵形式即为

[ϕ0,ϕ0ϕ0,ϕ1ϕ0,ϕnϕ1,ϕ0ϕ1,ϕ1ϕ1,ϕnϕn,ϕ0ϕn,ϕ1ϕn,ϕn][a0a1an]=[ϕ0,fϕ1,fϕn,f]\begin{bmatrix} \langle \phi_{0}, \phi_{0}\rangle & \langle \phi_{0}, \phi_{1}\rangle & \cdots & \langle \phi_{0}, \phi_{n}\rangle \\ \langle \phi_{1}, \phi_{0}\rangle & \langle \phi_{1}, \phi_{1}\rangle & \cdots & \langle \phi_{1}, \phi_{n}\rangle \\ \vdots & \vdots & \ddots & \vdots \\ \langle \phi_{n}, \phi_{0}\rangle & \langle \phi_{n}, \phi_{1}\rangle & \cdots & \langle \phi_{n}, \phi_{n}\rangle \end{bmatrix} \begin{bmatrix} a_0\\ a_1\\ \vdots\\ a_n \end{bmatrix}= \begin{bmatrix} \langle \phi_{0},f\rangle\\ \langle \phi_{1},f\rangle\\ \vdots\\ \langle \phi_{n},f\rangle \end{bmatrix}

左边的矩阵为对称矩阵。

"离散例子"

可以证明,离散时的式子也是这样的。

Alt text

构造正交多项式

Hij(n)=1i+j1H_{ij}^{(n)}=\frac{1}{i+j-1} 定义的 n×nn\times n 的 Hilbert 矩阵是一个病态矩阵。在求解中往往因为舍入误差而导致结果不准确。

为了解决这个问题,我们可以通过正交化的方法来构造正交多项式,也就是让前文中提到的矩阵变成对角矩阵。这样就不需要进行求逆了。

此时的系数可以直接通过

ak=ϕk,fϕk,ϕka_k = \frac{\langle \phi_{k},f\rangle}{\langle \phi_{k}, \phi_{k}\rangle}

来计算。

我们可以构造出一系列的正交多项式。用下面定义的多项式函数集 {ϕ0(x),ϕ1(x),,ϕn(x)}\{\phi_{0}(x), \phi_{1}(x), \cdots, \phi_{n}(x)\} 关于权函数 w(x)w(x) 是正交的:

ϕ0(x)=1,ϕ1(x)=xB1,ϕk(x)=(xBk)ϕk1(x)Ckϕk2(x),k=2,3,\phi_{0}(x)=1, \quad \phi_{1}(x)=x-B_{1}, \quad \phi_{k}(x)=(x-B_{k}) \phi_{k-1}(x)-C_{k} \phi_{k-2}(x), \quad k=2,3, \cdots

其中 BkB_kCkC_k 是常数,可以通过

Bk=xϕk1,ϕk1ϕk1,ϕk1,Ck=xϕk1,ϕk2ϕk2,ϕk2B_{k}=\frac{\langle x \phi_{k-1}, \phi_{k-1}\rangle}{\langle \phi_{k-1}, \phi_{k-1}\rangle}, \quad C_{k}=\frac{\langle x\phi_{k-1}, \phi_{k-2}\rangle}{\langle \phi_{k-2}, \phi_{k-2}\rangle}

来计算。

"题目例子"

Alt text

里面各项已经在之前的图片中计算过了。

伪代码

Alt text

其中误差的计算推导如下:

Alt text

8.3 Chebyshev Polynomials and Economization of Power Series | 切比雪夫多项式与幂级数的缩减

Chebyshev Polynomials | 切比雪夫多项式
Target 1

上文我们知道了误差的计算方式,现在我们试图找到一个 nn 阶多项式 PnP_n 来逼近函数,使得误差 Pnf\|P_n-f\| 最小。

P(x0)f(x0)=±PnfP(x_0)-f(x_0)=\pm \|P_n-f\| ,则定义点 x0x_0Deviation point

我们的多项式 PnP_n 有如下性质:

Alt text

Target 2.0

决定插值点 {x0,,xn}\{x_0, \cdots, x_n\} 使得 Pn(x)P_n(x) 最小化余项。余项为:

Pn(x)f(x)=Rn(x)=f(n+1)(ξ)(n+1)!i=0n(xxi)|P_n(x)-f(x)|=|R_n(x)|=\left|\frac{f^{(n+1)}(\xi)}{(n+1)!}\prod_{i=0}^n(x-x_i)\right|

Target 2.1

找到插值点 {x1,,xn}\{x_1, \cdots, x_n\} 使得 wn||w_n||_\infty[1,1][-1,1]上最小化,其中 wn(x)=i=1n(xxi)w_n(x)=\prod\limits_{i=1}^n(x-x_i)

注意到

wn(x)=xnPn1(x)w_n(x)=x^n-P_{n-1}(x)

这里的 Pn1(x)P_{n-1}(x)n1n-1 阶多项式,和上文的 Pn(x)P_n(x) 不是一个东西,此语境下没有关联。

Target 3.0

问题转化为找到 x1,,xnx_1, \cdots, x_n 使得 xnPn1(x)||x^n-P_{n-1}(x)||_\infty[1,1][-1,1]上最小化。

从切比雪夫定理我们知道,Pn1(x)P_{n-1}(x) 相对于 xnx^nn+1n+1 个偏差点,也就是说,wn(x)w_n(x)n+1n+1 个点上交替取得最大值和最小值。

引入Chebyshev Polynomials

为了实现上面的目标,我们先想到三角函数。cos(nθ)cos(n\theta)[1,1][-1,1] 上有 n+1n+1 个交替的最大值和最小值,但是 cos(nθ)cos(n\theta) 不是多项式。
又由于 cos(nθ)cos(n\theta) 可以表示为 k=0nak(cosθ)k\sum\limits_{k=0}^{n} a_k (\cos\theta)^k,这就是我们想要的多项式形式。

x=cosθx=\cos\theta,则 x[1,1]x \in [-1,1],所以我们可以把 cos(nθ)cos(n\theta) 写成 Tn(x)T_n(x) 的形式,Tn(x)T_n(x) 称为切比雪夫多项式(Chebyshev polynomial)

Tn(x)=cos(narccosx)T_{n}(x)=\cos (n \cdot \arccos x)

切比雪夫多项式的性质:

我们也可以用递推公式来定义切比雪夫多项式:

T0(x)=1T1(x)=xTn(x)=2xTn1(x)Tn2(x),n=2,3,\begin{aligned} T_{0}(x)&=1\\ T_{1}(x)&=x\\ T_{n}(x)&=2 x T_{n-1}(x)-T_{n-2}(x), \quad n=2,3, \cdots \end{aligned}

可以得出性质:

通过计算得出

Tn,Tm=11Tn(x)Tm(x)1x2dx={πn=m=0π2n=m00nm\langle T_{n}, T_{m}\rangle= \int _{-1}^{1} \frac{T_{n}(x) T_{m}(x)}{\sqrt{1-x^{2}}} d x=\left\{\begin{array}{ll}{\pi} & {n=m=0} \\ {\frac{\pi}{2}} & {n=m \neq 0} \\ {0} & {n \neq m}\end{array}\right.

回到 Target 3.0

我们可以把 wnw_n 写成 Tn(x)T_n(x) 的形式:

wn(x)=xnPn1(x)=Tn(x)2n1w_{n}(x)=x^{n}-P_{n-1}(x)=\frac{T_{n}(x)}{2^{n-1}}

称之为首一切比雪夫多项式(The monic Chebyshev polynomial)

可以证明,首一切比雪夫多项式是所有首一多项式中,最小化 wn||w_n||_\infty 的多项式。

回到 Target 2.1

我们将 wnw_n 写成 Tn(x)T_n(x) 的形式:

minwnΠ~nwn=Tn(x)2n1=12n1\min_{w_n\in \tilde\Pi_n} \|w_{n}\|_{\infty}=\big\|\frac{T_{n}(x)}{2^{n-1}}\big\|_{\infty}=\frac{1}{2^{n-1}}

这里的 Π~n\tilde\Pi_n 是所有首一多项式的集合。

所以,我们取的插值点即为 Tn(x)T_n(x)nn 个零点

回到 Target 2.0

[1,1]上选取的插值点为[-1,1] 上选取的插值点为T_n(x)n$ 个零点,能够使得余项最小,其上确界为

maxx[1,1]f(x)Pn(x)12n(n+1)!maxx[1,1]f(n+1)(x)\max _{x \in[-1,1]}\left|f(x)-P_{n}(x)\right| \leq \frac{1}{2^{n}(n+1) !} \max _{x \in[-1,1]}\left|f^{(n+1)}(x)\right|

使用线性变换 x=ba2t+b+a2x=\frac{b-a}{2} t+\frac{b+a}{2},我们可以将其推广到闭区间 [a,b][a,b] 上。

例题

Alt text

Economization of Power Series | 幂级数的缩减

考虑到,用一个 nn 阶多项式 Pn(x)=anxn+an1xn1++a1x+a0P_n(x) = a_n x^n + a_{n-1} x^{n-1} + \cdots + a_1 x + a_0 来逼近一个任意的 nn 阶多项式 Pn(x)P_n(x),我们可以通过去掉 Pn(x)P_n(x) 中的 含 anxna_n x^n 项的 nn 阶多项式 Qn(x)Q_n(x) 来逼近 Pn(x)P_n(x),那么

maxx[1,1]f(x)Pn1(x)maxx[1,1]f(x)Pn(x)+maxx[1,1]Qn(x)+maxx[1,1]Pn(x)Pn1(x)Qn(x)maxx[1,1]f(x)Pn(x)+maxx[1,1]Qn(x)\begin{aligned} \max _{x \in[-1,1]}\left|f(x)-P_{n-1}(x)\right| &\leq \max _{x \in[-1,1]}\left|f(x)-P_{n}(x)\right|+\max _{x \in[-1,1]}\left|Q_{n}(x)\right|+\max _{x \in[-1,1]}\left|P_{n}(x)-P_{n-1}(x)-Q_{n}(x)\right|\\ &\leq \max _{x \in[-1,1]}\left|f(x)-P_{n}(x)\right|+\max _{x \in[-1,1]}\left|Q_{n}(x)\right| \end{aligned}

为了使得精确度的损失最小, Qn(x)Q_n(x) 必须为

anTn(x)2n1a_n \cdot \frac{T_n(x)}{2^{n-1}}

例题

Alt text

降两阶就都要做两次。

Chapter 9 逼近特征值 | Approximating Eigenvalues

9.2 幂法 | Power Method

幂法是用来确定矩阵的主特征值(即,绝对值最大的特征值)和对应的特征向量的一种方法。

基本思想

A\mathbf{A}是一个n×nn\times n的矩阵,且恰有一个特征值λ1\lambda_1的绝对值最大
nn个特征值λ1,λ2,,λn\lambda_1,\lambda_2,\cdots,\lambda_n(λ1>λ2λn|\lambda_1|>|\lambda_2|\geq\cdots\geq|\lambda_n|),对应的特征向量为v1,v2,,vn\mathbf{v}_1,\mathbf{v}_2,\cdots,\mathbf{v}_n,则任意一个非零向量x(0)\mathbf{x}^{(0)}都可以表示为这nn个特征向量的线性组合,记βj\beta_j为常数,则

x(0)=j=1nβjvj\mathbf{x}^{(0)}=\sum\limits_{j=1}\limits^n\beta_j\mathbf{v}_j

x(0)0\mathbf{x}^{(0)} \neq 0,且(x(0),v1)0(\mathbf{x}^{(0)},\mathbf{v}_1)\neq 0,否则:因为我们无法确保对于任意的初始向量x(0)\mathbf{x}^{(0)}都有β10\beta_1\neq 0,所以迭代的结果可能不是v1\mathbf{v}_1,而是满足 (x(0),vm)0(\mathbf{x}^{(0)},\mathbf{v}_m)\neq 0 的第一个向量vm\mathbf{v}_m,相应地,得到的特征值为 λm\lambda_m

等式两边同时左乘A,A2,,Ak\mathbf{A},\mathbf{A}^2,\cdots,\mathbf{A}^k,得到

x(1)=Ax=j=1nβjAvj=j=1nβjλjvjx(2)=A2x=j=1nβjA2vj=j=1nβjλj2vjx(k)=Akx=j=1nβjAkvj=j=1nβjλjkvj=λ1kj=1nβj(λjλ1)kvj\begin{aligned} \mathbf{x}^{(1)}=\mathbf{A}\mathbf{x}&=\sum\limits_{j=1}\limits^n\beta_j\mathbf{A}\mathbf{v}_j=\sum\limits_{j=1}\limits^n\beta_j\lambda_j\mathbf{v}_j\\ \mathbf{x}^{(2)}=\mathbf{A}^2\mathbf{x}&=\sum\limits_{j=1}\limits^n\beta_j\mathbf{A}^2\mathbf{v}_j=\sum\limits_{j=1}\limits^n\beta_j\lambda_j^2\mathbf{v}_j\\ &\vdots\\ \mathbf{x}^{(k)}=\mathbf{A}^k\mathbf{x}&=\sum\limits_{j=1}\limits^n\beta_j\mathbf{A}^k\mathbf{v}_j=\sum\limits_{j=1}\limits^n\beta_j\lambda_j^k\mathbf{v}_j=\lambda_1^k\sum\limits_{j=1}\limits^n\beta_j(\frac{\lambda_j}{\lambda_1})^k\mathbf{v}_j \end{aligned}

所以

limkAkx=limkλ1kj=1nβj(λjλ1)kvj=limkβ1λ1kv1\lim\limits_{k\to\infty}\mathbf{A}^k\mathbf{x}=\lim\limits_{k\to\infty}\lambda_1^k\sum\limits_{j=1}\limits^n\beta_j(\frac{\lambda_j}{\lambda_1})^k\mathbf{v}_j=\lim\limits_{k\to\infty}\beta_1\lambda_1^k\mathbf{v}_1

如果λ1<1|\lambda_1|<1,则limkAkx=0\lim\limits_{k\to\infty}\mathbf{A}^k\mathbf{x}=0,即x\mathbf{x}收敛到0向量。如果λ1>1|\lambda_1|>1,则序列发散。

对足够大的kkx(k),x(k1)\mathbf{x}^{(k)},\mathbf{x}^{(k-1)}可以近似地表示为

x(k)β1λ1kv1,x(k1)β1λ1k1v1x(k)x(k1)λ1\mathbf{x}^{(k)}\approx\beta_1\lambda_1^k\mathbf{v}_1, \quad\mathbf{x}^{(k-1)}\approx\beta_1\lambda_1^{k-1}\mathbf{v}_1\quad \Rightarrow\quad\frac{\mathbf{x}^{(k)}}{\mathbf{x}^{(k-1)}}\approx\lambda_1

所以,我们可以通过迭代x(k)=Ax(k1)\mathbf{x}^{(k)}=\mathbf{A}\mathbf{x}^{(k-1)}来逼近λ1\lambda_1

归一化

实际计算时,为了避免计算过程中出现绝对值过大或过小的数参加运算,通常在每步迭代时,将向量“归一化”即用的按模最大的分量。

我们需要对x(k)\mathbf{x}^{(k)}进行归一化,使得x(k)=1\|\mathbf{x}^{(k)}\|_\infty=1,即

u(k1)=x(k1)x(k1),x(k)=Au(k1)u(k)=x(k)x(k),λ1xi(k)ui(k1)=x(k)\mathbf{u}^{(k-1)}=\frac{\mathbf{x}^{(k-1)}}{\|\mathbf{x}^{(k-1)}\|_\infty},\quad \mathbf{x}^{(k)}=\mathbf{A}\mathbf{u}^{(k-1)}\\ \Rightarrow \mathbf{u}^{(k)}=\frac{\mathbf{x}^{(k)}}{\|\mathbf{x}^{(k)}\|_\infty},\quad \lambda_1\approx\frac{\mathbf{x}_{i}^{(k)}}{\mathbf{u}_{i}^{(k-1)}}=\|\mathbf{x}^{(k)}\|_\infty

伪代码

Alt text

Alt text

  • 对唯一的主特征值λ1\lambda_1,如果其重数大于1,则幂法仍然有效
  • 如果λ1=λ2\lambda_1=-\lambda_2,则幂法失效
  • 因为我们无法确保对于任意的初始向量x(0)\mathbf{x}^{(0)}都有β10\beta_1\neq 0,所以迭代的结果可能不是v1\mathbf{v}_1,而是满足 (x(0),vm)0(\mathbf{x}^{(0)},\mathbf{v}_m)\neq 0 的第一个向量vm\mathbf{v}_m,相应地,得到的特征值为 λm\lambda_m
  • Aitken's Δ2\Delta^2 可以加速收敛

收敛速度

因为x(k)=λ1kj=1nβj(λjλ1)kvj\mathbf{x}^{(k)}=\lambda_1^k\sum\limits_{j=1}\limits^n\beta_j(\frac{\lambda_j}{\lambda_1})^k\mathbf{v}_j,假设λ1>λ2λn\lambda_1>\lambda_2\geq\cdots\geq\lambda_n,且λ2λn|\lambda_2|\geq |\lambda_n|,则我们的目标就是让λ2λ1\frac{\lambda_2}{\lambda_1}尽可能小,这样收敛速度更快。

Alt text

B=ApI\mathbf{B}=\mathbf{A}-p\mathbf{I},其中p=λ2+λn2p=\frac{\lambda_2+\lambda_n}{2},则B\mathbf{B}的特征值为λ1p,λ2p,,λnp\lambda_1-p,\lambda_2-p,\cdots,\lambda_n-p,因为λ2pλ1p<λ2λ1|\frac{\lambda_2-p}{\lambda_1-p}|<|\frac{\lambda_2}{\lambda_1}|,所以此时B\mathbf{B}的收敛速度更快。

但是我们并不知道λ2\lambda_2λn\lambda_n,所以这不一定是一个好的选择。

反幂法 | Inverse Power Method

反幂法一般是用来确定A\mathbf{A}中与特定数qq最接近的特征值,即λiq\lambda_i\approx q
此时对任意的jij\neq i,有

λiqλjq|\lambda_i-q|\ll|\lambda_j-q|

根据刚刚在收敛速度中的分析,可知:此时 (AqI)1(\mathbf{A}-q\mathbf{I})^{-1} 的主特征值凸显出来了,可以更快地收敛到 1λiq\frac{1}{\lambda_i-q}

其伪代码为:

Alt text