zoukankan      html  css  js  c++  java
  • 浅谈数学上的矩阵——矩阵的乘法运算的概念及C++上的实现模板

    首先让我们来谈一谈数学意义上的矩阵(在座各位也可以简单地将它理解为一个二维数组)

    这样可以帮助我们理解矩阵加速及其运用的原理(矩阵加速是一个及其玄学的东西,所以请重点理解矩阵乘法)

    这里给出一段严格的数学定义来帮助理解矩阵的概念,简单地看一下就可以了:

    在数学中,矩阵(Matrix)是一个按照长方阵列排列的实数或复数集合,最早来自于方程组的系数及常数所构成的方阵。

    矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中,矩阵的运算是数值分析领域的重要问题。在物理学中,矩阵在电路学、力学、光学和量子物理中都有应用。在计算机学科中,三维动画制作也需要用到矩阵。

    由m×n个数aij排成的m行n列的数表称为m行n列的矩阵,简称m×n矩阵。记作:

    这m×n个数称为矩阵A的元素,简称元。数aij位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数aij为(i,j)元的矩阵可记为(aij)或(aij)m×n,m×n矩阵A也记作Amn。

    元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。而行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵。n阶方阵中所有i=j的元素aij组成的斜线称为(主)对角线,所有i+j=n+1的元素aij组成的斜线称为辅对角线。

    现在我们进入今天的正题:矩阵意义上的乘法(矩阵与矩阵相乘)

    直接给出公式:

    化简一下便于我们理解:

    再给出一个例子:

    (好好看一下,这样理解很重要)

    建议读者在自己写几个矩阵相乘的方法,熟悉一下基本的模式。

    模板:

    //这里采用了结构体封装的方式,更加简便
    struct Matrix {
        LL n,m,c[N][N];
        Matrix() { memset(c,0,sizeof(c)); };
        void _read() {
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                    scanf("%lld",&c[i][j]);
        }
        Matrix operator * (const Matrix& a) {
            Matrix r;
            r.n=n;r.m=a.m;
            for(int i=1;i<=r.n;i++)
                for(int j=1;j<=r.m;j++)
                    for(int k=1;k<=m;k++)
                        r.c[i][j]= (r.c[i][j]+ (c[i][k] * a.c[k][j])%mod)%mod;
            return r;
        }
        void _print() {
            for(int i=1;i<=n;i++) {
                for(int j=1;j<=m;j++) {
                    if(j!=1) cout<<" ";
                    cout<<c[i][j];
                }
                if(i!=n) puts("");
            }
        }
    }
    
  • 相关阅读:
    Java中String与byte[]的转换
    移动端界面设计之尺寸篇(更新)
    移动端开发必晓
    sublime 之 vitage/emmet
    Sublime Text3工具的安装、破解、VIM功能vintage插件教程
    Sublime Text 3 快捷键总结
    iPhone Safari下iframe不显示滚动条无法滚动的解决方法
    名片设计尺寸及名片设计的注意事项
    转:『引』最全前端资源汇集
    (转)详解css3弹性盒模型(Flexbox)
  • 原文地址:https://www.cnblogs.com/MisakaMKT/p/11252293.html
Copyright © 2011-2022 走看看