线性代数数值计算注解

线性代数数值计算注解

Chp1 线性代数中的方程组

  1. 浮点数,因为储存原因存在“四舍五入”误差
  2. 对于方阵,一般使用消元法
  3. 部分主元法:通常选择一列中绝对值最大的元素作为主元,减少舍入误差
  4. 矩阵先前化简需要 O ( n 3 ) O(n^3) O(n3)计算,向后化简只需要次 O ( n 2 ) O(n^2) O(n2)次计算
  5. C语言编写计算 A X AX AX 会考虑使用 X T A T X^TA^T XTAT

Chp2 矩阵代数

  1. 计算 A B AB AB的速度依赖于储存方法,按列计算,可以使用并行算法,或按行计算

  2. 实际中很少计算 A − 1 A^{-1} A1,除非需要其中的元素,计算 A − 1 A^{-1} A1次数为解 A x = b Ax =b Ax=b的3倍,且行变换可能更准确

  3. 实际中会遇到“接近奇异”病态的矩阵,该矩阵可逆,但是稍微改变其中的元素就会变成奇异矩阵,此时行变换可能由于舍入误差产生少于n个主元位置,有时舍入误差也可能奇异矩阵变成可逆

  4. 某些程序计算条件数,条件数越大,越接近奇异。单位阵条件数为1,奇异矩阵条件数无穷大,极端情况下,矩阵程序可能无法区分奇异矩阵和病态矩阵

  5. 当方程 A x = b Ax=b Ax=b的右端有一点变化,例如 A x = b + Δ b Ax = b+\Delta b Ax=b+Δb,方程的解变为 x + Δ x x+\Delta x x+Δx,此处 Δ x \Delta x Δx满足 A Δ x = Δ b A\Delta x=\Delta b AΔx=Δb,商 ∣ ∣ Δ b ∣ ∣ / ∣ ∣ b ∣ ∣ ||\Delta b||/||b|| Δb/b称为 b b b的相对改变(误差),解的相对改变为 ∣ ∣ Δ x ∣ ∣ / ∣ ∣ x ∣ ∣ ||\Delta x||/||x|| Δx/x,当A可逆时,记A的条件数为 c o n d ( A ) cond(A) cond(A),不可逆时A的条件数为无穷大,有如下不等式
    ∣ ∣ Δ x ∣ ∣ ∣ ∣ x ∣ ∣ ≤ c o n d ( A ) ⋅ ∣ ∣ Δ b ∣ ∣ ∣ ∣ b ∣ ∣ \frac{||\Delta x||}{||x||} \leq cond(A) \cdot \frac{||\Delta b||}{||b||} xΔxcond(A)bΔb

  6. 例:P116, Hilbert矩阵 A i j = 1 i + j − 1 A_{ij} = \frac{1}{i+j-1} Aij=i+j11
    [ 1 1 / 2 1 / 3 1 / 4 1 / 2 1 / 3 1 / 4 1 / 5 1 / 3 1 / 4 1 / 5 1 / 6 1 / 4 1 / 5 1 / 6 1 / 7 ] \begin{bmatrix} 1 & 1/2 & 1/3 &1/4\\ 1/2 & 1/3 &1/4 & 1/5\\ 1/3 & 1/4& 1/5 & 1/6\\ 1/4 & 1/5 & 1/6 &1/7 \end{bmatrix} 11/21/31/41/21/31/41/51/31/41/51/61/41/51/61/7

  7. MatLab命令:hilb(),高度病态。11阶或以上Hilbert矩阵MatLab不能正常求逆

  8. MatLab Linsolve使用LU分解,或QR分解,解线性方程组,但是位于 m × n m\times n m×n的矩阵只返回一个特解 m > n m >n m>n

  9. 矩阵过大的时候,使用分块矩阵会更有效

  10. 对于解方程 A x = b Ax = b Ax=b,可以把A写成 I − C I-C IC x = ( I − C ) − 1 b x = (I-C)^{-1}b x=(IC)1b,其中 ( I − C ) − 1 (I-C)^{-1} (IC)1可以如下计算
    ( I − C ) ( I + C + C 2 + C 3 + ⋯ + C m ) = I − C m + 1 (I-C)(I+C+C^2+C^3+\dots +C^m) = I-C^{m+1} (IC)(I+C+C2+C3++Cm)=ICm+1
    m → ∞ m\rightarrow \infty m时,若有 C m → 0 C^m \rightarrow 0 Cm0,则可以使用 I + C + C 2 + C 3 + ⋯ + C m I+C+C^2+C^3+\dots +C^m I+C+C2+C3++Cm作为 ( I − C ) − 1 (I-C)^{-1} (IC)1近似。

