《数值分析》复习笔记

一、绪论

数值计算算法设计的基本原则

  1. 要有数值稳定性,能够控制舍入误差的传播;
  2. 防止较小的数加到较大的数;
  3. 避免两个相近的近似值相减;
  4. 除法运算时,要避免除数的绝对值远远小于被除数的绝对值。

误差、有效数字

  • 绝对误差:e=xxe=x^*-x,精确值减去近似值;
  • 相对误差:er=ex=xxxe_r = \frac{e}{x}=\frac{x^*-x}{x^*}
  • 绝对误差限:eϵ|e|\le \epsilon

有效数字:

image-20241215190737730

上述(1)描述如何从绝对误差限推导有效数字,(2)描述从有效数字推导绝对误差。

绝对误差限一般为0.5×10n0.5\times 10^n,从第一个非零位到0.5之前那一位的数字个数就是有效位数。

绝对误差与函数:

image-20241215190927804

误差的计算方法

ϵ(x±y)=ϵ(x)+ϵ(y)ϵ(xy)=xϵ(y)+yϵ(x)ϵ(xy)=xϵ(y)+yϵ(x)y2ϵr(a±b)=ϵ(a)+ϵ(b)a±bϵr(ab)ϵr(a)+ϵr(b)ϵr(ab)ϵr(a)+ϵr(b)\epsilon(x\plusmn y ) = \epsilon(x)+\epsilon(y)\\ \epsilon(xy) = |x|\epsilon(y)+|y|\epsilon(x)\\ \epsilon(\frac{x}{y}) = \frac{|x|\epsilon(y)+|y|\epsilon(x)}{y^2}\\ \epsilon_r(a\plusmn b) = \frac{\epsilon(a)+\epsilon(b)}{|a\plusmn b|}\\ \epsilon_r(ab)\approx \epsilon_r(a)+\epsilon_r(b)\\ \epsilon_r(\frac{a}{b}) \approx \epsilon_r(a)+\epsilon_r(b)\\

衡量数值计算算法优劣的标准

  1. 可靠的理论基础:正确性、收敛性、数值稳定性,是否可作误差分析;
  2. 良好的计算复杂性:包括计算量和所占的内存空间。

二、线性方程组

范数

范数的性质:幺元、线性、三角不等式

常见的向量范数

x1=i=1nxix2=i=1nxi2x=max1inxi\displaystyle ||x||_1=\sum_{i=1}^n|x_i|\\ ||x||_2 = \sqrt{\sum_{i=1}^n x_i^2}\\ ||x||_\infty = \max_{1\le i\le n}|x_i|

相容范数:若对任意矩阵ARn×nA\in R^{n\times n}

A=maxx=1Ax||A|| = \max_{||x||=1}||Ax||

则由上式定义的||\cdot||是一种矩阵范数,其与所给定的向量范数相容,也称其为算子范数。

常见的矩阵范数

列范数A1=max1jni=1naij谱范数A2=λmax(ATA)行范数A=max1inj=1naijF范数/欧几里得范数AF=aij2\displaystyle 列范数||A||_1=\max_{1\le j\le n}\sum_{i=1}^n|a_{ij}|\\ 谱范数||A||_2 = \sqrt{\lambda_{max}(A^TA)}\\ 行范数||A||_\infty = \max_{1\le i\le n}\sum_{j=1}^n|a_{ij}|\\ F范数/欧几里得范数||A||_F = \sqrt{\sum a_{ij}^2}

矩阵的谱半径

ρ(G)=maxiinλi\rho(G) = \max_{i\le i\le n}|\lambda_i|

高斯消去法

能进行高斯消去的条件:前n1n-1个顺序主子式的行列式不为0。(第ii个顺序主子式:左上角的i×ii\times i元素构成的行列式)。

列主元高斯消去法

每次在消去前,将aik(k)a_{ik}^{(k)}中绝对值最大的那一行换到第kk行。

迭代法

Ax=bA=NPNx=Px+bx=N1Px+N1bAx=b\\ \xRightarrow{A=N-P} Nx=Px+b\\ x= N^{-1}Px+N^{-1}b

