这是线代里面矩阵的基本运算
转置就是行和列的下标互换:b[i][j]=a[j]][i]
相加矩阵的行列必须相同:c[i][j]=a[i][j]+b[i][j]
相乘矩阵a的m行*n列与矩阵b的n行*k列相乘得一个m行*k列的矩阵
行乘列:c[i][j]=a[i][j]*b[j][i](c矩阵是m行k列)
我写了一个c++的小程序,很简单!
#include<iostream> #define maxsize 100 using namespace std; void trasmat(int a[][maxsize],int b[][maxsize],int m,int n){ for(int i=0;i<m;++i){ for(int j=0;j<n;++j){ b[j][i]=a[i][j];//转置 } } } void addmat(int a[][maxsize],int b[][maxsize],int c[][maxsize],int m,int n){ for(int i=0;i<m;++i){ for(int j=0;j<n;++j){ c[i][j]=a[i][j]+b[i][j];//相加 } } } void mutmat(int a[][maxsize],int b[][maxsize],int c[][maxsize],int m,int n,int k){ for(int i=0;i<m;++i){ for(int j=0;j<k;++j){ c[i][j]=0; for(int l=0;l<n;++l){ c[i][j]+=a[i][l]*b[l][j];//相乘 } } } } void printmat(int c[][maxsize],int m,int n){ for(int i=0;i<m;++i){ for(int j=0;j<n;++j){ cout<<c[i][j]<<" "; } cout<<"\n"; } } int main(){ cout<<"矩阵转置相加相乘\n"; int input,m,n; int a[maxsize][maxsize],b[maxsize][maxsize],c[maxsize][maxsize]; bool flag=1; while(flag){ cout<<"\n矩阵的装置请按1 两个矩阵相加请按2 进行矩阵相乘请按3\n"; cin>>input; switch(input){ case 1: cout<<"输入需要转置矩阵的行数m和列数n:"<<endl; cin>>m>>n; cout<<"输入数据:\n"; for(int i=0;i<m;++i){ for(int j=0;j<n;++j){ cin>>a[i][j];//输入 } } trasmat(a,b,m,n); cout<<"转置结果:\n"; printmat(b,n,m); break; case 2: cout<<"输入第一个矩阵的行数m和列数n:"<<endl; cin>>m>>n; cout<<"第一个矩阵数据:\n"; for(int i=0;i<m;++i){ for(int j=0;j<n;++j){ cin>>a[i][j];//输入 } } cout<<"第二个矩阵数据:\n"; for(int i=0;i<m;++i){ for(int j=0;j<n;++j){ cin>>b[i][j];//输入 } } cout<<"相加结果:\n"; addmat(a,b,c,m,n); printmat(c,m,n); break; case 3: cout<<"输入第一个矩阵的行数m和列数n:"<<endl; cin>>m>>n; cout<<"第一个矩阵数据:\n"; for(int i=0;i<m;++i){ for(int j=0;j<n;++j){ cin>>a[i][j];//输入 } } int k; cout<<"输入第二个矩阵的行数n和列数k:"<<endl; cin>>n>>k; cout<<"第二个矩阵数据:\n"; for(int i=0;i<n;++i){ for(int j=0;j<k;++j){ cin>>b[i][j];//输入 } } cout<<"相乘结果:\n"; mutmat(a,b,c,m,n,k); printmat(c,m,k); break; default: cout<<"输入错误!!!\n"; break; } cout<<"退出程序输入end,继续请输入again"<<endl; string s; cin>>s; if(s!="again"&&s!="end"){ cout<<"指令错误重新输入\n"; cin>>s; } if(s=="again"){ flag=true; } else if(s=="end"){ flag=false; } } return 0; }
?没问题!运行一下还可以.
有问题欢迎留言。