矩阵LU分解

对于 n × n n\times n n×n的稠密矩阵, n n n足够大 n ≥ 30 n\geq 30 n30,有

  1. 计算 A A A的LU分解大约需要 2 n 3 / 3 2n^3/3 2n3/3浮点运,近似于化简 [ A b ] [A \quad b] [Ab]相同,而求 A − 1 A^{-1} A1需要 2 n 3 2n^3 2n3次运算
  2. L y = b Ly = b Ly=b U x = y Ux = y Ux=y,即 L U x = b LUx = b LUx=b 大约需要 2 n 2 2n^2 2n2次浮点运算,任意 n × n n\times n n×n三角方程组可以大约 n 2 n^2 n2用浮点算解出
  3. 把b乘以 A − 1 A^{-1} A1也需要 2 n 2 2n^2 2n2次浮算,而且有可能不如LU分解计算来的精确,由于计算 A − 1 A^{-1} A1 A − 1 b A^{-1}b A1b存在舍入误差
  4. A A A是稀疏矩阵,如带状,有两到三条对角线,则L和U也可能是稀疏的然而 A − 1 A^{-1} A1可能是稠密的,此时LU分解解方程 A X = b AX=b AX=b可能会快很多

Chp3 行列式

  1. 行列式的计算不使用代数余子式展开,而是用消元法化简成上三角形式, n × n n \times n n×n行列式大约需要 2 n 3 / 3 2n^3/3 2n3/3次计算
  2. 克拉默法则仅限于理论分析稳定性,并不实际应用,对于逆矩阵公式夜市同样情况

Chp4 向量空间

  1. 确定矩阵的秩通常使用SVD分解,考虑 Σ \Sigma Σ对角矩阵中非零元个数,使用行化简形式来确定秩会因为舍入误差而导致得出错误的结果,例如
    [ 5 7 5 6.99999999 ] \begin{bmatrix} 5&7\\ 5 & 6.99999999 \end{bmatrix} [5576.99999999]
    这取决于计算机储存及计算精度。SVD分解还用于得到四个子空间的基向量。

  2. MatLab使用rref来确定NullSpace,null命令

  3. 计算 P k x 0 P^{k}x_0 Pkx0,先计算 P k P^{k} Pk再计算 P k x 0 P^{k}x_0 Pkx0和计算 P x 0 , P ⋅ P x 0 , P ⋅ P 2 x 0 Px_0,\quad P\cdot Px_0, \quad P\cdot P^{2}x_0 Px0,PPx0,PP2x0不同,前者需要的计算更多。

Chp5 特征值和特征向量

  1. 对于一般的矩阵( n ≥ 5 n \geq 5 n5),没有公式或有限算法求解特征方程.

  2. MatLab先求特征值 λ 1 , λ 2 , ⋯   , λ n \lambda_1, \lambda _2, \cdots,\lambda_n λ1,λ2,,λn,然后展开 ( λ − λ 1 ) ( λ − λ 2 ) ⋯ ( λ − λ n ) (\lambda-\lambda_1)(\lambda-\lambda_2)\cdots(\lambda-\lambda_n) (λλ1)(λλ2)(λλn)的积来的得到特征多项式

  3. 有相同的特征值不一定相似

  4. 有些算法基于矩阵相似估计特征值,QR算法能有效估计特征值。当 A = A T A = A^T A=AT时,可以使用雅可比方法来计算形如
    A 1 = A , A k + 1 = P k − 1 A k P k ( k = 1 , 2 , ⋯   ) A_1 = A,A_{k+1} = P_{k}^{-1}A_{k}P_{k}\quad(k=1,2,\cdots) A1=A,Ak+1=Pk1AkPk(k=1,2,)
    的矩阵序列。序列中每个矩阵都相似与 A , 因 此 与 A,因此与 A A A A有相同的特征值,当k增大时, A k + 1 A_{k+1} Ak+1的非对角线元素趋于0,而主对角线上的元素就近似为A的特征值。

  5. 幂算法迭代估计绝对值最大特征根Page317

  6. 逆幂法估计A的特征值和特征向量Page320

  7. 幂算法和逆幂法对于简单情况适用

