`
lovnet
  • 浏览: 6706513 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

矩阵

 
阅读更多

无聊写了个矩阵的模板,传上备用。

#include <stdio.h>
#include <string.h>

typedef __int64 LL;

#define N 32

int mod;

struct Matrix
{
    int r,c;
    int m[N][N];
    Matrix(){}
    Matrix(int r,int c):r(r),c(c){}
    Matrix operator *(const Matrix& B)
    {
        Matrix T(r,B.c);
        for(int i=1;i<=T.r;i++)
        {
            for(int j=1;j<=T.c;j++)
            {
                int tt = 0;
                for(int k=1;k<=c;k++)
                    tt += m[i][k]*B.m[k][j] % mod;
                T.m[i][j] = tt % mod;
            }
        }
        return T;
    }
    Matrix operator +(const Matrix& B)
    {
        Matrix T(r,c);
        for(int i=1;i<=r;i++)
            for(int j=1;j<=c;j++)
                T.m[i][j] = (m[i][j]+B.m[i][j]) % mod;
        return T;
    }
    Matrix Unit()
    {
        Matrix T(r,r);
        memset(T.m,0,sizeof(T.m));
        for(int i=1;i<=r;i++)
            T.m[i][i] = 1;
        return T;
    }
    Matrix Pow(int n)
    {
        Matrix P(*this) ,Res = Unit();
        while(n)
        {
            if(n&1)
                Res = Res*P;
            P = P*P;
            n >>= 1;
        }
        return Res;
    }
    void Init()
    {
        int h;
        scanf("%d%d",&h,&mod);
        r = c = h;
        for(int i=1;i<=r;i++)
            for(int j=1;j<=c;j++)
                scanf("%d",&m[i][j]);
    }
    void Print()
    {
        for(int i=1;i<=r;i++)
        {
            for(int j=1;j<=c;j++)
                printf("%d ",m[i][j]);
            printf("\n");
        }
    }
};



Matrix PreSum(Matrix A,int k)
{
    if(k == 1)
        return A;
    Matrix Sum = PreSum(A,k/2);
    if(k&1)
    {
        Matrix Ak_1 = A.Pow(k/2+1);
        return Sum + Ak_1 + Ak_1*Sum;
    }
    else
    {
        Matrix Ak = A.Pow(k/2);
        return Sum + Ak*Sum;
    }
}


分享到:
评论

相关推荐

    C#判断一个矩阵是否为对称矩阵及反称矩阵的方法

    本文实例讲述了C#判断一个矩阵是否为对称矩阵及反称矩阵的方法。分享给大家供大家参考。具体如下: 1.判断对称矩阵 对任意i和j,有a[i,j]=a[j,i] /// /// 检查一个矩阵是否为对称矩阵 /// /// 矩阵 /// &lt;returns&gt;...

    代码 有向图关联矩阵和邻接矩阵的相互转换算法代码

    代码 有向图关联矩阵和邻接矩阵的相互转换算法代码代码 有向图关联矩阵和邻接矩阵的相互转换算法代码代码 有向图关联矩阵和邻接矩阵的相互转换算法代码代码 有向图关联矩阵和邻接矩阵的相互转换算法代码代码 有向图...

    C语言矩阵运算函数库已详细注释

    // 创建矩阵 返回矩阵指针 // 创建多个矩阵 返回矩阵指针 // 创建零矩阵 返回矩阵指针 // 创建单位矩阵 返回矩阵指针 // 创建对角矩阵 // 矩阵转变为均匀随机矩阵 // 矩阵转变为正态随机矩阵 // 矩阵加法 A+B=C // ...

    矩阵运算_C++_K._矩阵_

    设有两个矩阵A=(aij)m×n,B=(bij)p×q实现要求:⑴ 编写矩阵输入函数INPUT_MAT,通过该函数完成矩阵的输入并返回保存矩阵的三元组 (不能使用全局变量);⑵ 编写矩阵输出函数OUTPUT_MAT,通过该函数完成矩阵的输出...

    矩阵求逆法

    求逆矩阵的方法与矩阵的秩 一、矩阵的初等行变换 (由定理2.4给出的求逆矩阵的伴随矩阵法,要求计算矩阵A的行列式 值和它的伴随矩阵 .当A的阶数较高时,它的计算量是很大的,因此用伴随矩阵法求逆矩阵是不方便的....

    矩阵连乘的C++代码

    在科学计算中经常要计算矩阵的乘积。矩阵A和B可乘的条件是矩阵A的列数等于矩阵B的行数。若A是一个p×q的矩阵,B是一个q×r的矩阵,则其乘积C=AB是一个p×r的矩阵。计算C=AB总共需要p×q×r次乘法。 现在的问题是,...

    解释结构模型可达矩阵MATLAB算法

    其中最简是求解一般性骨架矩阵(骨干矩阵,骨架矩阵);层次化是通过 多种层级抽取的方式获得。 可达矩阵,指的是用矩阵形式来描述有向图的各节点之间经过一定长度的通路后可达到的程度。可达矩阵的计算方法是利用...

    矩阵加法的运算

    实现c语言矩阵加法,用2矩阵的加/减没什么,就是2个相同的矩阵的对应项相加/减,要求就是2个矩阵的行列都一样关键在于乘,2矩阵相乘,2个矩阵不能一样,比如说A矩阵是3行4列,那么B矩阵必须是4行3列才行,对于输入矩阵的...

    矩阵论 中国科学院大学PPT

    包括:矩阵分析的基本理论,矩阵分解的基本技术和特殊矩阵的性质。 通过本课程的学习,希望学生能掌握利用矩阵解决问题的基本理论和基本技巧,对矩阵分析的近代发展有所了解,为利用矩阵分析的技术解决问题和从事...

    矩阵计算器(矩阵分解,求解线性方程组,最小二乘,多项式拟合等)

    可以方便地进行矩阵的分解,求解线性方程组,以及进行多项式操作等。在输入矩阵时可 以直接输入数学表达式包括复数,例如可以直接输入sin(i+1)^2,而不同提前计算具体数值 。可以直接输入pi。使用说明在压缩包里。...

    用C++编写的求可逆矩阵的程序

    总体需求:编写一个实现求矩阵逆矩阵的程序。 功能需求: 1) 输入一个n(n)阶方阵A, 2) 求出A的逆矩阵B,并输出。 3) 将A和B相乘得矩阵C,验证C是否为单位矩阵。 用户界面的结果显示: 输入: 程序正常运行后,...

    stata空间权重矩阵构建,stata计算空间权重矩阵代码哦,01矩阵 经济距离矩阵 地理距离

    stata空间权重矩阵构建,出stata计算空间权重矩阵代码哦,都是我自己写论文 过程中学习制作的,准确可靠!里面备注都写的很详细,配有示例数据,跟着跑一遍就可以 学会啦!不但可计算最常见的0 1矩阵,反距离矩阵,...

    定义类实现矩阵加减法

    矩阵(三) 编写C++程序完成以下功能: (1) 用类来实现矩阵,定义一个矩阵的类,属性包括: 矩阵大小,用 lines, rows(行、列来表示); 存贮矩阵的数组指针,根据矩阵大小动态申请(new)。 (2) 矩阵类的...

    C语言strassen矩阵乘法代码

    strassen矩阵乘法的C代码 【问题描述】 从文件arr.in中读入一个m行k列的整数矩阵a和一个k行n列的整数矩阵b(1 , k, n ),在标准输出上输出这两个矩阵的乘积。 【输入形式】 输入文件arr.in中有m+k行,前m...

    Arduino 例程详细教学29.矩阵键盘

    矩阵键盘Arduino 例程详细教学29.矩阵键盘Arduino 例程详细教学29.矩阵键盘Arduino 例程详细教学29.矩阵键盘Arduino 例程详细教学29.矩阵键盘Arduino 例程详细教学29.矩阵键盘Arduino 例程详细教学29.矩阵键盘...

    潮流计算中导纳矩阵的计算

    第一章 导纳矩阵计算 1.1节点电压方程 …………………………………………6 1.2 变压器 型等值电路的计算 …………………………8 1.3 节点导纳矩阵 …………………………………10 1.3.1 节点导纳矩阵元素的物理意义...

    动态申请空间实现矩阵加减法

    矩阵(二) 编写C++程序完成以下功能: (1) 假定矩阵大小为4×5(整型); (2) 矩阵空间采用new动态申请,保存在指针中; (3) 定义矩阵初始化函数,可以从cin中输入矩阵元素; (4) 定义矩阵输出函数,将矩阵...

    稀疏矩阵运算器(C语言实现,代码完整,可读性很好)

    稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算 可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。 功能要求: 1. 以“带行逻辑链接信息”的三元组顺序表表示...

    64-矩阵键盘中断扫描(51单片机C语言实例Proteus仿真和代码)

    64-矩阵键盘中断扫描(51单片机C语言实例Proteus仿真和代码)64-矩阵键盘中断扫描(51单片机C语言实例Proteus仿真和代码)64-矩阵键盘中断扫描(51单片机C语言实例Proteus仿真和代码)64-矩阵键盘中断扫描(51单片机C语言...

    矩阵论 程云鹏 第三版 答案

    《矩阵论(修订版)》共分7章,主要介绍线性空间与线性变换,矩阵范数,矩阵分析,矩阵分解,特征值估计,广义逆矩阵以及特殊矩阵。部分章节包括了近年来编者的一些研究成果及有关文献上的资料。 《矩阵论(修订版)》...

Global site tag (gtag.js) - Google Analytics