逆的求法很多,下面是几种比较常见的。
强行解线性方程法
把逆矩阵的定义写出来
[
a
11
a
12
⋯
a
1
n
a
21
a
22
⋯
a
2
n
⋯
⋯
⋯
⋯
a
n
1
a
n
2
⋯
a
n
n
]
[
x
11
x
12
⋯
x
1
n
x
21
x
22
⋯
x
2
n
⋯
⋯
⋯
⋯
x
n
1
x
n
2
⋯
x
n
n
]
=
[
1
0
⋯
0
0
1
⋯
0
⋯
⋯
⋯
⋯
0
0
⋯
1
]
\left[\begin{array}{cccc} a_{11} & a_{12} & \cdots & a_{1 n} \\ a_{21} & a_{22} & \cdots & a_{2 n} \\ \cdots & \cdots & \cdots & \cdots \\ a_{n 1} & a_{n 2} & \cdots & a_{n n} \end{array}\right]\left[\begin{array}{cccc} x_{11} & x_{12} & \cdots & x_{1 n} \\ x_{21} & x_{22} & \cdots & x_{2 n} \\ \cdots & \cdots & \cdots & \cdots \\ x_{n 1} & x_{n 2} & \cdots & x_{n n} \end{array}\right]=\left[\begin{array}{cccc} 1 & 0 & \cdots & 0 \\ 0 & 1 & \cdots & 0 \\ \cdots & \cdots & \cdots & \cdots \\ 0 & 0 & \cdots & 1 \end{array}\right]
⎣⎢⎢⎡a11a21⋯an1a12a22⋯an2⋯⋯⋯⋯a1na2n⋯ann⎦⎥⎥⎤⎣⎢⎢⎡x11x21⋯xn1x12x22⋯xn2⋯⋯⋯⋯x1nx2n⋯xnn⎦⎥⎥⎤=⎣⎢⎢⎡10⋯001⋯0⋯⋯⋯⋯00⋯1⎦⎥⎥⎤
这实际上是n个系数矩阵相同(都是A)的n元方程组。LU分解显出了他的好处:它可以复用。
令
A
=
L
∗
U
A=L*U
A=L∗U
对于每一列k
L
U
A
−
1
(
k
)
=
e
(
k
)
L U A^{-1(k)}=e^{(k)}
LUA−1(k)=e(k)构成一个系数矩阵为A的n元线性方程,并把A矩阵LU分解了。知道L和U后解出每个方程的复杂度是
O
(
n
2
)
O(n^2)
O(n2)的,共有n个方程,再加上
O
(
n
3
)
O(n^3)
O(n3)的LU分解复杂度,总复杂度是
O
(
n
2
)
n
+
O
(
n
3
)
=
O
(
n
3
)
O(n^2)n+O(n^3)=O(n^3)
O(n2)n+O(n3)=O(n3)
初等变换法
这种方法是线性代数课最常用的方法,就是把E加到A右边成增广矩阵,然后行列分别高斯消元,左半部分的A变成单位矩阵后,右边变成的样子就是逆。
伴随矩阵法
逆矩阵可以写成:
A
−
1
=
A
∗
∣
A
∣
\Large A^{-1}=\frac{A^{*}}{|A|}
A−1=∣A∣A∗
其中
A
∗
=
[
M
11
⋯
M
1
n
⋮
⋱
⋮
M
n
1
⋯
M
n
n
]
A^{*}=\left[\begin{array}{ccc} M_{11} & \cdots & M_{1 n} \\ \vdots & \ddots & \vdots \\ M_{n 1} & \cdots & M_{n n} \end{array}\right]
A∗=⎣⎢⎡M11⋮Mn1⋯⋱⋯M1n⋮Mnn⎦⎥⎤
其中Mij为A[i,j]的代数余子式。
显然一共
n
2
n^2
n2个代数余子式,每个余子式是个系数乘上n-1阶行列式,求行列式最好的复杂度
O
(
n
3
)
O(n^3)
O(n3),所以最后复杂度
O
(
n
5
)
O(n^5)
O(n5)。
行列式的求法参见我的另一篇博客: