矩阵乘法(矩阵乘矩阵)

这篇具有很好参考价值的文章主要介绍了矩阵乘法(矩阵乘矩阵)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先理了解矩阵是什么:

矩阵是一个按照长方阵列排列的复数或实数集合。(相信大家都懂)

关于矩阵的基本概念:

1.方阵:n 阶方阵 (正方形嘛)

2.同型矩阵:两个矩阵,行数与列数对应相同,称为同型矩阵

ok进入主题:

矩阵加减法:

在了解矩阵乘法前先看看矩阵加减法:

1.两个矩阵进行一般的加法运算的前提是两个矩阵为同型矩阵2.具体操作如图

2.具体操作如图(减法同理)

同型矩阵乘法运算,矩阵,线性代数

 3.在矩阵的加法运算中,满足交换律和结合律,也就是

A+B=B+A;A+(B+C)=(A+B)+C;

到这里相信都很简单

矩阵乘法(上点难度嘿嘿嘿)

1.矩阵的乘法是向量内积的推广。

2.矩阵相乘只有在第一个矩阵的列数和第二个矩阵的行数相同时才有意义。

举个栗子:A为n*m的矩阵,B为m*p的矩阵,则C=A*B为n*p的矩阵,并且:

注意:矩阵乘法满足结合律,不满足一般的交换律。

so:利用结合律,矩阵乘法可以利用 快速幂 的思想来优化。

在普通的乘法中,一个数乘1还是等于它本身,在矩阵乘法中也有这么一个“1”,它就是单位矩阵

不同于普通乘法中的单位1,对于不同矩阵他们的单位矩阵大小是不同的

也就是说单位矩阵都是正方形的,这是因为只有正方形的矩阵能保证结果和前一个矩阵形状相同

单位矩阵的元素非0即1,从左上角到右下角的对角线上元素皆为1,其他皆为0

了解了这么多,我们开始看题,矩阵快速幂,由于矩阵乘法满足结合律,所以我们只需要把它按照一般的快速幂打,再重载一下运算符就可以了,好了我们直接放代码

mat operator*(const mat& T) const {
    mat res;
    for(int i=0;i<sz;i++)
        for(int j=0;j<sz;j++)
            for(int k=0;k<sz;k++){
                res.a[i][j]+=mul(a[i][k],T.a[k][j]);
                res.a[i][j]%=mod;
            }
    return res;
}

例题:【模板】矩阵快速幂 - 洛谷

例题讲解:

正如题目所诉这是个模板题有不懂的直接看代码注释:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=1e9+7;
struct point{
	ll c[150][150];//注意long long 
}A,ans;
ll n,k;
point operator *(const point &x,const point &y){//重装运算符 
	point z;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			z.c[i][j]=0;
		}
	}
	//矩阵乘法模板 
	for(int i=1;i<=n;i++){//枚举行 
		for(int j=1;j<=n;j++){//枚举列 
			for(int k=1;k<=n;k++){//枚举两给需要相加的矩阵的列与行(因为两者一样) 
				z.c[i][j]+=x.c[i][k]*y.c[k][j]%mod;
				z.c[i][j]%=mod;
			} 
		}
	} 
	return z;
} 
int main(){
	cin>>n>>k;//输入 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>A.c[i][j];
		}
	}
	for(int i=1;i<=n;i++){//初始化答案矩阵 
		ans.c[i][i]=1;//对角线为1 
	}
	while(k>0){//快速幂 
		if(k&1) ans=ans*A;//注意不能写为ans*=A 
		A=A*A;
		k=k>>1;//相当于k/=2 
	}
	for(int i=1;i<=n;i++){//输出答案 
		for(int j=1;j<=n;j++){
			cout<<ans.c[i][j]<<" "; 
		}
		cout<<"\n";
	}
	return 0;//完美撒花 
}

关于快速幂(不懂的可以看看):

1.由于电脑计算需要乘b次这样太慢了。。。(怎么办呢?当然是不要乘b次,这不是废话)

2.so:如果将 a 自乘一次,就会变成 。再把  自乘一次就会变成 。然后是…… 自乘 n 次的结果是。对吧……

3.看看快速幂递推式,这样复杂度从O(k)降为了O(k)

 同型矩阵乘法运算,矩阵,线性代数

4.递归版代码(有来理解,不然平时题目题解会TLE,如果你不想的话)

point Fastpower(poitn a,long long b){//求a的b次方
    if(b==1) return a;
    if(b%2==0) return Fastpower(a,b/2)*Fastpower(a,b/2);
    if(b%2==1) return Fastpower(a,b/2)*Fastpower(a,(b-1)/2)*a;
}

5.while版:文章来源地址https://www.toymoban.com/news/detail-718753.html

void Fastpower(int b){//求a的b次方
    int ans=1;
    while(b>0){
        if(b&1) ans=ans*a;//相当于b%2==1
        a=a*a;
        b=b>>1;//相当于b/=2
    }
}

感谢看到这里希望对你有所帮助,若文章有什么不对的地方一定要提出留个赞在走吧!

