复杂度计算和线性代数补充
矩阵结构和算法复杂度
-
定义Flop Count
- 浮点运算(浮点运算):两个浮点数的一个加法、减法、乘法或除法。
- 估计算法的复杂性:将flop数表示为问题维数的(多项式)函数,并通过只保留前导项
- 不是计算时间的准确预测器,支持读写,并行计算
- 是近似估计
-
举例
- x , y ∈ R n , x T y = ∑ i x i y i ⟹ n + ( n − 1 ) = 2 n − 1 ⟺ O ( n ) x,y\isin R^n,x^Ty=\sum_i{x_iy_i}\implies n+(n-1)=2n-1\iff O(n) x,y∈Rn,xTy=∑ixiyi⟹n+(n−1)=2n−1⟺O(n)
- A ∈ R m × n , x ∈ R n , A x ⟹ m ( 2 n − 1 ) ⟺ O ( m n ) = m = n O ( n 2 ) A\isin R^{m\times n},x\isin R^n,Ax\implies m(2n-1) \iff O(mn)\xlongequal{m=n} O(n^2) A∈Rm×n,x∈Rn,Ax⟹m(2n−1)⟺O(mn)m=nO(n2)
- A ∈ R m × n , B ∈ R n × p , A B ⟹ m p ( 2 n − 1 ) ⟺ O ( m n p ) = m = n = p O ( n 3 ) A\isin R^{m\times n},B\isin R^{n\times p},AB\implies mp(2n-1) \iff O(mnp)\xlongequal{m=n=p} O(n^3) A∈Rm×n,B∈Rn×p,AB⟹mp(2n−1)⟺O(mnp)m=n=pO(n3)
当A是稀疏,Banded,Toeplitz等状态下可以被分解,简化复杂度。
-
特例:线性等式【Ax=b】
-
A是对角阵, O ( n ) O(n) O(n)
-
A是下三角阵, O ( n 2 ) O(n^2) O(n2)
-
A是正交矩阵orthogonal matrices, O ( n 2 ) O(n^2) O(n2)
-
A是置换(全错排)矩阵permutation matrices, O ( 0 ) O(0) O(0)
-
用分解矩阵求解线性方程Ax=b
- 矩阵A可以由一些简单的矩阵组合得到, A = A 1 A 2 . . . A k , A i A=A_1A_2...A_k,A_i A=A1A2...Ak,Ai可能是对角矩阵,上三角矩阵等
- 求解x可以通过传递求解k个简单的等式
- 整个x向量有m个未知数待求
简化Ax=b求解的复杂度
LU分解–A是非奇异矩阵
-
简单得说就是先用矩阵L做消元,然后再左乘 L − 1 L^{-1} L−1。
比如
-
于是L矩阵就是 [ 1 0 − 3 1 ] , A = L − 1 L A = L ′ U ′ \begin{bmatrix} 1 & 0 \\ -3 & 1 \end{bmatrix},A=L^{-1}LA=L'U' [1−301],A=L−1LA=L′U′
注 : L ′ = L − 1 , U ′ = L A = [ 1 2 0 − 2 ] 注:L'=L^{-1},U'=LA=\begin{bmatrix} 1 & 2 \\ 0 & -2 \end{bmatrix} 注:L′=L−1,U′=LA=[102−2]
-
对于需要多步消元的矩阵A,可以转化为 A = L 1 − 1 . . . L n − 1 − 1 ⏟ 下三角矩阵 L n − 1 . . . L 1 A ⏟ 上三角矩阵 = L ′ U ′ A=\underbrace{L_1^{-1}...L_{n-1}^{-1}}_{\text{下三角矩阵}}\underbrace{L_{n-1}...L_{1}A}_{\text{上三角矩阵}}=L'U' A=下三角矩阵 L1−1...Ln−1−1上三角矩阵 Ln−1...L1A=L′U′
-
计算复杂度:每一k行都需要相乘和相加,于是第k行的flop=2(n-k+1)(n-k)
F l o p C o u n t = ∑ k = 1 n − 1 2 ( n − k + 1 ) ( n − k ) Flop Count=\sum_{k=1}^{n-1}2(n-k+1)(n-k) FlopCount=∑k=1n−12(n−k+1)(n−k)
= 2 ∑ k = 1 n − 1 ( n − k ) 2 + ∑ ( n − k ) ⏟ 可忽略 =2\sum_{k=1}^{n-1}(n-k)^2+\underbrace{\sum(n-k)}_{\text{可忽略}} =2∑k=1n−1(n−k)2+可忽略 ∑(n−k)
= 2 ( n − 1 ) ( 2 n − 1 ) n 6 ∼ O ( 2 3 n 3 ) =2\frac{(n-1)(2n-1)n}{6}\sim O(\frac23n^3) =26(n−1)(2n−1)n∼O(32n3)
- 假若A是稀疏矩阵,且无法实现标准的消元,可以先将矩阵A的行/列进行置换
Cholesky分解–A是对称正定矩阵
可以将A分解为 A = L L T A=LL^T A=LLT,本质还是LU分解,但是复杂度是 O ( n 3 3 ) O(\frac{n^3}{3}) O(3n3)
块求解和矩阵反转引理
分块矩阵方程求解
假如矩阵A的性质不太统一,可以将A分块,分出具有特殊性质的子矩阵.
- 复杂度:
A
11
因
为
是
对
角
矩
阵
,
所
以
A
11
−
1
∼
O
(
n
1
)
A_{11}因为是对角矩阵,所以A_{11}^{-1}\sim O(n_1)
A11因为是对角矩阵,所以A11−1∼O(n1)
自己画图领会一下- x 1 ∼ A 11 − 1 A 12 x 2 ∼ O ( n 1 n 2 ) x_1\sim A_{11}^{-1}A_{12}x_2\sim O(n_1n_2) x1∼A11−1A12x2∼O(n1n2)
- x 2 的 算 式 中 ( A 21 A 11 − 1 A 12 ) ⏟ O ( n 1 n 2 2 ) , A 21 A 11 − 1 b 1 ⏟ O ( n 2 n 1 ) ∼ O ( n 1 n 2 2 ) x_2的算式中\underbrace{(A_{21}A_{11}^{-1}A_{12})}_{O(n_1n_2^2)},\underbrace{A_{21}A_{11}^{-1}b_1}_{O(n_2n_1)}\sim O(n_1n_2^2) x2的算式中O(n1n22) (A21A11−1A12),O(n2n1) A21A11−1b1∼O(n1n22)
- 最终的矩阵等式 : [ n 2 × n 2 ] x 2 = [ n 2 × 1 ] , :[n_2\times n_2]x_2=[n_2\times1], :[n2×n2]x2=[n2×1],根据矩阵分解的复杂度计算[LU分解的结论] , A n 2 x 2 = b n 2 ∼ O ( n 2 3 ) ,A_{n_2}x_2=b_{n_2}\sim O(n_2^3) ,An2x2=bn2∼O(n23)
分块后计算的复杂度( O ( n 1 n 2 + n 1 n 2 2 + n 2 3 ) ) < < O ( ( n 1 + n 2 ) 3 ) O(n_1n_2+n_1n_2^2+n_2^3))<<O((n_1+n_2)^3) O(n1n2+n1n22+n23))<<O((n1+n2)3)
注意: A 21 ∗ A 11 − 1 b ⏟ 先算 比 A 21 A 11 − 1 ⏟ 先算 b A_{21}*\underbrace{A_{11}^{-1}b}_{\text{先算}}比\underbrace{A_{21}A_{11}^{-1}}_{\text{先算}}b A21∗先算 A11−1b比先算 A21A11−1b的复杂度降低
结构化矩阵加上低秩项
-
将等式转化为矩阵等式
-
然后求解 ( I + C A − 1 B ) y = C A − 1 b , A x = b − B y (I+CA^{-1}B)y=CA^{-1}b,Ax=b-By (I+CA−1B)y=CA−1b,Ax=b−By
y = ( I + C A − 1 B ) − 1 C A − 1 b y=(I+CA^{-1}B)^{-1}CA^{-1}b y=(I+CA−1B)−1CA−1b
假设A是对角矩阵(可逆)
x = A − 1 ( I − B ( I + C A − 1 B ) − 1 C A − 1 ) b x=A^{-1}(I-B(I+CA^{-1}B)^{-1}CA^{-1})b x=A−1(I−B(I+CA−1B)−1CA−1)b -
推导出矩阵求逆公式matrix inversion lemma
⟹ ( A + B C ) − 1 = A − 1 ( I − B ( I + C A − 1 B ) − 1 C A − 1 ) \implies (A+BC)^{-1}=A^{-1}(I-B(I+CA^{-1}B)^{-1}CA^{-1}) ⟹(A+BC)−1=A−1(I−B(I+CA−1B)−1CA−1) -
计算复杂度的两种方法
总结
- 矩阵结构和算法复杂度
- x , y ∈ R n , x T y ∼ O ( n ) x,y\isin R^n,x^Ty\sim O(n) x,y∈Rn,xTy∼O(n)
- A ∈ R m × n , x ∈ R n , A x ∼ O ( n 2 ) A\isin R^{m\times n},x\isin R^n,Ax\sim O(n^2) A∈Rm×n,x∈Rn,Ax∼O(n2)
- A ∈ R m × n , B ∈ R n × p , A B ∼ O ( n 3 ) A\isin R^{m\times n},B\isin R^{n\times p},AB\sim O(n^3) A∈Rm×n,B∈Rn×p,AB∼O(n3)
- A是对角阵 ∼ O ( n ) \sim O(n) ∼O(n)
- A是下三角阵 ∼ O ( n 2 ) \sim O(n^2) ∼O(n2)
- A是正交矩阵 ∼ O ( n 2 ) \sim O(n^2) ∼O(n2)
- A是置换矩阵 ∼ O ( 0 ) \sim O(0) ∼O(0)
- 用分解矩阵求解线性方程Ax=b
A = A 1 A 2 . . . A k , A i A=A_1A_2...A_k,A_i A=A1A2...Ak,Ai可能是对角矩阵,上三角矩阵等 - 简化Ax=b求解的复杂度(LU, Cholesky分解)
- LU分解–A是非奇异矩阵
A = L − 1 L A = L ′ U ′ , A x = b ∼ O ( 2 3 n 3 ) A=L^{-1}LA=L'U',Ax=b\sim O(\frac23n^3) A=L−1LA=L′U′,Ax=b∼O(32n3) - Cholesky分解–A是对称正定矩阵
A = L L T , A x = b ∼ O ( n 3 3 ) A=LL^T,Ax=b\sim O(\frac{n^3}{3}) A=LLT,Ax=b∼O(3n3)
- LU分解–A是非奇异矩阵
- 块求解和矩阵反转引理
- 分块矩阵方程求解
思想: 将A分块,分出具有特殊性质的子矩阵 - 结构化矩阵加上低秩项
矩阵求逆公式 ( A + B C ) − 1 = A − 1 ( I − B ( I + C A − 1 B ) − 1 C A − 1 ) (A+BC)^{-1}=A^{-1}(I-B(I+CA^{-1}B)^{-1}CA^{-1}) (A+BC)−1=A−1(I−B(I+CA−1B)−1CA−1)
- 分块矩阵方程求解