一 矩阵加法:
矩阵的加减法很简单,就是对位相加减就行了。
比如 1 2 和 1 2 相加等于 2 4
3 4 3 4 6 8
代码:
#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
ll ans[1100][1100]={0}; //记录答案矩阵
ll n,m,x; //n行m列
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>ans[i][j]; //直接把第一个矩阵的值保存在ans中
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>x; //第二个矩阵各个位置的值
cout<<ans[i][j]+x<<" "; //然后输出第一个加第二个的值
}
cout<<endl;
}
return 0;
}
二 矩阵乘法:
矩阵乘法运算规则:(图是百度百科的)
代码以n*n矩阵 自己乘自己为例
(这种情况应该比较好理解,n*m代码稍作修改就行)
比如 1 2 乘 1 2 等于 1x1+2x3 1x2+2x4 等于 7 10
3 4 3 4 3x1+4x3 3x2+4x4 15 22
代码:
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
int n; //n*n矩阵
ll ans[35][10]={0},a[35][10];
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
ans[i][j] += a[i][k]*a[k][j];
//手写一遍模拟一下就知道k为啥是这样了
for(int i=0;i<n;i++) //输出
{
for(int j=0;j<n;j++)
cout<<ans[i][j]<<" ";
cout<<endl;
}
return 0;
}
三 矩阵幂次方:
矩阵幂次方就和矩阵乘法很相似,但是ans矩阵要不断更新,用来多次与初始矩阵相乘,代码以n*n矩阵为例。
(纸上写一遍,模拟一下这个过程,看代码就更容易理解)
比如 1 2 的 2次幂就是初始矩阵 1 2 先与自身相乘
3 4 3 4
得到 7 10 如果是3次幂那就继续用得到的矩阵乘初始矩阵
15 22
代码:
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
int n,m; //n阶矩阵 m次方
ll ans[35][10]={0},a[35][10],temp[35][10]={0};
//ans存答案矩阵 , a存初始矩阵 , temp存中间计算过程矩阵
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j],ans[i][j]=a[i][j];
if(m==0)
//判断0阶 也就是单位矩阵,主对角线为1,其他都是0
//主对角线:左上角到右下角
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(i==j) ans[i][j]=1; //主对角线为1
else ans[i][j]=0; //其余为0
}
else
{
while(--m) //乘的次数
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
temp[i][j] += ans[i][k]*a[k][j];
//ans*初始矩阵a,结果加到temp矩阵中
for(int p=0;p<n;p++)
for(int q=0;q<n;q++)
ans[p][q]=temp[p][q],temp[p][q]=0;
//把临时的矩阵放到ans矩阵中,然后清0(方便下一次计算)
}
}
for(int i=0;i<n;i++) //输出
{
for(int j=0;j<n;j++)
{
cout<<ans[i][j];
if(j<n-1) cout<<" ";
}
cout<<endl;
}
return 0;
}