矩阵的乘法与线性方程组
2255字,阅读需时8分钟
来自专栏
课程/专栏

两个矩阵相乘该如何计算呢?

我们知道矩阵是列向量或者行向量的组合,两个矩阵的乘法运算实际是列向量间的线性组合运算。

例如矩阵A为3X3矩阵,矩阵B为3X1矩阵,我们来计算C=A X B,C为结果矩阵。

33.png

列向量的线性组合:

34.png

即矩阵C的第i个列向量是矩阵A的列向量组的线性组合,线性组合的纯量系数就是矩阵B第i个列向量的各个分量。

下面给出两个矩阵的乘法规则:

若矩阵A为m X p矩阵,矩阵B为p X n矩阵,矩阵C为A与B的乘积,矩阵C的第i行第j列元素可以表示为:

03.png

矩阵A和矩阵可以相乘的前提条件是:矩阵A的列数等于矩阵B的行数。

另外,矩阵的乘法不满足交换律,即A X B != B X A。

下面我们使用Python语言来实现A矩阵与B矩阵的乘法运算。

#定义矩阵A和B
A = [[15,28,5],[12,31,6],[13,29,7]]
B = [[4],[3],[2]]
 
#定义矩阵乘法运算函数
def matrixMul(A, B):
  #创建矩阵C,矩阵C的默认元素都为0
  #矩阵C的行数为A矩阵的行数,列数为B矩阵的列数
  C = [[0] * len(B[0]) for i in range(len(A))]
  #按行遍历A矩阵
  for i in range(len(A)):
    #按列遍历B矩阵
    for j in range(len(B[0])):
        #C矩阵的第i行第j列所对应的数值
        #等于A矩阵的第i行分别乘以B矩阵的第j列之和
        for k in range(len(B)):
           C[i][j] += A[i][k] * B[k][j]
  return C
 
if __name__ == '__main__':
    
    C = matrixMul(A,B)
    print(C)

使用Numpy库来计算矩阵的乘法就简单多为了。

import numpy as np
 
#定义矩阵A和B
A = np.array([[15,28,5],[12,31,6],[13,29,7]])
B = np.array([[4],[3],[2]])
 
#定义矩阵乘法运算函数
def matrixMul(A, B):
    #NumPy的matmul完成矩阵乘法运算
    C = np.matmul(A,B)
    return C
 
if __name__ == '__main__':
    C = matrixMul(A,B)
    print(C)

矩阵最早来自于方程组的系数及常数所构成的方阵。因此矩阵的乘法规则是为了满足使用矩阵解线性方程组的要求而设定的。

下面给出一个在生活中应用矩阵乘法的案例。下表是某超市猪肉、牛肉、鸡蛋近三周的价格表。

36.png

已知某家庭近3周对猪肉、牛肉、鸡蛋消费支出分别为154元、153元、153元,试计算该家庭每周对猪肉、牛肉、鸡蛋的需求量。

可以列方程组求解,设该家庭每周对猪肉、牛肉、鸡蛋的需求分别为x千克、y千克、z千克,可列出三元一次方程组:

37.png

若把上面方程组的系数、未知量、已知量用矩阵的方式来表示,就可以使用矩阵运算来求解方程组。

38.png

求解三元一次方程组的问题转换为已知A矩阵,A矩阵和B矩阵的乘积C矩阵,求B矩阵的问题。Numpy库的 linalg模块的solve()函数可以使用矩阵求解线性方程组。

# 导入numpy库
import numpy as np
# 程序入口
if __name__ == '__main__':
    
   # 建立3X3矩阵
   ta = np.array([[15,28,5],
                  [12,31,6],
                  [13,29,7]
                  ])
   # 建立3维行向量
   tb = np.array([154,153,153])
   # 解线性方程组
   x = np.linalg.solve(ta,tb)
   # 输出x、y、z的值
   print("x = %.2f  y = %.2f  z = %.2f" % (x[0],x[1],x[2]))
我要评论
全部评论