矩阵乘法与运用
来源:互联网 发布:dota后期三大核 知乎 编辑:程序博客网 时间:2024/06/05 04:57
矩阵
矩阵乘法:矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义[1] 。一般单指矩阵乘积时,指的便是 一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。举个例子说明一下:
注意:矩阵不满足结合律,其他的定律满足,即AB!=BA。
判断两个矩阵是否可以相乘的条件:矩阵只有当左边矩阵的列数等于右边矩阵的行数时,它们才可以相乘!
矩阵的简单运用:
Description
在数学中,矩阵是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。
矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。 矩阵的运算是数值分析领域的重要问题。将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。对一些应用广泛而形式特殊的矩阵,例如稀疏矩阵和准对角矩阵,有特定的快速运算算法。
作为A+B问题,我们在此掌握矩阵的加法运算:
$$ \left( \begin{matrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{matrix}\right) + \left( \begin{matrix} b_{11} & b_{12} & b_{13} \\ b_{21} & b_{22} & b_{23} \\ b_{31} & b_{32} & b_{33} \end{matrix}\right) = \left( \begin{matrix} a_{11} + b_{11} & a_{12}+ b_{12} & a_{13}+ b_{13} \\ a_{21}+ b_{21} & a_{22}+ b_{22} & a_{23}+ b_{23} \\ a_{31}+ b_{31} & a_{32}+ b_{32} & a_{33}+ b_{33} \end{matrix}\right)$$
上式就表示两个3*3
矩阵的加法,聪明的你应该想到n*m
的矩阵运算法则:两个n*m
矩阵A
和B
的和,一样是个n*m
矩阵,其内的各元素为其相对应元素相加后的值。
现在给你两个矩阵A
、B
,请你输出得到的A+B
结果矩阵。
Input
第一行是两个数n
、m
,表示给出两个n
行m
列的矩阵。
下面n
行描述矩阵A
,再下面n
行描述矩阵B
。
详细格式请参考样例。
1 ≤ n ≤ 50
1 ≤ m ≤ 50
0 ≤ |aij| ≤ 105
0 ≤ |bij| ≤ 105
Output
请输出n
行数描述矩阵A+B
。
每行的m
个数用一个空格分隔开,行末不需要空格。
Sample Input
2 31 2 33 4 51 1 01 2 0
Sample Output
2 3 34 6 5
Hint
请严格按照格式输出,不要输出多余空格。
#include<stdio.h>int a[521][521],b[521][521],c[521][521]={0};//数组比较大时,定义在main函数的外面//int main(){int m,n;scanf("%d%d",&n,&m);for(int i=0;i<n;i++){for(int j=0;j<m;j++)scanf("%d",&a[i][j]);} for(int i=0;i<n;i++){for(int j=0;j<m;j++)scanf("%d",&b[i][j]);}for(int i = 0; i < n;i++){for(int j=0;j<m;j++){c[i][j]=a[i][j]+b[i][j];//该公式实现矩阵加法// }}for(int i=0;i<n;i++)//输出// {for(int k=0;k<m;k++){printf("%d",c[i][k]);if(k==m-1)printf("\n");elseprintf(" ");}}return 0 ;}
下面再看一道题目:
Description
给定两个矩阵$A$和$B$,你需要判断它们是否可以相乘,若可以请输出相乘后的矩阵。
Input
第一行输入一个整数$T$,代表有$T$组测试数据。
每组数据第一行输入两个整数$N,M$,代表矩阵$A$的行、列。
接下来$N$行,每行输入$M$个整数$a[][]$。
之后一行输入两个整数$n,m$,代表矩阵$B$的行、列。
接下来$n$行,每行输入$m$个整数$b[][]$。
注:$1 <= T <= 500,1 <= N,m <= 100,1 <= M,n <= 10,1 <= $矩阵元素$<= 20$。
Output
若矩阵$A、B$可以相乘,先输出$YES$,再输出相乘得到的矩阵。
对每行的矩阵元素,每两个元素之间有一个空格,最后一个没有空格。
反之输出$NO$。
Sample Input
22 21 11 12 31 1 11 1 12 31 1 11 1 12 21 11 1
Sample Output
YES2 2 22 2 2NO
#include<stdio.h>int a[521][521],b[521][521];int main(){int t;scanf("%d",&t);while(t--){//根据行列式乘法规则,左乘矩阵的列数 = 右乘矩阵的行数//不满足就不能相乘//int n,m,p,q;scanf("%d%d",&n,&m);for(int i=0;i<n;i++){for(int j=0;j<m;j++)scanf("%d",&a[i][j]);}scanf("%d%d",&p,&q);for(int i=0;i<p;i++){for(int j=0;j<q;j++)scanf("%d",&b[i][j]);}if(m!=p){printf("NO\n");}else{printf("YES\n");for(int i = 0; i < n;i++){for(int j=0;j<q;j++){int ans=0;for(int k=0;k<m;k++)ans+=a[i][k]*b[k][j];printf("%d",ans);if(j!=q-1)printf(" ");elseprintf("\n");}}}}return 0 ;}
愿你走过半生,归来仍是少年! - 矩阵乘法与运用
- 矩阵乘法与应用
- MPI矩阵与向量乘法
- 矩阵乘法与线性递推式
- 稀疏矩阵乘法与加法
- 3 乘法与逆矩阵
- 浅谈矩阵乘法与矩阵二次型
- 矩阵构造方法与矩阵乘法
- 矩阵分块与矩阵乘法的理解
- matlab矩阵乘法与矩阵点乘法的规则区别
- 稀疏矩阵处理与运用
- 【线性代数】矩阵的乘法与求逆
- 线性递推关系与矩阵乘法
- 矩阵乘法的MapReduce程序设计与实现
- 递归与分治策略:Strassen矩阵乘法
- C++ 矩阵加法与乘法的实现
- Strassen矩阵乘法 分治与递归
- Matlab与线性代数 -- 矩阵的乘法
- js Tree 简单使用例子
- VS2017上执行VS2013项目错误MSB802之解决方案
- Mapreduce模型
- Android ActionBar应用实战,高仿微信主界面的设计
- 算法竞赛入门——因子和阶乘
- 矩阵乘法与运用
- [KMP+矩阵快速幂加速]BZOJ 1009——[HNOI2008]GT考试
- 第一章:1.2.2系统分类(一)
- CSS, JavaScript, jQuery实现标签页切换
- 安装包cmake后可否删除源文件?
- H5知识点
- 20170814_深度探索C++对象模型
- QT中QWidget、QDialog及QMainWindow的区别
- 生信脚本练习(10)找出fasta文件中最长的转录本