【比較易懂的矩陣基本運算代碼】 加法 乘法 冪次方 (c++)

一 矩陣加法:

矩陣的加減法很簡單,就是對位相加減就行了。

比如 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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章