已知某家庭近3周对猪肉、牛肉、鸡蛋消费支出分别为154元、153元、153元,试计算该家庭每周对猪肉、牛肉、鸡蛋的需求量。
猪肉、牛肉、鸡蛋价格见下表:
可以列方程组求解,设该家庭每周对猪肉、牛肉、鸡蛋的需求分别为x千克、y千克、z千克,可列出三元一次方程组:
我们使用矩阵来解上面的方程组,方程组的系数用矩阵A表示,方程组的未知项用矩阵x表示,已知项用矩阵b表示。
方程组可表示为:
若A、x和b不是矩阵,x很容易求解:
矩阵没有定义除法运算,1/A对矩阵运算来说没有意义,但我们可以引入单位矩阵和逆矩阵这两个概念,来完成矩阵的除法运算。
在我们学过的数字中,1是一个比较特别的数字,用数字1乘以任何数还是这个数。在矩阵运算中有没有类似于数字1的矩阵呢?这就是单位矩阵。
单位矩阵是一个n阶矩阵,该矩阵的主对角线(从矩阵的左上角到右下角这一斜线上的n 个元素的位置,叫做n 阶矩阵的主对角线)元素都为1,其余元素都为0。单位矩阵用大写字母I表示。下图是3阶单位矩阵。
用n阶单位矩阵乘以n阶矩阵A,结果还是n阶矩阵A,并且满足乘法交换律。
若一个n阶矩阵A与n阶矩阵B相乘的结果是n阶单位矩阵,则这个n阶B矩阵称为A矩阵的逆矩阵。即:
A的逆矩阵被记为:
设A为n阶矩阵,A与A的逆矩阵满足如下条件:
因此对于方程组Ax=b,我们可以得到x的解:
在上面的推导公式中,只要求出A的逆矩阵,再通过矩阵的乘法运算,就可以得到x的解。
要计算A的逆矩阵,可以使用伴随矩阵法、待定系数法和初等变换法。计算逆矩阵是一个非常复杂的过程,特别是计算3阶以上的逆矩阵。矩阵的运算可以交给Python程序来完成。
# 导入numpy库
import numpy as np
# 定义矩阵A
A = np.array([[15,28,5],
[12,31,6],
[13,29,7]
])
# 定义矩阵b
b = np.array([[154,153,153]])
# 计算矩阵A的逆矩阵inverseA
inverseA = np.linalg.inv(A)
# 输出A与其逆矩阵的乘积
print(np.matmul(inverseA,A))
# 求解x
x = np.matmul(inverseA,np.transpose(b))
# 输出解x
print(x)
输出结果如下图所示:
从输出结果可以看出,x=4,y=3,z=2。还注意看到矩阵A与其逆矩阵的乘积不完全是单位矩阵,这是因为逆矩阵在数字计算机上只能表现出有限的精度,因此逆矩阵主要是作为理论工具来使用。
n阶矩阵的逆矩阵也称为非奇异矩阵,否则称为奇异矩阵。判断一个n阶矩阵A是否可逆,要看矩阵A的行列式|A|是否等于零,若等于零,则矩阵A为奇异矩阵,否则为非奇异矩阵。若A为奇异矩阵,则AX=0有无穷解,AX=b有无穷解或者无解。若A为非奇异矩阵,则AX=0有且只有唯一零解,AX=b有唯一解。