首页 > 其他分享 >矩阵快速幂

矩阵快速幂

时间:2023-04-29 17:44:20浏览次数:29  
标签:begin right end 矩阵 bmatrix 快速 left

矩阵乘法

定义矩阵乘法的运算规则如下

\[A\left[m\right]\left[n\right] * B\left[n\right]\left[p\right] = C\left[m\right]\left[p\right] \]

其中 \(C\left[i\right]\left[j\right]\) 等于 \(A\) 的第 \(i\) 行乘 \(B\) 的第 \(j\) 列,举例如下

\[\begin{bmatrix} 5&6\\7&8 \end{bmatrix} * \begin{bmatrix} 1&2&3\\4&5&6 \end{bmatrix} = \begin{bmatrix} 5*1+6*4&5*2+6*5&5*3+6*6 \\ 7*1+8*4&7*2+8*5&7*3+8*6 \end{bmatrix} \]

矩阵乘法的性质

  • 满足分配率和结合律,不满足交换率
  • \(A\) 的列数必须等于 \(B\) 的行数

用斐波那契数列引入矩阵快速幂

已知斐波那契数列

\[f_n=f_{n-1}+f_{n-2} \]

其中

\[\begin{cases} f_0=0\\f_1=1 \end{cases} \]

则有

\[\begin{bmatrix} f_{n+1}&f_n \end{bmatrix} = \begin{bmatrix} f_n&f_{n-1} \end{bmatrix} * \begin{bmatrix} 1&1\\1&0 \end{bmatrix} = {\begin{bmatrix} f_{n-1}&f_{n-2} \end{bmatrix} * \begin{bmatrix} 1&1\\1&0 \end{bmatrix}}^2 = {\begin{bmatrix} f_1&f_0 \end{bmatrix} * \begin{bmatrix} 1&1\\1&0 \end{bmatrix}}^n \]

求解广义斐波那契数列

广义斐波那契数列数列的公式

\[f_n=a*f_{n-1}+b*f_{n-2} \]

则有

\[\begin{bmatrix} f_{n+1}&f_n \end{bmatrix} = \begin{bmatrix} f_n&f_{n-1} \end{bmatrix} * \begin{bmatrix} a&1\\b&0 \end{bmatrix} = {\begin{bmatrix} f_1&f_0 \end{bmatrix} * \begin{bmatrix} a&1\\b&0 \end{bmatrix}}^n \]

求解系数含有0的递推函数

已知公式

\[f_n=3*f_{n-1}+5*f_{n-3}+9*f_{n-4} \]

则有

\[\begin{bmatrix} f_{n+3}&f_{n+2}&f_{n+1}&f_n \end{bmatrix} = \begin{bmatrix} f_3&f_2&f_1&f_0 \end{bmatrix} * {\begin{bmatrix} 3&1&0&0\\0&0&1&0\\5&0&0&1\\9&0&0&0 \end{bmatrix}}^n \]

将系数为0的项对应的矩阵中的位置置0

求解一般递推函数

已知公式

\[f_n=a*f_{n-1}+b*f_{n-3}+c \]

则有

\[\begin{bmatrix} f_{n+2}&f_{n+1}&f_n&c \end{bmatrix} = \begin{bmatrix} f_2&f_1&f_0&c \end{bmatrix} * {\begin{bmatrix} a&1&0&0\\0&0&1&0\\b&0&0&1\\1&0&0&0 \end{bmatrix}}^n \]

将常数项加入待求的矩阵中一并运算,并将计算矩阵相对应的位置置1以确保常数项的值不变

求解有下标的递推函数

已知公式

\[f_n=f_{n-1}+2*f_{n-2}+n^3 \]

这里需要用到一个知识:立方的展开

\[n^3=(n-1)^3+3(n-1)^2+3(n-1)+1 \]

事实上,矩阵乘法求递归问题也可以用纵向的矩阵表示,如下

\[\begin{bmatrix} f_n\\f_{n-1}\\n^3\\n_2\\n\\1 \end{bmatrix} = \begin{bmatrix} f_2\\f_1\\8\\4\\2\\1 \end{bmatrix} * {\begin{bmatrix} 1&2&1&3&3&1 \\ 1&0&0&0&0&0 \\ 0&0&1&3&3&1 \\ 0&0&0&1&2&1 \\ 0&0&0&0&1&1 \\ 0&0&0&0&0&1 \end{bmatrix}}^{n-2} \]

