跳至主要內容

数值分析

原创Xenny约 4341 字大约 18 分钟笔记数值分析

数值分析

  • 2024研究生课程「数值分析」笔记&复习要点。

1. 绪论

1.1. 误差和误差限

  1. 绝对误差

    e=xx e^{*} = x^{*} - x

    即真实值和近似值的绝对差,一般情况我们不知道真实值,所以求不出绝对误差。但是可以求绝对误差限e<ε\vert e^{*}\vert < \varepsilon

  2. 相对误差

    erex=xxx e^{*}_r \approx \frac{e^{*}}{x^{*}} = \frac{x^{*} - x}{x^{*}}

    相对误差限为er<εr\vert e^{*}_r\vert < \varepsilon_r

1.2. 有效数字

  • e12×10mn\vert e^{*}\vert \le \frac{1}{2}\times 10^{m-n},且x=±0.a1a2a3an×10mx^{*} = \pm 0.a_1a_2a_3\dots a_n \times10^{m},则xx^{*}nn位有效数值。

    这里说人话就是把数先变成科学计数法,然后再看12×10k\le \frac{1}{2}\times 10^{k}kk就是有效位数。

    例如3.1423.142作为π\pi近似时的有效数字:

    π3.142=0.00040730.0005=12×103 \begin{aligned} \vert \pi - 3.142\vert &= 0.0004073\dots\\ &\le 0.0005\\ &= \frac{1}{2}\times 10^{-3} \end{aligned}

    π=0.314×101,3.142=0.3142×101\pi = 0.314\dots \times 10^1, 3.142 = 0.3142 \times 10^1,所以mn=3m-n = -3n=4n=4,即有44位有效数字。

    xx^{*}nn位误差,则xx^{*}的相对误差限满足

    er12a1×101n \vert e^{*}_r \vert \le \frac{1}{2a_1} \times 10^{1-n}

  • 数值计算

    1. 不要扩大误差,例如迭代解乘上常数kxn=xn+1+kx_n = x_{n+1}+\dots改为xn=1n(xn+1+)x_n = \frac{1}{n}(x_{n+1} + \dots)
    2. 不要近似数减法,一般做有理化处理。
    3. 绝对值太小不做分母
    4. 大数不要减小数
    5. 简化算法。

2. 插值

2.1. 概念

  • n+1n+1个点的插值函数存在且唯一。

  • 线性插值

    即两个点插值,参考拉格朗日n=1n=1情况。

  • 二次/抛物线插值

    三个点插值,设插值函数为L2(x)=a0x2+a1x+a2L_2(x) = a_0x^2 + a_1x + a_2,然后带入求解即可。

2.2. 拉格朗日插值

  • 插值多项式为

    Ln(x)=y0l0(x)+y1l1(x)++ynln(x) L_n(x) = y_0l_0(x) + y_1l_1(x) + \cdots + y_nl_n(x)

    满足Ln(xk)=ykL_n(x_k) = y_k,其中插值基函数li(x)l_i(x)

    li(x)=(xx0)(xx1)(xxi1)(xxi+1)(xxn)(xix0)(xix1)(xixi1)(xixi+1)(xixn) l_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)}

    插值余项为

    Rn(x)=f(x)Ln(x)=f(n+1)(ξ)(n+1)!ωn+1(x),ξ(a,b), ωn+1(x)=i=0n(xxi) R_n(x) = f(x) - L_n(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!}\omega_{n+1}(x),\quad \xi \in (a,b),\ \omega_{n+1}(x) = \prod_{i=0}^n(x-x_i)