QR算法求特征值

  • 算法产生矩阵序列,序列中的矩阵全部相似与A,矩阵几乎是上三角的,并且主对角线上的元素近似为 A A A的特征值
  • 主要思想:做QR分解。把A或相似于A的矩阵分解为 A = Q 1 R 1 A = Q_1R_1 A=Q1R1,这里 Q 1 T = Q 1 − 1 Q^T_{1}=Q^{-1}_{1} Q1T=Q11,Q为正交矩阵,而 R 1 R_{1} R1是上三角矩阵。交换 Q 1 Q_1 Q1 R 1 R_1 R1形成 A = R 1 Q 1 A = R_1Q_1 A=R1Q1 A 1 A_1 A1又被分解成为 A 1 = Q 2 R 2 A_1 = Q_2R_2 A1=Q2R2,然后令 A 2 = R 2 Q 2 A_2 = R_2Q_2 A2=R2Q2,依次构造 A k A_k Ak
  • MatLab使用QR算法计算特征值和特征向量,参见一般数值分析教材。对一元高次方程,MatLab将其转化为特征方程形式求特征值,特征值即为方程的根。(roots函数)
  • 一个豪斯霍尔德矩阵或者基本矩阵镜像具有如下形式 Q = I − 2 u T u Q=I-2u^Tu Q=I2uTu,此处u为单位向量,则Q为正交矩阵。基本镜像经常用于在计算机程序中产生矩阵A的一QR分解。如果A具有线性无关的列,那么一系列基本镜像的左乘可以产一个上三角矩阵

Chp6 正交性和最小二乘法

  1. QR 分解得到 R R R为可逆矩阵(坐标唯一性),

  2. 在使用格拉姆-施密特方法的过程中,因为每个向量都会四舍五入,引起后面得到的向量误差逐渐增大,对于较大的 j 和 k ​ j和k​ jk( j ≠ k ​ j \neq k​ j̸=k), u j T u k ​ u_j^Tu_k​ ujTuk也许不会充分接近0,通过重新安排计算的阶,这类正交性的损失可以大大减少。矩阵的QR分解常常使用格拉姆-施密特正交化方法,因为它会得到更为精确的标准正交基,但是分解时间有可能加倍

  3. 为了实现矩阵 A A A的QR分解,程序常常会对 A A A左乘一些列正交矩阵使得结果变成一个上三角矩阵,这个构造过程有点类似于 A A A左乘一系列初等矩阵,最后得到 A A A的LU分解。

  4. 对矩阵 A A A做QR分解时,使用格拉姆-施密特方法得到正交矩阵Q,那么 R = Q − 1 A = Q T A R =Q^{-1}A = Q^TA R=Q1A=QTA

  5. A A A的QR分解, A = [ x 1 , x 2 , ⋯   , x p ] A = [x_1,x_2,\cdots,x_p] A=[x1,x2,,xp],若 n × k n\times k n×k矩阵Q的列构成A的前k列子空间 W k W_k Wk的一个标准正交基,那么对于 R n \mathbb{R}^n Rn中的向量 x x x Q Q T x QQ^Tx QQTx x x x W k W_k Wk上的正交投影。如果 X k + 1 X_{k+1} Xk+1是A的下一列,那么可以取
    v k + 1 = x k + 1 − Q ( Q T x k + 1 ) v_{k+1} = x_{k+1}-Q(Q^Tx_{k+1}) vk+1=xk+1Q(QTxk+1)
    括号用于减少计算,取 u k + 1 = v k + 1 / ∣ ∣ v k + 1 ∣ ∣ u_{k+1} = v_{k+1}/\mid\mid v_{k+1}\mid\mid uk+1=vk+1/vk+1,得到新的Q,重复上述步骤即可的得到 A A A的QR分解。

  6. 某些时候,最小二乘问题的法方程(正规方程)可能是病态的(A的两列高度相关),也就是 A T A A^TA ATA中的元素在计算中出现较小的误差,可能导致 x ^ \hat x x^的较大误差。如果A的列线性无关,最小二乘解常常可通过A的QR分解可靠的求出。

  7. 最小二乘求解
    A = Q R A T A x ^ = A T b A T A = R T Q T Q R = R T R R T R x ^ = R T Q T b R x ^ = Q T b \begin{aligned} A &= QR \\ A^TA\hat x &= A^Tb\\ A^TA &= R^TQ^TQR =R^TR \\ R^TR\hat x &= R^TQ^Tb\\ R\hat x &= Q^Tb \end{aligned} AATAx^ATARTRx^Rx^=QR=ATb=RTQTQR=RTR=RTQTb=QTb
    解最后一个方程,使用行变换会更快。

  8. r a n k   A = r a n k   A T A rank \ A = rank \ A^TA rank A=rank ATA