标签:begin,right,end,矩阵,bmatrix,快速,left
From: https://www.cnblogs.com/xj22yangyichen/p/17364301.html

相关文章

  • 超详细的RabbitMQ快速入门!!你不拿走吗?
    转载自:https://juejin.cn/post/6992551868748529677RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景......
  • openGauss分布式安装_搭建_快速部署openGauss3.0.0分布式(openGauss课程)
    一、opengauss的背景和行业现状2022年,七大openGauss商业版发布,是基于openGauss3.0推出商业发行版目前海量数据库Vastbase表现最佳,一直是TOP1作者认为之所以海量数据库Vastbase目前无法被同行超越,和各家研发实力和技术背景有关 众所周知,opengauss起源于postgre......
  • 快速傅里叶变换FFT学习笔记
    点值表示法我们正常表示一个多项式的方式,形如\(A(x)=a_0+a_1x+a_2x^2+...+a_nx^n\),这是正常人容易看懂的,但是,我们还有一种表示法。我们知道,\(n+1\)个点可以表示出一个\(n\)次的多项式。于是,我们任意地取\(n+1\)个不同的值,表示\(x\),求出的值与\(x\)对应,形成\(n+1\)个......
  • 张量(Tensor)、标量(scalar)、向量(vector)、矩阵(matrix)
    张量(Tensor):Tensor=multi-dimensionalarrayofnumbers张量是一个多维数组,它是标量,向量,矩阵的高维扩展,是一个数据容器,张量是矩阵向任意维度的推广注意,张量的维度(dimension)通常叫作轴(axis),张量轴的个数也叫作阶(rank)]标量(scalar):只有一个数字的张量叫标量(也叫标量张量、零维......
  • 1572. 矩阵对角线元素的和
     分析:找了一个小规律首先对角线上的数是从第一行到最后一行按顺序的在每一行上下标逐渐加1,最后总次数是矩阵的长度最重要的是,两个对角线是对称的也就是当取前面的第一个数时,后面对角线就是-1;前面取第二个时,后面就是-2然后有个细节,当行数为奇数时需要减去一个正中间的数,重......
  • GMaps.js:让你快速集成 Google Maps 服务的 jQuery 插件
    GMaps.js功能除了添加指定经纬度的标准地图之外,GMaps.js还能定义地图放大的级别,添加标注,获取当前用户的地理位置(HTML5geolocation),定义路线,绘制折线,并且实现这些功能只需要简单的几行代码。另外GMaps.js每个动作都有callback函数让你去集成自定义事件。目前GMaps.js没有详......
  • 快速认识Delphi--九五小庞
    1、什么是Delphi:Delphi不是一门编程语言,它只是一个IDE,和VS,Eclipse,VSCode,Pycharm...一样,只是一个编程工具,但他主要是针对Pascal语言编程,因此很多时候,很多人把Delphi说成是一门编程语言,他只是用于Pascal编程的一个工具2、学习Delphi:既然知道Delphi只是一个IDE,他是针对Pasca......
  • 快速幂+大整数乘法
    (快速幂+位运算)\(0\lea,b\le10^9\\0\leqp\leq10^9\)快速幂:(1)取模运算法则(a+b)%p=(a%p+b%p)%p(a-b)%p=(a%p-b%p)%p(a*b)%p=(a%p*b%p)%p(2)快速幂可以在O(logk)内算出\(a^k\)modp的值先处理出:\(a^{2^0}\mod\p\)\(a......
  • 快速上手Linux核心命令(九):文件备份与压缩
    目录tar打包备份gzip压缩或解压文件zip打包和压缩文件unzip解压zip文件scp远程文件复制rsync文件同步工具这期呢主要说一说Linux中文件备份与压缩命令,一共6个命令。这6个命令都是平常工作中非常非常常用的。tar打包备份1、简介tar可以将多个文件压缩打包、压缩。是......
  • Jest快速使用指南
    1.引言写了几个函数,怎么知道写得对不对呢?可以通过测试函数,当然开发中测试的意义不只是这个Jest是常用的JavaScript测试框架官网为:Jest·......