数值分析中的方程组的迭代和直接求解

方程组的迭代&直接求解

一、迭代算法

理论基础-不动点理论

x = ϕ ( x ) , x=\phi(x), x=ϕ(x),这样一种映射 ϕ ( x ) \phi(x) ϕ(x)存在使得 x x x的函数值等于其本身,这样的点看起来像是不动点
Lipzchi条件 ∣ ∣ x k + 1 − x k ∣ ∣ ≤ L ∣ ∣ ϕ ( x k + 1 ) − ϕ ( x k ) ∣ ∣ ||x_{k+1}-x_k||\leq L||\phi(x_{k+1})-\phi(x_k)|| xk+1xkLϕ(xk+1)ϕ(xk)
满足该条件的迭代公式构造的点列收敛

1.一元变量函数的迭代求解

简单迭代

构造迭代函数 x = ϕ ( x ) x=\phi(x) x=ϕ(x)

各种魔改的牛顿迭代

f ( x ) = 0 f(x)=0 f(x)=0线性化 L ( x ) = 0 L(x)=0 L(x)=0 L ( x ) = f ( x ) + f ′ ( x ) ( x − x ∗ ) = 0 L(x)=f(x)+f'(x)(x-x*)=0 L(x)=f(x)+f(x)(xx)=0,构造迭代函数 x k + 1   = x k − f ( x ) / f ′ ( x ) x^{k+1}~=x^k-f(x)/f'(x) xk+1 =xkf(x)/f(x)

2.大型方程组(多元变量)的迭代求解

大型方程组构成 A x = b Ax=b Ax=b m ∗ n m*n mn 阶矩阵,若使用直接求解法,例如经典而优美的克莱姆法则,虽然可以得到准确解 X ∗ X* X,但其计算量太高,不适用于大型矩阵的求解;采用迭代法不断逼近真实解 X ∗ X* X

朴素而经典-Jacobi迭代

改进版本的-Seidel迭代

SOR迭代(松弛迭代)

收敛条件

1个充要条件,3个判别条件:
迭代矩阵B的谱半径小于1,
ρ ( B ) < 1 \rho(B)<1 ρ(B)<1
d e t ( λ I − B ) = 0 det(\lambda I - B)=0 det(λIB)=0 解的最大值 λ m a x \lambda max λmax

范数

衡量某种距离 ∣ ∣ ⋅ ∣ ∣ ||·|| , 向量范数与矩阵范数不同
常见向量范数有: 1范数,2范数,p范数,无穷范数

常见矩阵范数有: 1范数(列范数),无穷范数(行范数),F范数(元素平方和),2范数(乘转置矩阵求特征值)

现代大规模矩阵迭代求解方法

参考资料 Yosse Sparse Matrix iterative method
比较常用的是Krylov空间方法
GMRes (Generalization minimize residual),CG (conjugate gradient),…

