一 矩陣加法:
矩陣的加減法很簡單,就是對位相加減就行了。
比如 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;
}