到了这里,关于矩阵乘法(矩阵乘矩阵)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 0202矩阵的运算-矩阵及其运算-线性代数

    定义2 设有两个 m × n mtimes n m × n 橘子 A = ( a i j ) 和 B = ( b i j ) A=(a_{ij})和B=(b_{ij}) A = ( a ij ​ ) 和 B = ( b ij ​ ) ,那么矩阵A与B的和记为A+B,规定为 A + B = ( a 11 + b 11 a 12 + b 12 ⋯ a 1 n + b 1 n a 21 + b 21 a 22 + b 22 ⋯ a 2 n + b 2 n ⋮ ⋮ ⋮ a m 1 + b m 1 a m 2 + b m 2 ⋯ a m n + b m n ) A+B=begin{pmatr

    2024年04月25日
    浏览(49)
  • 线性代数矩阵乘法中的行向量和列向量

    在矩阵中有两个概念,行向量与列向量,这是从两个不同的角度看待矩阵的组成。这篇文章将从 行向量 和 列向量 两个角度来分解 矩阵的乘法 。 假设有两个矩阵 A 和 B 一般矩阵的乘法分解 简单的理解就是A矩阵的第一行与B矩阵的第一列逐元素相乘,就是 结果矩阵 的左上角

    2024年02月11日
    浏览(47)
  • 【线性代数】通过矩阵乘法得到的线性方程组和原来的线性方程组同解吗?

    如果你进行的矩阵乘法涉及一个线性方程组 Ax = b,并且你乘以一个可逆矩阵 M,且产生新的方程组 M(Ax) = Mb,那么这两个系统是等价的;它们具有相同的解集。这是因为可逆矩阵的乘法可以视为一个可逆的线性变换,不会改变方程解的存在性或唯一性。 换句话说,如果你将原

    2024年02月03日
    浏览(61)
  • 线性代数 | 矩阵运算 加减 数乘 矩阵的幂运算

    《线性代数》中会有较多陌生的概念,如矩阵的逆,线性相关线性无关等,具有一定的难度。因而本系列尽量会以不同于课本的视角去学习线性代数,有些可以做类比记忆的我们会去做一些类比记忆,比如矩阵的逆类比于我们数的除法,有一些比如线性相关和无关会尽量以几

    2024年02月04日
    浏览(50)
  • 0203逆矩阵-矩阵及其运算-线性代数

    定义7 对于 n n n 阶矩阵A,如果有一个 n n n 阶矩阵B,使 A B = B A = E AB=BA=E A B = B A = E 则说矩阵A是可逆的,并把矩阵B称为A的逆矩阵,简称逆阵。 定理1 若矩阵A可逆,则 ∣ A ∣ ≠ 0 vert Avert not = 0 ∣ A ∣  = 0 证明: A 可逆,即有 A − 1 ,使得 A A − 1 = E ∣ A A − 1 ∣ = ∣ A

    2024年04月13日
    浏览(60)
  • 线性代数2.2矩阵运算

    矩阵元素对应相加,显然只有同型矩阵才能相加 矩阵元素对应相减,显然只有同型矩阵才能相减 矩阵所有元素均有公因子,所有公因子朝外提一次 行列式提公因子:一行提一次 所有元素均有外提n次 与行列式乘法规则一致,行的每一个元素乘以列每一个元素,先相乘再相加

    2024年02月11日
    浏览(51)
  • 线性代数(二) 矩阵及其运算

    行列式det(A) 其实表示的只是一个值 ∣ a b c d ∣ = a d − b c begin{vmatrix} a b\\\\ c dend{vmatrix} = ad -bc ​ a c ​ b d ​ ​ = a d − b c ,其基本变化是基于这个值是不变。而矩阵表示的是一个数表。 矩阵与线性变换的关系 即得 ( a 11 a 12 . . . a 1 n a 21 a 22 . . . a 2 n . . . . . . . . . . . . . a

    2024年02月14日
    浏览(49)
  • 0205矩阵分块法-矩阵及其运算-线性代数

    1 分块矩阵的定义 将矩阵A用若干条纵线和横线分成许多个小矩阵,每一个小矩阵称为A的子快,以子块为元素的形式上的矩阵称为分块矩阵。 2 分块矩阵的运算(性质) 设矩阵A与B的行数相同,列数相同,采用相同的分块法,有 A = ( A 11 ⋯ A 1 r ⋮ ⋮ A s 1 ⋯ A s r ) , B = ( B 11 ⋯

    2024年04月26日
    浏览(39)
  • 线性代数|分块矩阵的运算规则

    定理 1 设矩阵 A boldsymbol{A} A 与 B boldsymbol{B} B 的行数相同、列数相同,采用相同的分块法,有 A = ( A 11 ⋯ A 1 r ⋮ ⋮ A s 1 ⋯ A s r ) , B = ( B 11 ⋯ B 1 r ⋮ ⋮ B s 1 ⋯ B s r ) boldsymbol{A} = begin{pmatrix} boldsymbol{A}_{11} cdots boldsymbol{A}_{1r} \\\\ vdots vdots \\\\ boldsymbol{A}_{s1} cdots boldsymbol{

    2024年02月07日
    浏览(49)
  • 【理解线性代数】(四)线性运算的推广与矩阵基础

    工业生产的发展趋势总是从单件生产到批量生产。科学技术研究也是一样,总是从简单计算到复合运算、批量运算。批量意味着生产能力、处理能力的提升。计算机从16位发展到64位,从单核发展到多核;计算机从CPU处理数据发展到GPU处理数据;大数据、人工智能领域的大模型

    2024年02月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包