先看看对 A x = b Ax = b Ax=b 的理解

  1. 朴素线性方程组
    a 11 X 1 + a 12 X 2 + a 13 X 3 + . . . + a 1 n X n = 0 a_{11}X_1+a_{12}X_2+a_{13}X_3+...+a_{1n}X_n = 0 a11X1+a12X2+a13X3+...+a1nXn=0
    a 21 X 1 + a 22 X 2 + a 23 X 3 + . . . + a 2 n X n = 0 a_{21}X_1+a_{22}X_2+a_{23}X_3+...+a_{2n}X_n = 0 a21X1+a22X2+a23X3+...+a2nXn=0

    这里的系数矩阵 A A A=
    { a 11 a_{11} a11 a 12 a_{12} a12 a 13 a_{13} a13 a 1 n a_{1n} a1n
    a 21 a_{21} a21
    … }
    可以从一个微分方程组,空间离散/线性化后的得到的;

  2. 牛顿Newton角度
    让我们看看牛顿的问题
    求解非线性方程 x n + x n − 1 + x n − 2 + . . . . . + x 1 = b x^n+x^{n-1}+x^{n-2}+.....+x^1=b xn+xn1+xn2+.....+x1=b
    使用 f ( x ) = x n + x n − 1 + x n − 2 + . . . . . + x 1 − b f(x)=x^n+x^{n-1}+x^{n-2}+.....+x^1-b f(x)=xn+xn1+xn2+.....+x1b
    则问题转化为 f ( x ) = 0 f(x)=0 f(x)=0 的求根问题
    典型的牛顿Newton迭代解法
    x k + 1 = x k − f ( x k ) / f ′ ( x k ) x^{k+1}=x^k-f(x^k)/f'(x^k) xk+1=xkf(xk)/f(xk) f ′ ( x k ) f'(x^k) f(xk)是原函数 f ( x ) f(x) f(x) x k x^k xk的导数,对于多项式非线性这很好计算;
    ok,对于多个非线性方程组则可以构成一个 A x = b Ax=b Ax=b的形式;
    x 1 n + x 2 n − 1 + x 3 n − 2 + . . . . . + x n 1 = b 1 x_1^n+x_2^{n-1}+x_3^{n-2}+.....+x_n^1=b_1 x1n+x2n1+x3n2+.....+xn1=b1
    e x p x 1 + x 2 + x 3 n + . . . . . + x n 1 = b 2 exp^{x_1}+x_2+x_3^{n}+.....+x_n^1=b_2 expx1+x2+x3n+.....+xn1=b2

    其变量 x = ( x 1 , x 2 , x 3 , . . . ) T \boldsymbol{x}=(x_1,x_2,x_3,...)^T x=(x1,x2,x3,...)T 是一个向量vector,自然其函数 f = ( f 1 , f 2 , f 3 , . . . ) \boldsymbol{f}=(f_1,f_2,f_3,...) f=(f1,f2,f3,...) 也构成一个向量vector。
    则其迭代计算也变成了
    x k + 1 = x k − f ( x k ) / f ′ ( x k ) \boldsymbol{x^{k+1}=\boldsymbol{x^{k}} - \boldsymbol{f(\boldsymbol{x^k})}/\boldsymbol{f'(\boldsymbol{x^k})} } xk+1=xkf(xk)/f(xk)
    这里 f ′ ( x k ) \boldsymbol{f'(\boldsymbol{x^k})} f(xk)构成一个Jacob矩阵 J \boldsymbol{J} J=
    ∂ f 1 / ∂ x 1 , ∂ f 1 / ∂ x 2 , . . . . \partial f_1/\partial x_1, \partial f_1/\partial x_2,.... f1/x1,f1/x2,....
    ∂ f 2 / ∂ x 1 , ∂ f 2 / ∂ x 2 , . . . . \partial f_2/\partial x_1, \partial f_2/\partial x_2,.... f2/x1,f2/x2,....

    x k + 1 = x k − J − 1 f ( x k ) \boldsymbol{x^{k+1}=\boldsymbol{x^{k}} - \boldsymbol{J^{-1}}\boldsymbol{f(\boldsymbol{x^k})} } xk+1=xkJ1f(xk)
    δ x k = x k + 1 − x k \delta \bold x^k = \bold x^{k+1}- \bold x^k δxk=xk+1xk,再左乘 J \bold J J得到
    J \bold J J δ x k \delta \bold x^k δxk= f ( x k ) \boldsymbol{f(\boldsymbol{x^k}}) f(xk)
    A x = b Ax=b Ax=b形式,其中 A A A为Jacobain矩阵 J \bold J J, b b b右端向量为 f ( x k ) \boldsymbol{f(\boldsymbol{x^k}}) f(xk)
    这二者每步迭代都需要在 x k \bold {x^k} xk处更新。

  3. 最优化凸优化角度
    定义 r = A x − b r=Ax-b r=Axb,这里 r r r是余向量 redisual vector,在 r = 0 r=0 r=0 的时候 A x = b Ax=b Ax=b,所以迭代问题转化为最小化这个余向量 r r r,这个 r r r的本质是最优化问题 f ( x ) = x T A x − x T b f(x)=x^TAx-x^Tb f(x)=xTAxxTb的梯度方向向量。
    可以简单证明,若 A A A为对称正定矩阵(SPD),则 f ( x ) = x T A x − x T b f(x)=x^TAx-x^Tb f(x)=xTAxxTb 的导数为 A x − b Ax-b Axb,导数为零取得优化解,即满足 r = A x − b = 0 r=Ax-b=0 r=Axb=0
    GMRes中,迭代按照搜索方向 p k p^k pk进行, p k p^k pk与余向量 r r r和A都有关系,力求按照 α \alpha α步长每次在该方向使得 ∣ ∣ r ∣ ∣ ||r|| r到达极小 即minizie。
    例如Krylov家族的CG方法:迭代公式为 x k + 1 = x k + α k p k x^{k+1}= x^k + \alpha ^k p^k xk+1=xk+αkpk
    此方法最多需要n步即可得出解,远快于朴素的迭代方法 x = ϕ ( x ) x=\phi (x) x=ϕ(x),很适合大规模矩阵求解。

    GMRes包括Arnoldi求正交基步骤(对Krylov空间求正交基);Gevins 旋转步骤
    Krylov空间即向量 ( b , A b , A 2 b , . . . A n − 1 b ) ({{b, Ab, A^2b},...A^{n-1}b}) (b,Ab,A2b,...An1b)span 张成的空间,其向量构成的矩阵即Krylov矩阵,各向量不一定正交,不一定正定。

3. 方程组的直接求解

Gauss消元法

实质是将 A x = b Ax=b Ax=b中的A矩阵转化为同等的上三角矩阵 U U U,然后回代,解出 x x x

LU分解

将A矩阵分解为两个上下三角矩阵LU的乘积
A = L U A=LU A=LU A x = b Ax=b Ax=b L U x = b LUx=b LUx=b L y = b , U x = y Ly=b, Ux=y Ly=b,Ux=y

Doolittle分解
紧凑格式

LDU分解

A = L D U A=LDU A=LDU

追赶法

解决三对角矩阵,即 A A A是稀疏的,A呈现条带状分布
计算量少: 5n-4 + 3n-2 乘除法
存储简单:一维数组存储,a,b,c以及 alpha, beta, gamma

关注问题:大规模稀疏方程组

(1)三对角矩阵可以用直接求解:追赶法,Guass-Doolittle

(2)分块迭代

(3)CG共轭梯度法,共轭方向法的一种,利用当前梯度方向构建共轭方向
所谓共轭向量组是满足 d i A d j = 0 d_iAd_j = 0 diAdj=0的向量组,其中A是正定矩阵, x T A x x^TAx xTAx>0
S = d 0 , d 1 , d 2 , . . . d k {S={d_0,d_1,d_2,...d_k}} S=d0d1,d2,...dk,共轭向量组 S S S是线性无关的,而且是正交的
其沿着共轭方向 d i d_i di,通过 x k + 1 = x k + α k d k x_{k+1}=x_k+\alpha_k d_k xk+1=xk+αkdk构造点列 x 0 , x 1 , x 2 , . . . , x n {x_0,x_1,x_2,...,x_n} x0,x1,x2,...,xn,
优势:具有n步平方收敛
理论基础是 最优化中的求极值?而不是不动点理论

关注问题:矩阵病态问题

误差被放大倍数与条件数 cond(A)相关 c o n d ( A ) = ∣ ∣ A ∣ ∣ ⋅ ∣ ∣ A − 1 ∣ ∣ cond(A)=||A||·||A^{-1}|| cond(A)=AA1
cond(A)>>1,矩阵是病态的
矩阵预处理,降低条件数cond(A)
利用剩余向量 R = A x − b , R=Ax-b, R=Axb精确结果,直到 ∣ ∣ R ∣ ∣ < ϵ ||R||<\epsilon R<ϵ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值