收敛定理:对于迭代形式x=Gx+dx=Gx+d,收敛的充分必要条件ρ(G)<1\rho(G)<1,充分条件是G<1||G||\lt 1

ρ(G)<G\rho(G)\lt ||G||

迭代法的误差

x(k)xGk1Gx(1)x0x(k)xG1Gx(k)x(k1)||x^{(k)}-x^*||\le \frac{||G||^k}{1-||G||}||x^{(1)}-x^{0}||\\ ||x^{(k)}-x^*||\le \frac{||G||}{1-||G||}||x^{(k)}-x^{(k-1)}||

Jacobi迭代法

将矩阵AA分解为A=D+L+UA=D+L+U,则

x(k+1)=D1(L+U)x(k)+D1bx^{(k+1)} = -D^{-1}(L+U)x^{(k)}+D^{-1}b

收敛条件:

  • 充要条件:ρ(G)<1\rho(G)\lt 1
  • 充分条件G<1||G||\lt 1
  • 充分条件:矩阵AA是主对角占优矩阵(主对角线绝对值比此列绝对值之和更大)。

分量形式

Gauss-Seidel迭代法

A=D+L+UA=D+L+U,将UU右移:

x(k+1)=(D+L)1Uxk+(D+L)1bx^{(k+1)}=-(D+L)^{-1}Ux^{k}+(D+L)^{-1}b

实际上,为了避免计算(D+L)1(D+L)^{-1},通常采用:

x(k+1)=D1Lx(k+1)D1Ux(k)+D1bx^{(k+1)} = -D^{-1}Lx^{(k+1)}-D^{-1}Ux^{(k)}+D^{-1}b

收敛条件除了Jacobi方法相同的部分外,还加一条:系数AA是正定的(特征值大于0)。

分量形式

三、特征值

幂法求特征值

简单迭代:uk=Akuu_k=A^ku

为了避免特征向量模过大,通常需要归一化:

