zoukankan      html  css  js  c++  java
  • 初学矩阵乘法

    前言

    何谓矩阵乘法?就是矩阵之间的乘法。

    矩阵乘法并不是简单地将两个矩阵中对应位置上对应元素相乘,而是更为复杂。

    矩阵乘法应用广泛,典例就是优化递推。

    矩阵乘法

    首先我们要知道,矩乘是一个(n*m)的矩阵乘上一个(m*k)的矩阵,得到一个(n*k)的矩阵。

    由此容易发现,矩乘是不满足交换律的

    其中,第一个矩阵第(x)行的元素,与第二个矩阵第(y)列的元素,逐一对应相乘之后再取得的和,就是答案矩阵中第(x)和第(y)列的值。

    用式子表示,就是:

    [res_{x,y}=sum_{i=1}^mA_{x,i}cdot B_{i,y} ]

    用代码表示,就是:(注意,字母表示有点出入)

    inline Mat operator * (const Mat& A,const Mat& B)
    {
    	Mat res(A.n,B.m);register int i,j,k;
    	for(k=1;k<=A.m;++k) for(i=1;i<=A.n;++i)
    		for(j=1;j<=B.m;++j) res.v[i][j]+=A.v[i][k]*B,v[k][j];
    	return res;
    }
    

    矩阵快速幂

    矩阵快速幂与普通的快速幂类似,主要是要注意答案初始化的问题,一般会初始化为左上-右下对角线上都是(1),其他位置都是(0)

    做矩阵快速幂的矩阵应该是形如(n*n)的矩阵。

    代码实现如下:

    inline Mat operator ^ (Mat x,int y)
    {
    	Mat t(x.n,x.n);for(int i=1;i<=t.n;++i) t.v[i][i]=1;
    	W(y) y&1&&(t=t*x,0),x=x*x,y>>=1;return t;
    }
    

    应用

    对于一个递推式,我们可以通过求出其转移矩阵,然后矩阵快速幂来快速求出答案。

    而在一些数据结构中也可以用它来较好地维护信息。

  • 相关阅读:
    浅谈Charles —— 青花瓷
    jdbc
    装饰者模式
    java可变参数
    简单日历
    DVD管理系统
    图片拷贝
    时间输出
    java基础小知识
    jQuery HTML
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/MatMul.html
Copyright © 2011-2022 走看看