Chp7 对称矩阵和二次型

谱定理

一个对称的 n × n n \times n n×n实矩阵具有下面性质

  1. A有n个实特征值,包括重复的特征根
  2. 特征空间相互正交,这种正交性是在特征向量对应不同特征值意义下成立的
  3. A可以对角化
  4. 对每一个特征值,对应特征空间的维数等于 λ \lambda λ作为特征方程的更的重数
证明思路
性质1

由代数基本定理,任意一元n次方程有n个复根,设矩阵A的特征方程根为 λ \lambda λ,对应的特征向量为 x x x

(1) A x = λ x A x ˉ = λ ˉ x ˉ x ˉ T A = λ ˉ x ˉ T x ˉ T A x = λ ˉ x ˉ T x \begin{aligned} Ax &= \lambda x \\ A\bar x &= \bar \lambda \bar x\\ \bar x ^T A &= \bar \lambda \bar x^T \\ \bar x ^T A x &= \bar \lambda \bar x^T x \tag{1}\\ \end{aligned} AxAxˉxˉTAxˉTAx=λx=λˉxˉ=λˉxˉT=λˉxˉTx(1)
又因为
(2) A x = λ x x ˉ T A x = λ x ˉ T x \begin{aligned} Ax &= \lambda x \\ \bar x^T Ax &= \lambda \bar x^T x \tag{2} \end {aligned} AxxˉTAx=λx=λxˉTx(2)
所以由(1)(2)可得
λ ˉ x ˉ T x = λ x ˉ T x \bar \lambda \bar x^T x = \lambda \bar x^T x λˉxˉTx=λxˉTx
所以
λ ˉ = λ \bar \lambda = \lambda λˉ=λ
所以$\lambda $是实数

性质2

v 1 , v 2 v_1, v_2 v1,v2是对应不同特征值 λ 1 , λ 2 \lambda_1, \lambda_2 λ1,λ2的特征向量,那么
λ 1 v 1 T v 2 = ( A v 1 ) T v 2 = v 1 T A v 2 = λ 2 v 1 T v 2 \begin{aligned} \lambda_1v_1^Tv_2&=(Av_1)^Tv_2 \\ &=v_1^TAv_2 \\ &= \lambda _2v_1^Tv_2 \end{aligned} λ1v1Tv2=(Av1)Tv2=v1TAv2=λ2v1Tv2
所以 ( λ 1 − λ 2 ) v 1 T v 2 = 0 (\lambda_1-\lambda_2)v_1^Tv_2 = 0 (λ1λ2)v1Tv2=0,所以 v 1 T v 2 = 0 v_1^Tv_2=0 v1Tv2=0

性质3

首先引入矩阵舒尔分解(实舒尔分解, A A A, U U U, R R R均为实矩阵)。

舒尔分解: n × n n \times n n×n矩阵A可以分解成 A = U R U T A=URU^T A=URUT,且 U U U为正交矩阵, R R R为上三角矩阵。

  1. 如果矩阵 A A A可以舒尔分解,那么 A A A具有n个特征值,计算包含重数,证明简单从略
  2. 假设 A A A具有n个实特征根( λ 1 , λ 2 , ⋯   , λ n \lambda_1, \lambda_2,\cdots,\lambda_n λ1,λ2,λn),则A有一个实舒尔分解

