逆矩阵是矩阵理论的一个重要概念, 逆矩阵的求法一直是矩阵理论的难点。逆矩阵可以类比成数字的倒数,比如数字5的倒数是1/5,矩阵A的“倒数”是A的逆矩阵。5*(1/5)=1, A ∗ A − 1 = I A ∗ A − 1 = I ,I I 是单位矩阵。引入逆矩阵的原因之一是用来实现矩阵的除法,表达矩阵运算的结果,比如有矩阵X , A , B X , A , B ,其中X ∗ A = B X ∗ A = B ,我们要求矩阵X X 的值。本能来说,我们只需要将B / A B / A 就可以得到矩阵X X 了。但是对于矩阵来说,不存在直接相除的概念。我们需要借助逆矩阵,间接实现矩阵的除法。具体的做法是等式两边在相同位置同时乘以矩阵A A 的逆矩阵。
一 逆矩阵
如果 A B = B A = I A B = B A = I ,那么我们就称B B 是A A 的逆矩阵,写作 B = A − 1 B = A − 1 。单位矩阵英文为I d e n t i t y I d e n t i t y ,所以记作I I 。
求逆矩阵最简单的办法是用初等变换,接下来我们想求 A = [ 1 3 2 6 ] A = [ 1 3 2 6 ] 的逆矩阵。我们希望通过行变换,将[ 1 3 2 7 ] [ 1 3 2 7 ] 变为 [ 1 0 0 1 ] [ 1 0 0 1 ] 。
为此,干脆就把这两个矩阵拼在一起,[ 1 3 1 0 2 7 0 1 ] [ 1 3 1 0 2 7 0 1 ] ,对这个新的矩阵进行行变换,就相当于对方程组进行消元操作,这里需要自己体会一下。上述方法叫做高斯-约尔当方法,具体过程如下:
[ 1 3 1 0 2 7 0 1 ] → [ 1 3 1 0 0 1 − 2 1 ] → [ 1 0 7 − 3 0 1 − 2 1 ] [ 1 3 1 0 2 7 0 1 ] → [ 1 3 1 0 0 1 − 2 1 ] → [ 1 0 7 − 3 0 1 − 2 1 ]
我们再回顾一下高斯-约尔当方法,先是[ A I ] [ A I ] ,然后对 A A 与 I I 进行相同的行初等变换,使 A A 为单位阵,即左乘一个E E 矩阵。
E × [ A I ] = [ E A E I ] = [ I E I ] E × [ A I ] = [ E A E I ] = [ I E I ]
因为 E A = I E A = I ,所以 E = A − 1 E = A − 1 , E I = A − 1 E I = A − 1 ,即
E × [ A I ] = [ E A E I ] = [ I E I ] = [ I A − 1 ] E × [ A I ] = [ E A E I ] = [ I E I ] = [ I A − 1 ]
二 逆矩阵的计算
例1 试利用矩阵的初等变换求方阵A = ⎡ ⎢ ⎣ 3 2 1 3 1 5 3 2 3 ⎤ ⎥ ⎦ A = [ 3 2 1 3 1 5 3 2 3 ] 的逆矩阵。
解: 现用初等行变换求其逆矩阵:
[ A ∣ E ] = ⎛ ⎜
⎜ ⎝ 3 2 1 1 0 0 3 1 5 0 1 0 3 2 3 0 0 1 ⎞ ⎟
⎟ ⎠ r 2 + ( − 1 ) r 1 r 3 + ( − 1 ) r 1 ⎛ ⎜
⎜ ⎝ 3 2 1 1 0 0 0 − 1 4 − 1 1 0 0 0 2 − 1 0 1 ⎞ ⎟
⎟ ⎠ r 2 ( − 1 ) r 1 + ( − 2 ) r 2 ⎛ ⎜
⎜ ⎝ 3 0 9 − 1 2 0 0 1 − 4 1 − 1 0 0 0 2 − 1 0 1 ⎞ ⎟
⎟ ⎠ → ⎛ ⎜
⎜ ⎝ 1 0 0 7 / 6 2 / 3 − 3 / 2 0 1 0 − 1 − 1 2 0 0 1 − 1 / 2 0 1 / 2 ⎞ ⎟
⎟ ⎠ [ A ∣ E ] = ( 3 2 1 1 0 0 3 1 5 0 1 0 3 2 3 0 0 1 ) r 2 + ( − 1 ) r 1 r 3 + ( − 1 ) r 1 ( 3 2 1 1 0 0 0 − 1 4 − 1 1 0 0 0 2 − 1 0 1 ) r 2 ( − 1 ) r 1 + ( − 2 ) r 2 ( 3 0 9 − 1 2 0 0 1 − 4 1 − 1 0 0 0 2 − 1 0 1 ) → ( 1 0 0 7 / 6 2 / 3 − 3 / 2 0 1 0 − 1 − 1 2 0 0 1 − 1 / 2 0 1 / 2 )
故 A A 可逆,且其逆矩阵为
A − 1 = ⎡ ⎢ ⎣ 7 / 6 2 / 3 − 3 / 2 − 1 − 1 2 − 1 / 2 0 1 / 2 ⎤ ⎥ ⎦ A − 1 = [ 7 / 6 2 / 3 − 3 / 2 − 1 − 1 2 − 1 / 2 0 1 / 2 ]
例2 求矩阵A= ⎛ ⎜ ⎝ 1 0 − 2 − 3 1 4 2 − 3 4 ⎞ ⎟ ⎠ ( 1 0 − 2 − 3 1 4 2 − 3 4 ) 的逆矩阵。
解:这是一个三阶的矩阵,最简便有效的方法是初等变换法。我们将矩阵与单位矩阵排在一起,然后做初等变换
( A I ) = ⎛ ⎜
⎜
⎜
⎜ ⎝ 1 0 − 2 ⋮ 1 0 0 − 3 1 4 ⋮ 0 1 0 2 − 3 4 ⋮ 0 0 1 ⎞ ⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜ ⎝ 1 0 − 2 ⋮ 1 0 0 0 1 − 2 ⋮ 3 1 0 0 − 3 8 ⋮ − 2 0 1 ⎞ ⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜ ⎝ 1 0 − 2 ⋮ 1 0 0 0 1 − 2 ⋮ 3 1 0 0 0 2 ⋮ 7 3 1 ⎞ ⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜ ⎝ 1 0 0 ⋮ 8 3 1 0 1 0 ⋮ 10 4 1 0 0 2 ⋮ 7 3 1 ⎞ ⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜ ⎝ 1 0 0 ⋮ 8 3 1 0 1 0 ⋮ 10 4 1 0 0 1 ⋮ 7 2 3 2 1 2 ⎞ ⎟
⎟
⎟
⎟ ⎠ ( A I ) = ( 1 0 − 2 ⋮ 1 0 0 − 3 1 4 ⋮ 0 1 0 2 − 3 4 ⋮ 0 0 1 ) ∼ ( 1 0 − 2 ⋮ 1 0 0 0 1 − 2 ⋮ 3 1 0 0 − 3 8 ⋮ − 2 0 1 ) ∼ ( 1 0 − 2 ⋮ 1 0 0 0 1 − 2 ⋮ 3 1 0 0 0 2 ⋮ 7 3 1 ) ∼ ( 1 0 0 ⋮ 8 3 1 0 1 0 ⋮ 10 4 1 0 0 2 ⋮ 7 3 1 ) ∼ ( 1 0 0 ⋮ 8 3 1 0 1 0 ⋮ 10 4 1 0 0 1 ⋮ 7 2 3 2 1 2 )
所以我们得到
A − 1 = ⎛ ⎜ ⎝ 8 3 1 10 4 1 7 2 3 2 1 2 ⎞ ⎟ ⎠ A − 1 = ( 8 3 1 10 4 1 7 2 3 2 1 2 )
例3 求矩阵A=⎛ ⎜
⎜
⎜ ⎝ 1 2 3 4 2 3 1 2 1 1 1 − 1 1 0 − 2 − 6 ⎞ ⎟
⎟
⎟ ⎠ ( 1 2 3 4 2 3 1 2 1 1 1 − 1 1 0 − 2 − 6 ) 的逆矩阵。
解:我们将下述矩阵做初等变换
( A I ) = ⎛ ⎜
⎜
⎜
⎜
⎜
⎜
⎜ ⎝ 1 2 3 4 ⋮ 1 0 0 0 2 3 1 2 ⋮ 0 1 0 0 1 1 1 − 1 ⋮ 0 0 1 0 1 0 − 2 − 6 ⋮ 0 0 0 1 ⎞ ⎟
⎟
⎟
⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜
⎜
⎜
⎜ ⎝ 1 0 − 2 − 6 ⋮ 0 0 0 1 2 3 1 2 ⋮ 0 1 0 0 1 1 1 − 1 ⋮ 0 0 1 0 1 2 3 4 ⋮ 1 0 0 0 ⎞ ⎟
⎟
⎟
⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜
⎜
⎜
⎜ ⎝ 1 0 − 2 − 6 ⋮ 0 0 0 1 0 3 5 14 ⋮ 0 1 0 − 2 0 1 3 5 ⋮ 0 0 1 − 1 0 2 5 10 ⋮ 1 0 0 − 1 ⎞ ⎟
⎟
⎟
⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜
⎜
⎜
⎜ ⎝ 1 0 − 2 − 6 ⋮ 0 0 0 1 0 1 3 5 ⋮ 0 0 1 − 1 0 3 5 14 ⋮ 0 1 0 − 2 0 2 5 10 ⋮ 1 0 0 − 1 ⎞ ⎟
⎟
⎟
⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜
⎜
⎜
⎜ ⎝ 1 0 − 2 − 6 ⋮ 0 0 0 1 0 1 3 5 ⋮ 0 0 1 − 1 0 0 − 4 − 1 ⋮ 0 1 − 3 1 0 0 − 1 0 ⋮ 1 0 − 2 1 ⎞ ⎟
⎟
⎟
⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜
⎜
⎜
⎜ ⎝ 1 0 − 2 − 6 ⋮ 0 0 0 1 0 1 3 5 ⋮ 0 0 1 − 1 0 0 − 1 0 ⋮ 1 0 − 2 1 0 0 − 4 − 1 ⋮ 0 1 − 3 1 ⎞ ⎟
⎟
⎟
⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜
⎜
⎜
⎜ ⎝ 1 0 − 2 − 6 ⋮ 0 0 0 1 0 1 3 5 ⋮ 0 0 1 − 1 0 0 − 1 0 ⋮ 1 0 − 2 1 0 0 0 − 1 ⋮ − 4 1 5 − 3 ⎞ ⎟
⎟
⎟
⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜
⎜
⎜
⎜ ⎝ 1 0 − 2 0 ⋮ 24 − 6 − 30 19 0 1 3 0 ⋮ − 20 5 26 − 16 0 0 − 1 0 ⋮ 1 0 − 2 1 0 0 0 − 1 ⋮ − 4 1 5 − 3 ⎞ ⎟
⎟
⎟
⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜
⎜
⎜
⎜ ⎝ 1 0 0 0 ⋮ 22 − 6 − 26 17 0 1 0 0 ⋮ − 17 5 20 − 13 0 0 − 1 0 ⋮ 1 0 − 2 1 0 0 0 − 1 ⋮ − 4 1 5 − 3 ⎞ ⎟
⎟
⎟
⎟
⎟
⎟
⎟ ⎠ ∼ ⎛ ⎜
⎜
⎜
⎜
⎜
⎜
⎜ ⎝ 1 0 0 0 ⋮ 22 − 6 − 26 17 0 1 0 0 ⋮ − 17 5 20 − 13 0 0 1 0 ⋮ − 1 0 2 − 1 0 0 0 1 ⋮ 4 − 1 − 5 3 ⎞ ⎟
⎟
⎟
⎟
⎟
⎟
⎟ ⎠ ( A I ) = ( 1 2 3 4 ⋮ 1 0 0 0 2 3 1 2 ⋮ 0 1 0 0 1 1 1 − 1 ⋮ 0 0 1 0 1 0 − 2 − 6 ⋮ 0 0 0 1 ) ∼ ( 1 0 − 2 − 6 ⋮ 0 0 0 1 2 3 1 2 ⋮ 0 1 0 0 1 1 1 − 1 ⋮ 0 0 1 0 1 2 3 4 ⋮ 1 0 0 0 ) ∼ ( 1 0 − 2 − 6 ⋮ 0 0 0 1 0 3 5 14 ⋮ 0 1 0 − 2 0 1 3 5 ⋮ 0 0 1 − 1 0 2 5 10 ⋮ 1 0 0 − 1 ) ∼ ( 1 0 − 2 − 6 ⋮ 0 0 0 1 0 1 3 5 ⋮ 0 0 1 − 1 0 3 5 14 ⋮ 0 1 0 − 2 0 2 5 10 ⋮ 1 0 0 − 1 ) ∼ ( 1 0 − 2 − 6 ⋮ 0 0 0 1 0 1 3 5 ⋮ 0 0 1 − 1 0 0 − 4 − 1 ⋮ 0 1 − 3 1 0 0 − 1 0 ⋮ 1 0 − 2 1 ) ∼ ( 1 0 − 2 − 6 ⋮ 0 0 0 1 0 1 3 5 ⋮ 0 0 1 − 1 0 0 − 1 0 ⋮ 1 0 − 2 1 0 0 − 4 − 1 ⋮ 0 1 − 3 1 ) ∼ ( 1 0 − 2 − 6 ⋮ 0 0 0 1 0 1 3 5 ⋮ 0 0 1 − 1 0 0 − 1 0 ⋮ 1 0 − 2 1 0 0 0 − 1 ⋮ − 4 1 5 − 3 ) ∼ ( 1 0 − 2 0 ⋮ 24 − 6 − 30 19 0 1 3 0 ⋮ − 20 5 26 − 16 0 0 − 1 0 ⋮ 1 0 − 2 1 0 0 0 − 1 ⋮ − 4 1 5 − 3 ) ∼ ( 1 0 0 0 ⋮ 22 − 6 − 26 17 0 1 0 0 ⋮ − 17 5 20 − 13 0 0 − 1 0 ⋮ 1 0 − 2 1 0 0 0 − 1 ⋮ − 4 1 5 − 3 ) ∼ ( 1 0 0 0 ⋮ 22 − 6 − 26 17 0 1 0 0 ⋮ − 17 5 20 − 13 0 0 1 0 ⋮ − 1 0 2 − 1 0 0 0 1 ⋮ 4 − 1 − 5 3 )
所以,我们得到
A − 1 = ⎛ ⎜
⎜
⎜ ⎝ 22 − 6 − 26 17 − 17 5 20 − 13 − 1 0 2 − 1 4 − 1 − 5 3 ⎞ ⎟
⎟
⎟ ⎠ A − 1 = ( 22 − 6 − 26 17 − 17 5 20 − 13 − 1 0 2 − 1 4 − 1 − 5 3 )
三 逆矩阵加密
逆矩阵加密是一种基于线性代数的加密方法,使用矩阵与其逆矩阵的特性实现对数据的加密和解密。此方法广泛应用于密码学中的基础研究和某些对安全性要求较高的场景。以下我们通过一个具体的例子,演示如何利用逆矩阵实现加密和解密。
3.1 逆矩阵加密的基本原理
加密矩阵
首先选择一个可逆矩阵 A A 作为加密矩阵。为了保证矩阵 A A 可逆,必须满足矩阵 A A 的行列式 det ( A ) ≠ 0 det ( A ) ≠ 0 。矩阵 A A 应具有适当的维度,通常选择方阵,如 2 × 2 , 3 × 3 2 × 2 , 3 × 3 等。
明文表示为矩阵
明文数据需转化为矩阵形式。例如,可以通过将字符映射为数字(如 ASCII 码或自定义映射表)后,再将其整理为与 A A 兼容的矩阵。
加密过程
将明文矩阵 M M 与加密矩阵 A A 相乘,得到密文矩阵 C C :
C = A ⋅ M C = A ⋅ M
解密过程
解密时,使用加密矩阵 A A 的逆矩阵 A − 1 A − 1 ,通过以下运算还原明文:
M = A − 1 ⋅ C M = A − 1 ⋅ C
3.2 逆矩阵加密过程
假设需要对明文 “HELLO” 进行加密和解密。
字符到数字的映射
将字母转化为数字,使用 A=1, B=2, ..., Z=26 的映射规则:
明文 “HELLO” 对应为 [ 8 , 5 , 12 , 12 , 15 ] [ 8 , 5 , 12 , 12 , 15 ] 。
组织为矩阵
将上述数字整理为 2 × 3 2 × 3 的矩阵(不足部分补 0):
M = [ 8 5 12 12 15 0 ] M = [ 8 5 12 12 15 0 ]
选择加密矩阵
选择一个可逆的 2 × 2 2 × 2 矩阵 A A :
A = [ 2 3 1 2 ] A = [ 2 3 1 2 ]
验证其可逆性:
行列式 det ( A ) = 2 ⋅ 2 − 3 ⋅ 1 = 1 ≠ 0 det ( A ) = 2 ⋅ 2 − 3 ⋅ 1 = 1 ≠ 0 ,因此 A A 可逆。
进行加密
加密公式为 C = A ⋅ M C = A ⋅ M 。计算得到:
C = [ 2 3 1 2 ] ⋅ [ 8 5 12 12 15 0 ] = [ 56 61 24 32 35 24 ] C = [ 2 3 1 2 ] ⋅ [ 8 5 12 12 15 0 ] = [ 56 61 24 32 35 24 ]
密文矩阵 C C 为:
C = [ 56 61 24 32 35 24 ] C = [ 56 61 24 32 35 24 ]
解密过程
根据解密公式 M = A − 1 ⋅ C M = A − 1 ⋅ C ,需要先求 A A 的逆矩阵 $ A^{-1} 。 。 A^{-1} $ 的计算公式为:
A − 1 = 1 det ( A ) ⋅ [ d − b − c a ] A − 1 = 1 det ( A ) ⋅ [ d − b − c a ]
其中 a , b , c , d a , b , c , d 是矩阵 A A 的元素。对于 A A :
A − 1 = [ 2 − 3 − 1 2 ] A − 1 = [ 2 − 3 − 1 2 ]
将其代入解密公式:
M = A − 1 ⋅ C = [ 2 − 3 − 1 2 ] ⋅ [ 56 61 24 32 35 24 ] = [ 8 5 12 12 15 0 ] M = A − 1 ⋅ C = [ 2 − 3 − 1 2 ] ⋅ [ 56 61 24 32 35 24 ] = [ 8 5 12 12 15 0 ]
解密后恢复的明文矩阵 M M 为:
M = [ 8 5 12 12 15 0 ] M = [ 8 5 12 12 15 0 ]
转换回明文
将矩阵中的数字转换回字母:
8 → H, 5 → E, 12 → L, 12 → L, 15 → O
最终明文为 “HELLO”。
3.3 注意事项
矩阵的选择
加密矩阵必须是可逆矩阵,且行列式应尽可能避免为 1 或其他容易破解的值,以提升安全性。
计算精度
矩阵运算可能涉及分数或浮点数,应保证计算精度以避免解密错误。
补位处理
若明文长度不足以填充矩阵,可用占位符(如 0 或特定字符)进行填充,解密时需要移除这些占位符。
通过上述示例,可以清楚地看到逆矩阵加密的完整过程。这种方法在数据加密的数学基础上具有很强的理论意义,但在实际应用中可能需要结合其他方法提升安全性,例如更复杂的密钥生成算法或更高维度的矩阵操作。
总结
初等行变换(高斯消元法)是求解矩阵逆的一种经典方法,也是线性代数中的重要内容。其核心思想是通过一系列初等行变换将矩阵A A 化为单位矩阵I I ,同时对单位矩阵I I 施加相同的变换,最终得到A − 1 A − 1 。具体操作是将矩阵A A 与单位矩阵I I 拼接成增广矩阵[ A ∣ I ] [ A ∣ I ] ,经过高斯消元法进行行变换,若A A 可逆,则可以将其左侧部分变为单位矩阵,同时右侧部分就会变为逆矩阵A − 1 A − 1 。值得注意的是,两个可逆矩阵的乘积依然可逆,其逆矩阵为单独逆矩阵的乘积按相反顺序排列。尽管高斯消元法在理论上清晰且易于理解,但由于计算复杂度较高,现实应用中常用更高效的方法(如 LU 分解或 QR 分解)来求解逆矩阵。
参考文献
如何求矩阵的逆矩阵
数学技巧篇51:逆矩阵求法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!