{yk1=uk1uk1uk=Ayk1\begin{cases} y_{k-1} = \frac{u_{k-1}}{||u_{k-1}||}\\ u_k = Ay_{k-1} \end{cases}

范数取二范数

β=yk1Tuk=yk1TAyk1limkβk=α1x1Tα1x1TAα1x1α1x1=α12x1Tx1α1x122λ1=λ1\beta = y_{k-1}^Tu_k=y_{k-1}^TAy_{k-1}\\ \lim_{k\rarr\infty}\beta_k=\frac{\alpha_1x_1^T}{||\alpha_1x_1^T||}A\frac{\alpha_1x_1}{||\alpha_1x_1||}=\frac{\alpha_1^2x_1^Tx_1}{||\alpha_1x_1||_2^2}\lambda_1=\lambda_1

{ηk1=uk1Tuk1yk1=uk1ηk1uk=Ayk1βk=yk1Tuk\begin{cases} \eta_{k-1}=\sqrt{u_{k-1}^Tu_{k-1}}\\ y_{k-1}=\frac{u_{k-1}}{\eta_{k-1}}\\ u_k = Ay_{k-1}\\ \beta_k = y_{k-1}^Tu_k \end{cases}

范数取无穷范数

{yk1=uk1uk1uk=Ayk1β=erTukerTyk1\begin{cases} y_{k-1}=\frac{u_{k-1}}{||u_{k-1}||}\\ u_k = Ay_{k-1}\\ \beta = \frac{e_r^Tu_k}{e_r^Ty_{k-1}} \end{cases}

反幂法

Axi=λixiA1xi=1λixiAx_i = \lambda_ix_i\\ A^{-1}x_i = \frac{1}{\lambda_i}x_i

原点偏移

Ax=λx(ApI)x=(λp)xAx=\lambda x\\ (A-pI)x=(\lambda-p)x

则可求出λip|\lambda_i-p|最大的那个特征值。

幂法和反幂法的局限性

迭代是否收敛依赖于特征值的分布情况,不适合自动计算,只有矩阵阶数很高,无其他可用方法时,才用幂法和反幂法。

四、非线性方程求解

二分法

误差限ϵ=bkak2\epsilon=\frac{b_k-a_k}{2}

简单迭代法

收敛条件(需要两者都满足):

  • x[a,b],ϕ(x)[a,b]\forall x\in[a,b], \phi(x)\in [a,b]
  • x[a,b],ϕ(x)L<1\forall x\in [a,b],|\phi'(x)|\le L\lt1

则:

  • x=ϕ(x)x=\phi(x)[a,b][a,b]有唯一根s;
  • xksx_k\rarr s;
  • sxkLk1Lx1x0|s-x_k|\le\frac{L^k}{1-L}|x_1-x_0|
  • sxkL1Lxkxk1|s-x_k|\le\frac{L}{1-L}|x_k-x_{k-1}|

可以压缩这个[a,b][a,b]区间,得到定理:s=ϕ(s)s=\phi(s)ϕ(x)\phi'(x)在包含ss的某个开区间内连续。如果ϕ(s)<1|\phi'(s)|\lt1,则存在δ>0\delta\gt0,当x0[sδ,s+δ]x_0\in[s-\delta,s+\delta]时,由简单迭代法产生的序列 xksx_k\rarr s

简单迭代法的收敛速度

若:

limkek+1ekk=c\lim_{k\rarr\infty}\frac{|e_{k+1}|}{|e_k|^k}=c

则称xk{x_k}是$r $阶收敛的。

简单迭代法是rr阶收敛的。

定理:若在ϕ(m)(x)\phi^{(m)}(x)在包含ss的某个开区间内连续,如果

ϕ(i)(s)=0(i<m)ϕ(m)(s)0\phi^{(i)}(s)=0 \quad (i<m)\\ \phi^{(m)}(s) \ne 0

则简单迭代法以mm阶速度收敛于ss

牛顿法

ϕ(x)=xf(x)f(x)\phi(x) = x-\frac{f(x)}{f'(x)}

定理:f(s)=0,f(s)0,f(x)0f(s)=0,f'(s)\ne 0,f''(x)\ne 0,那么δ\exist\delta,使得

{x0[sδ,s+δ]xk+1=xkf(x)f(x)\begin{cases} x^0\in [s-\delta,s+\delta]\\ x^{k+1} = x^k-\frac{f(x)}{f'(x)} \end{cases}

二阶收敛到ss

下面这个定理给出一个更大的收敛区间:当下列条件满足时:

  • f(a)f(b)<0f(a)f(b)\lt 0
  • f(x)f''(x)在区间[a,b][a,b]上不变号;
  • x[a,b],f(x)0x\in[a,b],f'(x)\ne 0
  • x0[a,b],f(x0)f(x0)>0x_0\in[a,b],f(x_0)f''(x_0)\gt 0

则由牛顿法产生的序列xkx_k单调收敛于根,并且是平方收敛的。

五、插值与逼近

插值多项式

拉格朗日多项式:

f(x)=i=1nyili(x)\large\displaystyle f(x)=\sum_{i=1}^ny_il_i(x),其中li(x)=j=1,jinxxjxixj\large l_i(x)=\prod_{j=1,j\ne i}^n\frac{x-x_j}{x_i-x_j}

牛顿多项式:

.差商:f[x0,x1]=f(x1)f(x0)x1x0f[x_0,x_1]=\frac{f(x_1)-f(x_0)}{x_1-x_0},更一般地,kk阶差商:f[x0,x1,,xk]=f[x0,x1,,xk2,xk]f[x0,x1,,xk2,xk1]xkxk1f[x_0,x_1,\cdots,x_k]=\frac{f[x_0,x_1,\cdots,x_{k-2},x_k]-f[x_0,x_1,\cdots,x_{k-2},x_{k-1}]}{x_k-x_{k-1}},打乱顺序不影响差商的值。

牛顿插值多项式为:

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

误差分析

牛顿插值公式(拉格朗日插值公式)的余项为:

Rn(x)=f(n+1)(ζ)(n+1)!ωn+1(x)ωn+1(x)=i=0n(xxi)R_n(x)=\frac{f^{(n+1)}(\zeta)}{(n+1)!}\omega_{n+1}(x)\\ \omega_{n+1}(x) = \prod_{i=0}^{n}(x-x_i)

差商与原函数的关系

f[x0,x1,,xn]=f(n+1)(ζ)(n+1)!f[x_0,x_1,\cdots,x_n] = \frac{f^{(n+1)}(\zeta)}{(n+1)!}

正交多项式系

函数的内积:

(f,g)=abρ(x)f(x)g(x)dx(f,g) = \int_a^b\rho(x)f(x)g(x)dx

若两个函数内积为零(如上式),则成f,gf,g[a,b][a,b]上带权ρ(x)\rho(x)正交。

正交多项式系的转化:将{ϕ0,ϕ1,,ϕk}\{\phi_0,\phi_1,\cdots,\phi_k\}转化为正交多项式系:

Φ0(x)=ϕ0(x)Φ1(x)=ϕ1(x)(ϕ1,Φ0)(Φ0,Φ0)Φ0(x)Φ2(x)=ϕ2(x)(ϕ2,Φ0)(Φ0,Φ0)Φ0(x)(ϕ2,Φ1)(Φ1,Φ1)Φ1(x)Φi(x)=ϕi(x)j=0i1(ϕi,Φj)(Φj,Φj)Φj(x)\begin{aligned} \Phi_0(x) =& \phi_0(x)&\\ \Phi_1(x) =& \phi_1(x)& - \frac{(\phi_1,\Phi_0)}{(\Phi_0,\Phi_0)}\Phi_0(x)&\\ \Phi_2(x) =& \phi_2(x)& - \frac{(\phi_2,\Phi_0)}{(\Phi_0,\Phi_0)}\Phi_0(x)& - \frac{(\phi_2,\Phi_1)}{(\Phi_1,\Phi_1)}\Phi_1(x)\\ \Phi_i(x) =& \phi_i(x)&-\sum_{j=0}^{i-1}\frac{(\phi_i,\Phi_j)}{(\Phi_j,\Phi_j)}\Phi_j(x) \end{aligned}

最佳平方逼近

内积的的四个性质:可交换性、线性、可分可加性、非负性。

最佳平方逼近希望解决的问题是,使用简单函数p(x)p(x)去逼近f(x)f(x),其中p(x)p(x)是从子空间Hn=Span{ϕ1,ϕ2,,ϕn}H_n=Span\{\phi_1,\phi_2,\cdots,\phi_n\}中的函数线性组合成的,找到的这个p(x)sp^*(x)s是最佳平方逼近元素。

定理:p(x)p^*(x)是最佳平方逼近元素时的充分必要条件是:(fp,ϕi)=0(f-p^*,\phi_i)=0

这个定理可以从三维向量空间的几何直观去理解。

六、数值积分

代数精度

abf(x)dxk=0nλkf(xk)\int_a^bf(x)dx \approx \sum_{k=0}^n\lambda_kf(x_k)

f(x)f(x)为任何次数不高于mm的多项式时等式成立,而当f(x)f(x)为某个m+1m+1次多项式时等式不成立,则乘该求积公式有mm次代数精度。

插值型积分公式

abf(x)dxk=0nλk(n)f(x)λk(n)=ablk(x)dx\int_a^bf(x)dx\approx \sum_{k=0}^n\lambda_k^{(n)}f(x)\\ \lambda_k^{(n)} = \int_a^bl_k(x)dx

其截断误差为:

Rn=abf(n+1)(ξ)(n+1)!j=0n(xxj)dxR_n = \int_a^b \frac{f^{(n+1)}(\xi)}{(n+1)!}\prod_{j=0}^n(x-x_j)dx

定理:n+1n+1个节点的插值型求积公式至少有nn次代数精度。

定理:如果n+1n+1个节点的求积公式有大于等于nn次的代数精度,则该公式为插值型求积公式。

梯形积分

abf(x)dxba2[f(a)+f(b)]\int_a^bf(x)dx\approx \frac{b-a}{2}[f(a)+f(b)]

其截断误差为:

R1=(ba)312f(η), η(a,b)R_1 = -\frac{(b-a)^3}{12}f''(\eta), \ \eta \in (a,b)

梯形公式具有一次代数精度。

Simpson积分

abf(x)dxba6[f(a)+4f(a+b2)+f(b)]\int_a^bf(x)dx \approx \frac{b-a}{6}\left[ f(a)+ 4f(\frac{a+b}{2})+f(b)\right]

其截断误差为:

R2=(ba)52880f(4)(η)R_2 = -\frac{(b-a)^5}{2880}f^{(4)}(\eta)

Simpson积分有3次代数精度。

高斯型积分公式

高斯型积分公式是试图手动确定节点的位置,来实现更高的代数精度。

定理:求积公式是高斯型求积公式的充分必要条件是它的求积节点是nn次正交多项式gn(x)g_n(x)nn个零点。(注意带权函数)

求积系数为 Ai=abρ(x)li(x)dxA_i=\int_a^b\rho(x)l_i(x)dx

截断误差为:

R=f(2n)(η)an2(2n)!abρ(x)gn2(x)dxR = \frac{f^{(2n)}(\eta)}{a_n^2(2n)!}\int_a^b\rho(x)g_n^2(x)dx

故其代数精度为2n12n-1

七、常微分方程初值问题解法

初值问题

{y=f(t,y)y(t0)=y0\begin{cases} y' = f(t,y)\\ y(t_0) = y_0 \end{cases}

求上述y(x)y(x)表达式的问题即为初值问题。

李普希兹条件u1,u2,f(t,u1)f(t,u2)Lu1u2\forall u_1,u_2, |f(t,u_1)-f(t,u_2)|\le L|u_1-u_2|

若李普希兹条件成立,则该初值问题有解且唯一。

显式单步法(欧拉法)

显式单步法的一般形式是:

y0=y(x0)yn+1=yn+hf(tn,yn)y_0 = y(x_0)\\ y_{n+1} = y_n + hf(t_n,y_n)

隐式欧拉法

y0=y(x0)yn+1=yn+hf(tn+1,yn+1)y_0 = y(x_0)\\ y_{n+1} = y_n + hf(t_{n+1},y_{n+1})

两步欧拉

yn+1=yn1+2hf(xn,yn)y_{n+1} = y_{n-1} + 2hf(x_n,y_n)

梯形公式

yn+1=yn+h2[f(xn,yn)+f(xn+1,yn+1)]y_{n+1} = y_n + \frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_{n+1})]

梯形公式法可以看成显式、隐式欧拉法的平均,该方法本质还是隐式的。

改进欧拉法

先用显式欧拉法对yn+1y_{n+1}进行预测,算出yˉn+1=yn+hf(xn,yn)\bar{y}_{n+1}=y_n+hf(x_n,y_n)

再将这个预测值带入隐式的梯形公式:

yn+1=yn+h2[f(xn,yn)+f(xn+1,yˉn+1)]y_{n+1} = y_n + \frac{h}{2}[f(x_n,y_n)+f(x_{n+1},\bar{y}_{n+1})]

另一种表达为:

yp=yn+hf(xn,yn)yc=yn+hf(xn+1,yp)yn+1=12(yp+yc)y_p = y_n + hf(x_n,y_n)\\ y_c = y_n + hf(x_{n+1},y_p)\\ y_{n+1} = \frac{1}{2}(y_p+y_c)

该方法也称为预估-校正法

截断误差

初值问题单步法的一般形式为:

yn+1=yn+hϕ(xn,yn,yn+1,h)y_{n+1} = y_n + h\phi(x_n,y_n,y_{n+1},h)

整体截断误差为:ϵn=y(xn)yn\epsilon_n= y(x_n)-y_n,实际上yn=yn1+hϕ(xn,yn1,yn,h)y_n=y_{n-1}+h\phi(x_n,y_{n-1},y_{n},h)中,yn1,yny_{n-1},y_{n}是会逐步影响后序解的,所以一般使用局部截断误差R=y(xn)[y(xn1)+hϕ(xn1,y(xn1),y(xn),h)]R = y(x_n)- [y(x_{n-1})+h\phi(x_{n-1},y(x_{n-1}),y(x_n),h)],将yny_n暂时认为是精确值。

局部截断误差比较

计算截断误差可能需要的泰勒公式

  • 显式欧拉法:R=h22y(xn)+o(h3)R=\frac{h^2}{2}y''(x_n)+o(h^3)(一阶方法)
  • 隐式欧拉法:R=h22y(xn)+o(h3)R=-\frac{h^2}{2}y''(x_n)+o(h^3)(一阶方法)
  • 梯形公式法:R=h32y(xn)+o(h4)R= -\frac{h^3}{2}y'''(x_n)+o(h^4)(二阶方法)

计算截断误差阶数的方法:将R=y(xn)[y(xn1)+hϕ(xn1,y(xn1),y(xn),h)]R = y(x_n)- [y(x_{n-1})+h\phi(x_{n-1},y(x_{n-1}),y(x_n),h)]的方括号里的项运用二元泰勒公式,再对y(xn)y(x_n)运用一元泰勒公式,比较其对应的项。

精度

若单步差分公式的局部 截断误差为o(hp+1)o(h^{p+1}),则该公式为 pp阶方法。

方法的分析

相容性

相容性是指:

limh0ϕ(t,y(t),h)=f(t,y(t))\lim_{h\rarr0}\phi(t,y(t),h)=f(t,y(t))

成立。

如果增量函数ϕ(t,y,h)\phi(t,y,h)连续,且对变量hh满足李普希兹条件,则单步法与微分方程相容的充分必要条件是单步法至少是一阶的方法。

收敛性

如果下式成立

limh0yn=y(t)\lim_{h\to0} y_n=y(t)

则称单步法为收敛的。或通过整体截断误差:

limh0ϵn=0\lim_{h\to0}\epsilon_n=0

上述两式是等价的。

定理:如果增量函数ϕ(t,y,h)\phi(t,y,h)连续,并对变量yyhh满足李普希兹条件,且单步法与微分方程形容,则单步法是收敛的。

绝对稳定性

绝对稳定性是指当初值有误差e0e_0时,后续的误差将收敛到0:

limnen=0\lim_{n\to\infty}e_n = 0

考虑绝对稳定性时,一般只考虑如下的线性常系数微分方程:

y=λyy'=\lambda y

在计算绝对稳定性时,首先得到迭代格式。尝试展开迭代格式,然后将y=f(t,y)y'=f(t,y)代入,再将y=λyy'=\lambda y代入,则可以得到yn+1=Φ(h,λ)yny_{n+1}=\Phi(h,\lambda)y_n,求解Φ(h,λ)<1|\Phi(h,\lambda)|\lt1这个不等式即可。

以二级二阶R-K公式为例,其迭代格式如下

{yn+1=yn+h2(k1+k2)k1=f(tn,yn)k2=f(tn+h,yn+hk1)\begin{cases} y_{n+1}=y_n+\frac{h}{2}(k_1+k_2) \\ k_1 = f(t_n,y_n)\\ k_2 = f(t_n+h,y_n+hk_1) \end{cases}

可以先将k1,k2k_1,k_2yny_n表达出来:

k1=f(tn,yn)=y(tn)=λy(tn)=λynk2=f(tn+h,yn+hk1)=y(tn+1)=λy(tn+1)=λ(yn+hk1)=λ(yn+hλyn)k_1 = f(t_n,y_n)=y'(t_n)=\lambda y(t_n)=\lambda y_n\\ k_2 = f(t_n+h,y_n+hk_1) = y'(t_{n+1}) = \lambda y(t_{n+1})=\lambda(y_n+hk_1) = \lambda(y_n+h\lambda y_n)

k1,k2k_1,k_2代入yn+1y_{n+1}的表达式:

yn+1=yn+h2(λyn+λ(yn+hλyn))=(1+hλ+(hλ)22)yny_{n+1} = y_n+\frac{h}{2}(\lambda y_n+\lambda (y_n+h\lambda y_n))\\ = (1+h\lambda+\frac{(h\lambda)^2}{2})y_n

同理,欧拉法求初值问题的公式为:

yn+1=(1+hλ)yny_{n+1} = (1+h\lambda)y_n


《数值分析》复习笔记
http://zhouhf.top/2024/12/15/numeric-analyze/
作者
周洪锋
发布于
2024年12月15日
许可协议