2.3. 牛顿插值

  • 是一种迭代插值方式,可以复用之前的计算内容,插值多项式为

    Nn(x)=Nn1(x)+an(xx0)(xx1)(xxn1) N_n(x) = N_{n-1}(x) + a_n(x-x_0)(x-x_1)\cdots(x-x_{n-1})

  1. 差商

    • 一阶差商(均差)

      f[x0,xk]=f(xk)f(x0)xkx0 f[x_0,x_k] = \frac{f(x_k) - f(x_0)}{x_k-x_0}

    • kk阶差商

      f[x0,x1,,xk]=f[x0,x1,,xk1,xk]f[x0,x1,,xk1]xkxk1 f[x_0,x_1,\dots,x_k] = \frac{f[x_0,x_1,\cdots,x_{k-1},x_k]-f[x_0,x_1,\cdots,x_{k-1}]}{x_k-x_{k-1}}

    nn阶差商和nn阶导数关系f[x0,x1,,xn]=f(n)(ξ)n!,ξ[a,b]f[x_0,x_1,\cdots,x_n] = \frac{f^{(n)}(\xi)}{n!},\quad \xi\in[a,b]

    计算的时候写成差商表。记住分母就是分子里是xkx_k分母就是xkx_k

  • 回到牛顿插值,其系数aia_i则等于f[x0,,xi]f[x_0,\dots,x_i],最终插值多项式为

    Nn(x)=f(x0)+f[x0,x1](xx0)+f[x0,,x2](xx0)(xx1)+, N_n(x) = f(x_0)+f[x_0,x_1](x-x_0) + f[x_0,\dots,x_2](x-x_0)(x-x_1) + \cdots,

    其插值余项为

    R(x)=f[x0,x1,,xn](xx0)(xxn) R(x) = f[x_0,x_1,\dots,x_n](x-x_0)\cdots(x-x_n)

2.4. 牛顿等距插值

  • 差分

    已知等距节点xk=x0+kh,k=0,1,,n,h=xnx0nx_k = x_0 + kh,\quad k=0,1,\dots,n,\quad h=\frac{x_n-x_0}{n}

    记向前差分/前差算子为

    Δf(xk)=f(xk+1)f(xk) \Delta f(x_k) = f(x_{k+1}) - f(x_k)

    向后差分/后差算子为

    f(xk)=f(xk)f(xk1) \nabla f(x_k) = f(x_k) - f(x_{k-1})

    中心差分为

    δf(xk)=f(xk+h2)f(xkh2) \delta f(x_k) = f(x_k+\frac{h}{2}) - f(x_k - \frac{h}{2})

  • 高阶差分

    规定零阶差分:Δ0fi=0fi=fi\Delta^0 f_i = \nabla^0 f_i = f_i

    mm阶差分为Δmfk=Δm1fk+1Δm1fk\Delta^m f_k = \Delta^{m-1}f_{k+1} - \Delta^{m-1}f_k,其他同理。

    和差商关系

    f[xk,xk+1]=Δfkh f[x_k,x_{k+1}] = \frac{\Delta f_k}{h}

    f[xk,xk+1,,xk+m]=1m!1hmΔmfk f[x_k,x_{k+1},\dots,x_{k+m}] = \frac{1}{m!}\frac{1}{h^m}\Delta^m f_k

    计算时写差分表,倒三角矩阵。

  • 此时可得牛顿等距插值多项式为

    Nn(x0+th)=f0+tΔf0++t(t1)(tn+1)n!Δnf0 N_n(x_0+th) = f_0 + t\Delta f_0 + \dots + \frac{t(t-1)\cdots(t-n+1)}{n!}\Delta^n f_0

