我们继续探索线性代数的世界,告别行列式,迈向矩阵的领域。
矩阵的定义:
矩阵是一个由若干个数字按照顺序排列而成的表格。例如,一个 m n 的矩阵包含 m 行和 n 列的数字,从而形成一个 m n 的表格。
矩阵运算:
矩阵运算拥有几个重要性质:
矩阵加法满足结合律和交换律。
矩阵乘法不满足交换律。
一个 m n 的矩阵与一个 n k 的矩阵相乘,结果是一个 m k 的矩阵。
虽然矩阵乘法看起来有些复杂,但仔细理解其原理,就会发现并非如此。假设 A 和 B 分别是一个 m n 和 n k 的矩阵:
矩阵乘法原理:
A 的每一行与 B 的每一列相乘,得到一个标量。然后将这些标量排列成一个 m 行 k 列的矩阵,这就是 A 与 B 的乘积。
逆矩阵:
接下来,我们介绍逆矩阵。如果一个 n 阶方阵 A 存在一个矩阵 B,使得 A⋅B 等于单位矩阵 I,则称 B 为 A 的逆矩阵。
伴随矩阵:
计算逆矩阵需要引入伴随矩阵的概念。伴随矩阵是通过将每个元素替换为其代数余子式得到的矩阵,也就是 A_ij 被替换为 C_ij。
伴随矩阵定理:
伴随矩阵有一个重要定理:
A⋅adj(A) = I
其中 I 是 n 阶单位矩阵,对角线元素均为 1,其余元素均为 0。
逆矩阵的求解:
根据伴随矩阵定理,我们可以求解矩阵的逆矩阵:
A^(-1) = adj(A)/det(A)
其中 det(A) 为 A 的行列式。
显然,AA 也是一个 n 阶的矩阵,令结果为 B。我们写出 B 矩阵当中的每一项 B_{ij}:
当 i=j 时,
在上一篇文章当中,我们介绍过,矩阵中的某一行与它对应的代数余子式的乘积为行列式的值:
这点其实没什么需要证明的,我们把式子展开就可以得到了。为了方便观察,我们用三阶行列式举例。
我们令
我们以 B12 为例:
回顾代数余子式的定义,此式可表示为下列矩阵行列式沿第一行展开的结果:
根据行列式性质,若某n阶行列式中存在两行或两列相同,则行列式值为0。
类似地,展开其他Bij可证明:
故B=|A|I,利用相同方法亦可证明A∗A=|A|I
为何如此大费周章地证明伴随矩阵?目的在于为求解逆矩阵做准备。掌握伴随矩阵的此性质后,求逆矩阵将更为简便。
在求解之前,先了解逆矩阵定义。
若存在方阵B,使得AB=BA=I,则称B为A的逆矩阵。
在我们介绍逆矩阵计算方法前,需要明确,逆矩阵不等于矩阵转置。矩阵转置操作是将矩阵的行与列调换,在线性代数中,矩阵A的转置记作AT,而A的逆矩阵记作A−1,两者看似相似,易混淆。
我们之前证明了AA∗=|A|I,当矩阵A的行列式|A|不为0时,显然有:
根据逆矩阵定义:
若|A|=0,将如何处理?
行列式为0的矩阵称为奇异矩阵,奇异矩阵没有逆矩阵。一个矩阵拥有逆矩阵的前提是其为非奇异矩阵。
以上为逆矩阵推导过程和计算方法,在实际应用中,我们不必如此繁琐。由于Python的numpy库已封装了现成的计算工具,我们只需直接调用即可,使用方法与之前的行列式计算类似:
通过调用np.linalg.inv方法获取逆矩阵:
注意,如果a为奇异矩阵,则在计算逆矩阵时会报错。在此之前,我们需要先计算矩阵的行列式,判断其是否为奇异矩阵。对行列式计算方法不