浅谈矩阵乘法

本文介绍了矩阵乘法的基本概念,包括哪些矩阵可以相乘、运算规则,以及其满足的结合律和不满足的交换律。重点阐述了矩阵乘法在加速计算中的应用,如通过矩阵表示解决斐波那契数列问题和利用快速幂技术。
摘要由CSDN通过智能技术生成

乘法我们都知道,九九乘法表我们都背过。可矩阵是由很多数组成的,矩阵乘法又是个什么鬼?

今天就带你了解一下矩阵乘法

矩阵乘法的定义

什么矩阵可以进行乘法?

N × M N \times M N×M 的矩阵可以和 M × K M\times K M×K 的矩阵进行矩阵乘法。即:第一个矩阵的列数要和第二个矩阵的行数相等。运算得到的答案矩阵大小为 N × K N \times K N×K

如何进行矩阵乘法?

这里我们设矩阵 C = A × B C=A\times B C=A×B A , B , C A,B,C A,B,C 的大小分别为 N × M , M × K , N × K N\times M,M\times K,N\times K N×M,M×K,N×K

对于 C i , j C_{i,j} Ci,j,它等于:

∑ k = 1 M A i , k ⋅ B k , j \sum_{k=1}^MA_{i,k}\cdot B_{k,j} k=1MAi,kBk,j

这也是要求第一个矩阵的列数要和第二个矩阵的行数相等的原因。

矩阵乘法的性质

  • 满足结合律。即 A × B × C = A × ( B × C ) A\times B\times C=A\times(B\times C) A×B×C=A×(B×C)
  • 不满足交换律。即 A × B ≠ B × A A\times B\not=B\times A A×B=B×A

讲了那么多,矩阵乘法有什么用?

矩阵乘法的妙用

矩阵乘法大多是用来加速的。比如重复的进行一个操作,就可以把操作转化成矩阵乘法,然后跑快速幂。

譬如:求斐波那契数列的第 N N N 项。

这当然可以递推,但如果 N ≤ 2 × 1 0 9 N \leq 2\times 10^9 N2×109 呢?

这里先放一个原题链接:AcWing 205. 斐波那契

如果递推就 Boom 了。

考虑将操作 f i = f i − 1 + f i − 2 f_i=f_{i-1}+f_{i-2} fi=fi1+fi2 转化成一次矩阵乘法。

我们设矩阵 F ( n ) = [ f n , f n + 1 ] F(n)=[f_n,f_{n+1}] F(n)=[fn,fn+1],且:

A = [ 0 1 1 1 ] A= \begin{bmatrix} 0 & 1 \\ 1 & 1 \end{bmatrix} A=[0111]

先给出公式:

F ( n ) = F ( n − 1 ) × A F(n)=F(n-1)\times A F(n)=F(n1)×A

具体证明:

F ( n − 1 ) × A F(n-1)\times A F(n1)×A

= [ f n − 1 f n ] × [ 0 1 1 1 ] =\begin{bmatrix} f_{n-1} & f_n \end{bmatrix} \times \begin{bmatrix} 0 & 1 \\ 1 & 1 \end{bmatrix} =[fn1fn]×[0111]

= [ f n − 1 × 0 + f n × 1 f n − 1 × 1 + f n × 1 ] =\begin{bmatrix} f_{n-1}\times0+f_n\times1 & f_{n-1}\times 1+f_n\times 1 \end{bmatrix} =[fn1×0+fn×1fn1×1+fn×1]

= [ f n f n + 1 ] =\begin{bmatrix} f_n & f_{n+1} \end{bmatrix} =[fnfn+1]

= F ( n ) =F(n) =F(n)

因此,我们得到 F ( n ) = F ( 0 ) × A n F(n)=F(0)\times A^n F(n)=F(0)×An。这里 A n A^n An 可以用快速幂处理。

另外, N × N N\times N N×N 的矩阵 S S S 要初始化 1 1 1,相当于让 S 1 , 1 , S 2 , 2 , … , S N , N S_{1,1},S_{2,2},\dots,S_{N,N} S1,1,S2,2,,SN,N 都赋值 1 1 1

习题:

洛谷 P4838 P哥破解密码

总结:矩阵乘法可以用于加速重复进行一个相同的操作,非常的好用。

  • 35
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值