2.5. Hermite插值

  • 当知道{yn=f(xn)}\{y_n=f(x_n)\}和一阶导数{mn=f(xn)}\{m_n=f'(x_n)\}时使用。

    对于nn阶插值式,有2n+22n+2个已知数,此时令αj(x),βj(x)\alpha_j(x),\beta_j(x)2n+12n+1次多项式,且满足

    {αj(xk)=δjk,αj(xk)=0.{βj(xk)=0,βj(xk)=δjk. \begin{cases} \alpha_j(x_k) = \delta_{jk},\\ \alpha_j'(x_k) = 0. \end{cases}\quad \begin{cases} \beta_j(x_k) = 0,\\ \beta_j'(x_k) = \delta_{jk}. \end{cases}

    其中

    δjk={0,jk,1,j=k \delta_{jk} = \begin{cases} 0,\quad j\not = k,\\ 1,\quad j=k \end{cases}

    为克罗内克(Kronecker)符号。 则有H(x)=j=0nαj(x)yj+βj(x)mjH(x) = \sum_{j=0}^n \alpha_j(x)y_j + \beta_j(x)m_j

    αj(x)=(ax+b)lj2(x)\alpha_j(x) = (ax+b)l_j^2(x),显然有axj+b=1ax_j + b = 1

    αj(x)=alj2(x)+2(ax+b)lj(x)lj(x)\alpha_j'(x) = al_j^2(x)+2(ax+b)l_j(x)l_j'(x),有a+2(axj+b)lj(xj)=0a+2(ax_j+b)l_j'(x_j)=0

    联立解得

    αj(x)=[12(xxj)lj(xj)]lj2(x)=[12(xxj)k=0kjn1xjxk]lj2(x). \begin{aligned} \alpha_j(x) &= [1-2(x-x_j)l_j'(x_j)]l_j^2(x) \\ &= \left[1-2(x-x_j)\sum_{\begin{subarray}{l} k=0\\ k\not =j \end{subarray}}^{n}{\frac{1}{x_j-x_k}}\right]l_j^2(x). \end{aligned}

    βj(x)=(cx+d)lj2(x)\beta_j(x) = (cx+d)l_j^2(x),同理可得

    βj(x)=(xxj)lj2(x). \beta_j(x) = (x-x_j)l_j^2(x).

3. 曲线拟合

3.1. 函数逼近

  1. 最佳一致逼近

    即MAE最小

  2. 最佳平方逼近

    ab[f(x)P(x)]2dx=f(x)P(x)2\sqrt{\int_a^b{[f(x)-P(x)]^2}\mathrm{d}x} = \lVert f(x)-P(x)\rVert_2

    对于线性空间

    Φ=span{φ0,φ1,,φn}. \Phi = \mathrm{span}\{\varphi_0,\varphi_1,\dots,\varphi_n\}.

    {φi(x)}\{\varphi_i(x)\}为生成集合Φ\Phi的一个基底。

  • 解题时则对应不同得空间定义

    g(x)=a0φ0+a1φ1+, g(x) = a_0\varphi_0 + a_1\varphi_1 + \dots,

    然后目标是最小化I=ab[f(x)P(x)]2dxI = \int_a^b{[f(x)-P(x)]^2}\mathrm{d}x

    则利用Iak=0\frac{\partial I}{\partial a_k} = 0列方程组,即可解出{ai}\{a_i\}得到g(x)g(x)

  • 矩阵形式求解则先求内积

    (φi,f)=abφifdx (\varphi_i, f) = \int_a^b{\varphi_i\cdot f}\mathrm{d}x

    然后有

    [11/21/31/21/31/41/n1/(n+1)1/(2n+1)](a0a1a2an)=((φ0,f)(φ1,f)(φ2,f)(φn,f)) \begin{bmatrix} 1&1/2&1/3&\cdots\\ 1/2&1/3&1/4&\cdots\\ \vdots&\vdots&\vdots&\vdots\\ 1/n&1/(n+1)&1/(2n+1)&\cdots\\ \end{bmatrix}\begin{pmatrix} a_0\\ a_1\\ a_2\\ \vdots\\ a_n \end{pmatrix} = \begin{pmatrix} (\varphi_0, f)\\ (\varphi_1, f)\\ (\varphi_2, f)\\ \vdots\\ (\varphi_n, f) \end{pmatrix}

3.2. 最小二乘法

  • 相当于是散点函数拟合,只是一些算子计算方式变了,思路同上。对于{xi}\{x_i\}{yi}\{y_i\},我们同样也是找拟合,具体做法为

    y(x)=a0φ0+,y^{*}(x) = a_0\varphi_0 + \dots,为拟合函数,基函数为φ0(x)=1,\varphi_0(x)=1, \dots,有

    [(φ0,φ0)(φ0,φ1)(φ1,φ0)(φ1,φ1)(φn,φ0)(φn,φ1)](a0a1an)=((φ0,f)(φ1,f)(φn,f)) \begin{bmatrix} (\varphi_0,\varphi_0)&(\varphi_0,\varphi_1)&\cdots\\ (\varphi_1,\varphi_0)&(\varphi_1,\varphi_1)&\cdots\\ \vdots&\vdots&\vdots\\ (\varphi_n,\varphi_0)&(\varphi_n,\varphi_1)&\cdots\\ \end{bmatrix}\begin{pmatrix} a_0\\ a_1\\ \vdots\\ a_n \end{pmatrix} = \begin{pmatrix} (\varphi_0, f)\\ (\varphi_1, f)\\ \vdots\\ (\varphi_n, f) \end{pmatrix}

    (内积为(φj,φk)=i=0nφj(xi)φk(xi)(\varphi_j, \varphi_k) = \sum_{i=0}^n{\varphi_j(x_i)\varphi_k(x_i)}

    解出{ai}\{a_i\}后,即得到拟合函数y(x)=y^{*}(x) = \dots,其对应的平方误差为

    δ22=i=0n(y(xi)yi)2 \lVert \delta^{*} \rVert_2^2 = \sum_{i=0}^n(y^{*}(x_i) - y_i)^2

4. 数值积分

4.1. 插值求积公式

  • 梯形公式:abf(x)dx12(ba)[f(a)+f(b)]\int_a^b f(x)\mathrm{d}x \approx \frac{1}{2}(b-a)[f(a)+f(b)]

    把区间分成两份。

  • 辛普森公式:abdx16(ba)[f(a)+4f(a+b2)+f(b)]\int_a^b\mathrm{d}x \approx \frac{1}{6}(b-a)[f(a)+4f(\frac{a+b}{2})+f(b)]

    把区间分成六份。误差R2(f)=(ba)52880f(4)(η),η(a,b)R_2(f) = -\frac{(b-a)^5}{2880}f^{(4)}(\eta),\quad \eta\in (a,b)

  • 对于任意插值多项式p(x)=k=0nf(xk)lk(x)p(x) = \sum_{k=0}^n{f(x_k)l_k(x)},有效数字

    abf(x)dxabP(x)dx=k=0nf(xk)ablk(x)dx=k=0nf(xk)Ak \begin{aligned} \sum_a^b{f(x)}\mathrm{d}x &\approx \int_a^b P(x)\mathrm{d}x \\ &= \sum_{k=0}^n f(x_k)\int_a^b l_k(x)\mathrm{d}x \\ &= \sum_{k=0}^n f(x_k)A_k \end{aligned}

    其中求积系数和Ak=(ba)\sum A_k = (b-a),其求积余项R(f)=ab[f(x)P(x)]dx=abf(n+1)(ξ)(n+1)!ω(x)dxR(f) = \int_a^b[f(x) - P(x)]\mathrm{d}x = \int_a^b \frac{f^{(n+1)}(\xi)}{(n+1)!}\omega(x)\mathrm{d}x

  • 代数精度:对于mm阶多项式准确且对于m+1m+1阶不准确则代数精度为mm

    已知公式求精度解题时则分别取f(x)=1,x,x2,f(x) = 1, x, x^2, \dots,带入abf(x)dx=abP(x)dx\int_a^b f(x)\mathrm{d}x = \int_a^b P(x) \mathrm{d}x等式两侧。

    找到不相等得阶数得到代数精度。

    具有n+1n+1个节点的插值求积公式至少有nn次代数精度,反过来如果不符合这个则说明公式不是插值型的。

    已知精度求等式时也一样,分别取f(x)=1,x,x2,f(x) = 1, x, x^2, \dots,带入等式两侧获得方程组求解待定系数。

4.2. 收敛性&稳定性

  • 不在复习范围。

4.3. 牛顿-柯斯特求积公式

  • 不在复习范围。知道这个公式是上述各个公式的通项即可。

4.4. 复化求积公式

  • 求积节点增加,直接使用牛-柯求积公式会放大误差。所以采用分区间分别求积的方式。

  • 复化梯形

    将区间[a,b][a,b]分为nn份,步长h=banh=\frac{b-a}{n},求积节点为xk=a+kh, (k=0,1,)x_k=a+kh,\ (k=0,1,\dots)

    Tn=h2[f(a)+2k=1n1f(xk)+f(b)]. T_n = \frac{h}{2}\left[f(a) +2\sum_{k=1}^{n-1}f(x_k)+f(b)\right].

    推导即对每个小区间分别使用梯形再加起来即可,过程略。其求积余项/误差为

    RT=ba12h2f(η),η[a,b]. R_T = -\frac{b-a}{12}h^2f''(\eta),\quad \eta\in [a,b].

  • 复化辛普森公式

    Sn=h6[f(a)+4k=0n1f(xk+12)+2k=1n1f(xk)+f(b)]. S_n = \frac{h}{6}\left[f(a)+4\sum_{k=0}^{n-1}f(x_{k+\frac{1}{2}}) + 2\sum_{k=1}^{n-1}f(x_k)+f(b)\right].

    其求积余项/误差为

    RS=ba2880h4f(4)(η),η[a,b]. R_S = -\frac{b-a}{2880}h^4f^{(4)}(\eta),\quad \eta\in [a,b].

  • 记还是好记的,记住梯形是1阶的,所以余项是2阶,辛普森是3阶所以余项是4阶。

4.5. 龙贝格求积公式

  • 不在复习范围。

5. 线性方程组的数值解

5.1. 消元法

  • 首先需要把原方程组换成矩阵形式,这样也就是求解Ax=bAx = b
  1. 顺序高斯消元

    就是线代中的非齐次方程解法,增广矩阵转为三角矩阵然后一一求解,求解前提是AA的任意主子式Di0D_i\not = 0

    这里引入记符ajk(i+1)a^{(i+1)}_{jk}代表第ii次迭代后的元素,A(i+1)A^{(i+1)}代表对原矩阵A(1)A^{(1)}的第ii次消元/迭代步骤结果。

  2. 列主元高斯消元

    直接消元运算过程可能会扩大误差,先找到列主要元素再消元,列主元为每列绝对值最大元素,使用这一行对其他行进行消元。

    这里注意detA0\det A\not = 0

5.2. LU分解法

  • 每一步消元可以看成是左乘一个初等下三角矩阵LkL_k

    A(i+1)=LiA(i),b(i)=Lib(i) A^{(i+1)} = L_{i}A^{(i)},\quad b^{(i)} = L_{i}b^{(i)}

    其中

    Li=(1001li+1,i0ln,i1),lj,i=aji(i)/aii(i),(j=i+1,i+2,,n) L_{i} = \begin{pmatrix} 1&&&&\\ 0&\cdots&&&\\ 0&\cdots&1&&\\ \vdots&\cdots&-l_{i+1,i}&\ddots&\\ \vdots&\cdots&\vdots&\vdots&\ddots\\ 0&\cdots&-l_{n,i}&\cdots&&1\\ \end{pmatrix},\quad l_{j,i} = a^{(i)}_{ji} / a^{(i)}_{ii},\quad (j=i+1,i+2,\dots,n)

    也就是第ii次迭代时的初等矩阵LkL_kii列为1,li+1,i,{1,l_{i+1,i},\dots}。我们有A(n)=Ln1Ln2L1A(1)A^{(n)} = L_{n-1}L_{n-2}\cdots L_1 A^{(1)},则

    A(1)=L11L21Ln11A(n)=LA(n)=LU A^{(1)} = L_1^{-1}L_2^{-1}\cdot L_{n-1}^{-1}A^{(n)} = LA^{(n)} = LU

    UX=YUX = Y,此时原方程AX=bAX = b可以写成

    {LY=bUX=Y \begin{cases} LY = b\\ UX = Y \end{cases}

  • 实际解题时使用Doolittle或Courant对AA进行分解得到LULU

  1. Doolittle法

    对于

    {u1j=a1jli1=ai1/u11 \begin{cases} u_{1j} &= a_{1j}\\ l_{i1} &= a_{i1}/u_{11} \end{cases}

    UU的第一行就是AA第一行,LL第一列就是AA第一列分别除以UU第一个元素。随后同样迭代有

    {uij=aijk=1i1likukjlij=aijk=1j1(likukj)/ujj \begin{cases} u_{ij} &= a_{ij} - \sum_{k=1}^{i-1}l_{ik}u_{kj}\\ l_{ij} &= a_{ij} - \sum_{k=1}^{j-1}(l_{ik}u_{kj})/u_{jj} \end{cases}

    这里是UU的第ii行等于AAii行的元素减去LLii行和UUjj列的内积。LL的第jj列是AAii行减去LLii行和UUjj列的内积除以UjjU_{jj}

    • 但是上述计算太抽象了(实际上从代数理解是对LL正交化的过程,但是手写计算太麻烦),一般我们使用类似增广矩阵变换的方式通过[E,A][E, A]得到[L,U][L, U],例如

      其中每次计算右侧矩阵消元的倍数kjk_j更新到左边矩阵,同时更新右边矩阵为消元后结果,最终得到LLUU

  2. Courant法

    和Doolittle类似,只是UU变成了单位上三角,LL变成了一般下三角。要算的话可以还是先Doolittle分解,然后对UU每一列主元单位化,同时对LL每一行乘上相应数值即可。

    例如上述就是UU最后一列分别除以2-2LL最后一行分别乘上2-2即可。

  3. Cholesky分解、追赶法

    不在复习范围。

5.3. 矩阵范数

  • 定义向量p-范数为x2=(i=1nxip)1/p\lVert x\rVert_2 = (\sum_{i=1}^n \lvert x_i\rvert^p)^{1/p}pp取无穷时范数为xx的最大元素绝对值。

    对于方阵有F-范数(Frobenius)

    AF=i=1nj=1naij2 \lVert A\rVert_F = \sqrt{\sum_{i=1}^n\sum_{j=1}^n{\lvert a_{ij}\rvert^2}}

    方阵其他范数有

    A1=max1jni=1naijA=max1inj=1naijA2=maxλi,AATv=λv \begin{aligned} \lVert A\rVert_1 &= \max_{1\le j \le n}\sum_{i=1}^n\lvert a_{ij}\rvert \\ \lVert A\rVert_{\infty} &= \max_{1\le i \le n}\sum_{j=1}^n\lvert a_{ij}\rvert \\ \lVert A\rVert_{2} &= \sqrt{\max\lambda_i},\quad AA^T v = \lambda v \end{aligned}

    1-范数就是最大的列和(所以也叫列范数),\infty就是最大行和(所以也叫行范数),真正的2-范数为AATAA^T的最大特征值(求解方法是λIAAT=0\lvert \lambda I - AA^T\rvert = 0)。

    推广到任意矩阵列范数和行范数任然成立。

5.4. 误差分析

  • 不在复习范围内。

6. 线性方程组的迭代解

6.1. 基本迭代方法

  • 对于Ax=bAx = b,设x=Bx+fx = Bx + f,构造迭代

    x(k+1)=Bx(k)+f x^{(k+1)} = Bx^{(k)} + f

  1. Jacobi迭代

    方程组转化为

    {x1(k+1)=1a11(a12x2(k)a1nxn(k)+b1)x2(k+1)=1a22(a21x1(k)a2nxn(k)+b2)xn(k+1)=1ann(an1x1(k)an,n1xn1(k)+bn) \begin{cases} x_1^{(k+1)} &= \frac{1}{a_{11}}(-a_{12}x_2^{(k)} - \cdots - a_{1n}x_n^{(k)} + b_1)\\ x_2^{(k+1)} &= \frac{1}{a_{22}}(-a_{21}x_1^{(k)} - \cdots - a_{2n}x_n^{(k)} + b_2)\\ &\vdots\\ x_n^{(k+1)} &= \frac{1}{a_{nn}}(-a_{n1}x_1^{(k)} - \cdots - a_{n,n-1}x_{n-1}^{(k)} + b_n) \end{cases}

    解题时一般就是画迭代表,第一列为迭代次数kk,每一行为xxii次迭代的解。

  2. Gauss-Seidel法

    在迭代中使用最新解,例如计算出x1(k+1)x_1^{(k+1)}后,对于x2(k+1)x_2^{(k+1)}的计算中x1(k)x_1^{(k)}使用x1(k+1)x_1^{(k+1)}替代,后续同理。

6.2. 收敛判别

  • 在Jacobi法中,将AA记为A=DLUA = D - L - U(这里的L,UL, U分别是AA的负值下上三角阵,和前面的LU分解法无关),DD为对角阵。

    x(k+1)=D1(L+U)x(k)+D1bx^{(k+1)} = D^{-1}(L+U)x^{(k)} + D^{-1}b,即B=D1(L+U),f=D1bB = D^{-1}(L+U), f = D^{-1}b

  • 对于Gauss-Seidel法,B=(DL)1U,f=(DL)1bB = (D-L)^{-1}U, f=(D-L)^{-1}b

  • 定义ε(k+1)=x(k+1)x=Bε(k)\varepsilon^{(k+1)} = x^{(k+1)} - x^{*} = B\varepsilon^{(k)}

    则有ε(k)=Bkε(0)\varepsilon^{(k)} = B^k\varepsilon^{(0)},迭代收敛的充要条件为

    limkε(k)=limkBkε(0)=0 \lim_{k\rightarrow \infty}\varepsilon^{(k)} = \lim_{k\rightarrow \infty}B^k\varepsilon^{(0)} = 0

    ρ(B)<1\rho(B)<1,其中谱半径ρ(B)\rho(B)代表BB的最大特征值绝对值。

  • 解题的时候就是先分解AA得到BB矩阵,然后根据λIB=0\lvert \lambda I - B\lvert = 0计算特征值,有些时候算不出来则通过罗尔定理判断根的区间,从而得到ρ(B)\rho(B)的不等关系进行判别(一般不用)。

  • 还有如果AA是严格对角占优,即对角元素绝对值均大于其他值,则收敛。

    或任意范数(解题一般计算1和无穷)B<1\lVert B\rVert < 1,则收敛(但这个只是充分条件,不能判别发散)。

  • 还有不可约对角占优、对称正定情况...应该用不上。

6.3. 松弛迭代法

  • 不在复习范围内。

7. 非线性方程组求根

  • 对于f(x)=0f(x) = 0,解为xx^{*},则f(x)f(x)可以写为

    f(x)=(xx)mg(x),g(x)0 f(x) = (x-x^{*})^m g(x),\quad g(x^{*})\not = 0

    m>1m>1xx^{*}mm重根。

7.1. 二分法

  • 确定有根区间[a,b][a,b],罗尔定理判定。

    假设f(a)<0,f(b)>0f(a)<0,f(b)>0

    计算c=(a+b)/2c=(a+b)/2,若f(c)>0f(c)>0,则b=cb=c,反之a=ca=c

  • 终止条件为(ba)/2n+1ε(b-a)/2^{n+1} \le \varepsilon,得到迭代次数n\lceil n\rceil

7.2. 迭代法

  • f(x)=0f(x) = 0改为x=φ(x)x = \varphi(x)。即可进行迭代求解

    xk=φ(xk1) x_k = \varphi(x_{k-1})

    收敛的值x=φ(x)x^{*} = \varphi(x^{*})为不动点。

  • 收敛性

    φ(x)\varphi(x)[a,b][a,b]上不动点存在且唯一,若

    1. aφ(x)ba\le \varphi(x)\le b
    2. φ(x)L<1\lvert \varphi '(x)\rvert \le L < 1

    则该迭代式将收敛到不动点。反之则发散。

  • 收敛速度

    limkxxk+1xxkp=C \lim_{k\rightarrow \infty}\frac{\vert x^{*}-x_{k+1}\vert}{\vert x^{*}-x_k\vert^p} = C

    {xk}\{x_k\}收敛速度为pp阶。

    这里计算时利用拉氏中值定理有

    xn+1x=φ(xn)φ(x)=φ(ξn)xnx\vert x_{n+1} - x^{*}\vert = \vert \varphi(x_n) - \varphi(x^{*})\vert = \vert \varphi '(\xi_n)\vert \vert x_n-x^{*}\vert

    按此我们可以继续推广至φ\varphipp阶导,原极限=φ(p)(ξn)=φ(p)(x)0=\vert \varphi^{(p)}(\xi_n)\vert = \vert \varphi^{(p)}(x^{*}) \vert \not = 0。则若

    φ(x)=φ(x)==φ(p1)(x)=0,φp(x)0 \varphi '(x^{*}) = \varphi ''(x^{*}) = \cdots = \varphi^{(p-1)}(x^{*}) = 0, \varphi^{p}(x^{*}) \not = 0

    xn+1=φ(xn)x_{n+1}=\varphi(x_n)pp阶收敛。

7.3. 迭代加速

  • 计算了xkx_kxk+1x_{k+1}后,由艾特金加速法计算

    xˉk+1=xk(xk+1xk)2xk+22xk+1+xk \bar{x}_{k+1} = x_{k} - \frac{(x_{k+1} - x_k)^2}{x_{k+2} - 2x_{k+1} + x_k}

    xˉk+1\bar{x}_{k+1}作为新的xk+1x_{k+1}再次计算xk+2,xk+3x_{k+2},x_{k+3}更新得到xˉk+2\bar{x}_{k+2}

7.4. 牛顿法

  • 对于近似解x0x_0处一阶泰勒展开式有f(x)+f(x0)(xx0)=0f(x) + f'(x_0)(x-x_0) = 0,则可得迭代公式

    xk+1=xkf(xk)f(xk) x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)}

    牛顿法至少为二阶收敛

8. 常微分方程

  • 对于常微分方程y=f(x,y)y' = f(x, y),我们将区间分为nn份,步长为hh,即xi=a+ihx_i = a+ih

8.1. 欧拉公式

  • 将区间分为多个段求其斜率作为导数来迭代拟合。

    yi+1=yi+hf(xi,yi)y_{i+1} = y_i + hf(x_i, y_i)。迭代即可得到{xi,yi}\{x_i,y_i\}对。

8.2. 梯形公式

  • 将原微分方程两边积分,用梯形公式计算其积分项,有

    yi+1=yi+h2[f(xi,yi)+f(xi+1,yi+1)] y_{i+1} = y_i + \frac{h}{2}[f(x_i, y_i)+f(x_{i+1},y_{i+1})]

8.3. 改进欧拉公式

  • 上述梯形公式是个隐方程,所以我们用改进欧拉,计算出第一次迭代yˉi+1\bar{y}_{i+1}后带入梯形公式做一次校正。

    预测时yˉi+1=yi+hf(xi,yi)\bar{y}_{i+1} = y_i + hf(x_i,y_i), 校正为yi+1=yi+h2[f(xi,yi)+f(xi+1,yˉi+1)]y_{i+1} = y_i + \frac{h}{2}[f(x_i,y_i)+f(x_{i+1},\bar{y}_{i+1})]

8.4. 龙格-库塔公式

  • 不在复习范围内。