矩阵乘法怎么乘

设让矩阵 aaa 乘矩阵 bbb 得到矩阵 ccc,那么 ccc 的第 iii 行第 jjj 个元素的值就等于 aaa 的第 iii 行与 bbb 的第 jjj 列上对应元素相乘的和。

举个例子:
(1234)∗(4321)=(abcd)\left( \begin{array}{c} 1 & 2 \\ 3 & 4 \end{array} \right) * \left( \begin{array}{c} 4 & 3 \\ 2 & 1 \end{array} \right)= \left( \begin{array}{c} a & b\\ c & d\\ \end{array} \right) (13​24​)∗(42​31​)=(ac​bd​)
那么对于 aaa 的值,就是第一个矩阵的第一行 (1,2)(1,2)(1,2) 和第二个矩阵的第一列 (4,2)(4,2)(4,2) 的对应元素相乘的和,也就是 a=1×4+2×2=8a=1\times 4+2\times 2=8a=1×4+2×2=8。
再比如 ccc 的值,c=3×4+4×2=20c=3\times 4+4\times 2=20c=3×4+4×2=20
最后的结果是:
(1234)∗(4321)=(852013)\left( \begin{array}{c} 1 & 2 \\ 3 & 4 \end{array} \right) * \left( \begin{array}{c} 4 & 3 \\ 2 & 1 \end{array} \right)= \left( \begin{array}{c} 8 & 5\\ 20 & 13\\ \end{array} \right) (13​24​)∗(42​31​)=(820​513​)
可以看出,得到的矩阵 ccc 的行数就是矩阵 aaa 的行数,列数就是矩阵 bbb 的列数。

矩阵乘法的限制

上面提到,ccc 的每一个元素都是矩阵 aaa 某一行与矩阵 bbb 的某一列元素对应元素的乘积的和,那么就有一个限制,就是 aaa 的行要能与 bbb 的列相对应,换句话说,aaa 的列数与 bbb 的行数要相同,否则是做不了矩阵乘法的。

矩阵乘法的性质

矩阵乘法不满足交换律,这个比较显然。

但是结合律和分配律还是满足的。(想想就明白了)

其他东西

矩阵乘法,其实也可以理解为向量乘向量,矩阵 aaa 乘矩阵 bbb,可以将 aaa 的每一行视为一个向量,这个向量的维度就是 aaa 的列数,bbb 的每一列是一个向量,维度为 bbb 的行数,ababab 相乘得到的矩阵 ccc 其实就是 aaa 和 bbb 包含的向量两两的点积,所以要求 aaa 的列数与 bbb 的行数相同。

据说矩阵是为了给线性方程组一个更方便的表示方法,假如有这样一个线性方程组:
{2x+y=5x−y=1\begin{cases} 2x+y=5\\ x-y=1 \end{cases} {2x+y=5x−y=1​
用矩阵表示就是这个样子:
(211−1)∗(xy)=(51)\left( \begin{array}{c} 2 & 1\\ 1 &-1 \end{array} \right)* \left( \begin{array}{c} x\\ y \end{array} \right)= \left( \begin{array}{c} 5\\ 1 \end{array} \right) (21​1−1​)∗(xy​)=(51​)

用处:

可以用来加速方程的递推。

很经典的,fibonaccifibonaccifibonacci 数列,f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2)f(n)=f(n−1)+f(n−2),那么发现要得出下一项的值的话只需要前两个数即可,那么可以先搞出下面这个矩阵:
(f(x−1)f(x−2))\left( \begin{array}{c} f(x-1)\\ f(x-2) \end{array} \right) (f(x−1)f(x−2)​)
那么,我们下一步,就是要把这个矩阵变成下面这个矩阵:
(f(x)f(x−1))\left( \begin{array}{c} f(x)\\ f(x-1) \end{array} \right) (f(x)f(x−1)​)
很显然,只需要让这个矩阵乘上原来的矩阵即可:
(1110)\left( \begin{array}{c} 1 & 1\\ 1 & 0 \end{array} \right) (11​10​)
计算过程:
(1110)∗(f(x−1)f(x−2))=(f(x)f(x−1))\left( \begin{array}{c} 1 & 1\\ 1 & 0 \end{array} \right)* \left( \begin{array}{c} f(x-1)\\ f(x-2) \end{array} \right)= \left( \begin{array}{c} f(x)\\ f(x-1) \end{array} \right) (11​10​)∗(f(x−1)f(x−2)​)=(f(x)f(x−1)​)

那么,要求 f(n)f(n)f(n) 的话,只需要让 (f(2)f(1))\left( \begin{array}{c}f(2)\\f(1)\end{array}\right)(f(2)f(1)​)被乘 n−2n-2n−2 次 (1110)\left( \begin{array}{c}1 & 1\\1 & 0\end{array}\right)(11​10​) 即可。
又因为,矩阵乘法满足结合律,所以可以使用快速幂。
于是,用快速幂求出 (1110)n−2\left( \begin{array}{c}1 & 1\\1 & 0\end{array}\right)^{n-2}(11​10​)n−2 然后再乘上 (f(2)f(1))\left( \begin{array}{c}f(2)\\f(1)\end{array}\right)(f(2)f(1)​) 即可。
代码:

#include <cstdio>
#include <cstring>
#define ll long long
#define mod 1000000007llstruct matrix{int w,h;ll a[10][10];matrix(){memset(a,0,sizeof(a));}matrix operator *(matrix x){matrix re;re.h=h;re.w=x.w;for(int i=1;i<=re.h;i++)for(int j=1;j<=re.w;j++)for(int k=1;k<=w;k++)re.a[i][j]+=a[i][k]*x.a[k][j],re.a[i][j]%=mod;return re;}
};ll n;int main()
{scanf("%lld",&n);ll m=n-2;matrix a,b;a.w=1;a.h=2;a.a[1][1]=1;a.a[2][1]=1;b.w=2;b.h=2;b.a[1][1]=b.a[1][2]=b.a[2][1]=1;matrix ans;ans.w=-1;while(m>0)//快速幂{if(m%2==1){if(ans.w==-1)ans=b;else ans=ans*b;}b=b*b;m/=2;}if(n<3)printf("1");else printf("%lld\n",(ans*a).a[1][1]);
}
例题