u 1 u_1 u1是对应于 λ 1 \lambda_1 λ1的单位特征向量, u 2 , ⋯   , u n u_2,\cdots,u_n u2,,un是其余向量,且 { u 1 , u 2 , ⋯   , u n } \{u_1,u_2,\cdots,u_n\} {u1,u2,,un} R n \mathbb{R}^n Rn的单位正交基,取 U = [ u 1 , u 2 , ⋯   , u n ] U=[u_1,u_2,\cdots,u_n] U=[u1,u2,,un],那么 U T A U U^TAU UTAU的第一列为
U T λ 1 u 1 = λ 1 [ u 1 T u 2 T ⋮ u n T ] u 1 = λ 1 [ 1 0 ⋮ 0 ] U^T\lambda_1u_1 = \lambda_1\begin{bmatrix} u_1^T\\ u_2^T \\ \vdots \\u_n^T \end{bmatrix}u_1 = \lambda_1\begin{bmatrix}1\\0\\\vdots\\0 \end{bmatrix} UTλ1u1=λ1u1Tu2TunTu1=λ1100
这表明 U T A U U^TAU UTAU具有以下形式
[ λ 1 ∗ ∗ ∗ ∗ 0 ⋮ A 1 0 ] \begin{bmatrix} \lambda_1&*&*&*&*\\ 0 & \\ \vdots & & \large {A_1}& \\ 0 & \end{bmatrix} λ100A1
其中 A 1 A_1 A1的特征向量为 λ 2 , ⋯   , λ n \lambda_2, \cdots,\lambda_n λ2,,λn

由舒尔分解性质2知,对称矩阵有舒尔分解 A = U R U T A = URU^T A=URUT,又因为A是对称的,两边转置得到
A T = U R T U T A^T = UR^TU^T AT=URTUT
所以 R T = R R^T = R RT=R,又因为R是上三角矩阵,R必须是对角矩阵。于是矩阵A的舒尔分解 U R U T URU^T URUT就是A的正交对角化。

性质4

由性质3,容易知道对于k重根 λ \lambda λ,其必定对应k个线性无关特征向量。
A = Q D Q T = [ u 1 , ⋯   , u n ] [ λ 1 0 ⋱ 0 λ n ] [ u 1 T ⋮ u n T ] = [ λ 1 u 1 , ⋯   , λ n u n ] [ u 1 T ⋮ u n T ] = λ 1 u 1 u 1 T + ⋯ + λ n u n u n T \begin{aligned} A&=QDQ^T=\begin{bmatrix}u_1,\cdots,u_n\end{bmatrix} \begin{bmatrix}\lambda_1 &&0\\&\ddots&\\0&&\lambda_n&\end{bmatrix} \begin{bmatrix}u_1^T\\ \vdots \\ u_n^T \end{bmatrix}\\ &=\begin{bmatrix}\lambda_1u_1,\cdots,\lambda_nu_n \end{bmatrix} \begin{bmatrix}u_1^T\\ \vdots \\u_n^T \end{bmatrix} \\ &= \lambda_1u_1u^T_1 + \cdots+ \lambda_nu_nu_n^T \end{aligned} A=QDQT=[u1,,un]λ100λnu1TunT=[λ1u1,,λnun]u1TunT=λ1u1u1T++λnununT

数值计算注解

  • 对于对称矩阵,计算机可以快速精确计算特征值和特征向量,见Chp5对角化注解,利用正交矩阵可逆避免误差累计
  • 确定对称矩阵A是正定的最快方式:A有n个正主元,类似于LU分解,通过对A消元即可。当A是对称矩阵时, A = R T R A = R^TR A=RTR,其中R是上三角矩阵。 A = Q D Q T A = QDQ^T A=QDQT,令 D = C T C D=C^TC D=CTC,C也是对角矩阵,$A=QCTCQT = , 令 ,令 R=QCQT$,则$RTR = QCTQTQCQ^T = QDQ^T$。
  • 估计大矩阵的秩时,最可靠的方法是计算非零奇异值的个数(MatLab使用该方法[^1]),在这种情况下,特别小的非零奇异值在实际计算中常假定为零,矩阵A的有效秩是剩余非零奇异值数目。
  • 奇异值计算应该避免计算 A T A A^TA ATA,原因是任何A中元素的误差在 A T A A^TA ATA中被平方,存在快速的迭代方法,可计算到精确很多位数的矩阵A的奇异值和左右奇异向量。

[1] MatLab 2018a rank 函数源代码

Refference :Linear Algebra and It’s Applications 4th, David C. Lay, China Machine Press

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值