【XR-1】分块 题解

矩阵乘法——矩阵快速幂相关推荐

  1. 算法提高课-数学知识-矩阵乘法-AcWing 1303. 斐波那契前 n 项和:矩阵乘法,快速幂,线性代数

    题目分析 来源:acwing 分析: 先利用矩阵运算的性质将通项公式变成幂次形式,然后用快速幂的方法求解第 n项. 斐波那契数列的递推公式:f1=f2=1,fn=fn−2+fn−1(n≥3)f_1 = ...

  2. 矩阵乘法和快速幂的一些优化和剪枝

    矩阵相乘 一般会用O(n^3)的方法...配合剪枝[添条件,设门槛...] //O(n^3)算法 #include <iostream> #include <cstdio> # ...

  3. BZOJ_1009_[HNOI2008]_GT考试_(动态规划+kmp+矩阵乘法优化+快速幂)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1009 字符串全部由0~9组成,给出一个串s,求一个长度为n的串,不包含s的种类有多少. 分析 ...

  4. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)

    先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...

  5. 矩阵的乘法和快速幂的一些理解(适用初学者)

    矩阵是线性代数的知识...后悔没好好学了... 第一部分:矩阵的基础知识 1.结合性 (AB)C=A(BC). 2.对加法的分配性 (A+B)C=AC+BC,C(A+B)=CA+CB . 3.对数乘的 ...

  6. 快速幂,矩阵乘法,矩阵快速幂

    快速幂利用二进制 复杂度 log级 #include <cstdio> #include <iostream> #include <string> #include ...

  7. HDU 4365 正方形格子涂色中心对称轴对称的涂法有多少种-思维-(矩阵坐标关系快速幂取模)

    题意:n*n的格子,涂色,有k种颜料,必须满足旋转任意个90度和翻转之后图片的样子不变,现在已经有m个格子涂过色了,问还有多少种涂法满足上述条件. 分析: 满足上述对称条件,那么涂色的种类问题我们可以 ...

  8. 斐波那契数列三种实现+矩阵乘法+矩阵cimi

    package com.lyk.kk;/** * Created by Administrator on 2017/9/4. */ public class A1 {//矩阵乘法 public int ...

  9. 【Android 应用开发】Paint 滤镜原理 之 颜色矩阵 ( 颜色模式 | 颜色通道 | 颜色矩阵 | 矩阵运算 | 矩阵乘法 | 矩阵加法 | 颜色矩阵深入解析 )

    文章目录 颜色模式 颜色通道 Android 中的颜色矩阵 矩阵乘法运算 滤镜中的矩阵乘法运算 矩阵加法运算 滤镜中的矩阵乘法运算 滤镜运算原理 ( 总结 ) 实际滤镜理论示例 颜色模式 颜色模式 : ...

最新文章

  1. The python debugger调试(PDB)的简介
  2. 教你如何配置Tomcat 绑定指定目录的工程文件
  3. 吴恩达给 74 岁老父亲发证了!8 年完成 146 门课程!
  4. asp.net core 从 3.0 到 3.1
  5. java+poodle漏洞修复_SSL3.0 POODLE漏洞修复方案
  6. 云服务器里可以放多少网站,一台云服务器上可以放多少个网站
  7. 普通平键的主要尺寸有_你还在为怎样选择床上用品尺寸而烦恼吗?床品尺寸大解析帮到你!...
  8. 大小端转换定义结构体的技巧
  9. linux命令中文手册,Linux命令在线中文手册
  10. 新形势下电力监控系统网络安全风险分析与防护对策
  11. WPS Office 2005个人版试用
  12. SVN和Git的使用
  13. 听说MACD是技术指标之王?我们用Python来验验成色
  14. 一个DDD指导下的实体类设计案例
  15. 快速入手Web幻灯片制作
  16. 如何下载并安装Firebug插件
  17. 老人自制6门红衣大炮抗强拆 被指涉嫌违法
  18. data whale_data_analysis_task2_数据可视化
  19. c++版本的高斯混合模型的源代码完全注释
  20. WK2204 - spi转uart调试记录

热门文章

  1. 易语言练习笔记-大叔篇(3)-加减计算器
  2. win7笔记本无线网服务器,win7笔记本连接不上无线网络
  3. 如何在以太坊网络上发布自己的代币
  4. HTML——表格的基本样式
  5. 2019-11-11
  6. CAD导入卫星地图几种方式
  7. Elasticsearch用java api 创建mapping
  8. \node_modules\node-sass\build\src\libsass.vcxproj(20,3): error MSB4019: 未找到导入的项目“D:\Microsoft.Cpp.De
  9. Unable to process Jar entry [org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration
  10. 盘点那些免费视频网址到底有多爽