以下部分摘自百度百科
矩阵加法:
矩阵+常数:
由于矩阵是一堆数,常数就一个,所以要把常数变为单位矩阵再相加
单位矩阵用E表示:除了第i行第i列是1外,其他都是0
所以矩阵+2,+1,就是+1E,+2E (2E就是E*2,即除了第i行第i列是2外,其他都是0)
常数变完后就是正常的两个矩阵相加了,然后按上述方法
百度了一下,单位矩阵只有方形的即n*n的,那么是否代表只有方阵才能加常数,百度不到答案额..
矩阵减法:同上
矩阵乘法:
数乘:
每项相乘就好了
矩阵相乘:
两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵
A×B=C中,乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
struct Matrix{
int a[32][32];
int r; // r*r
Matrix(int r):r(r){memset(a,0,sizeof(a));} //初始化长
void MakeI(int x){ //变为x*E的单位矩阵
memset(a,0,sizeof(a));
for(int i=0;i<r;i++) a[i][i]=x;
}
Matrix operator * (const Matrix& m) { //矩阵乘法
Matrix result(r);
for(int i=0;i<r;i++)
for(int j=0;j<r;j++)
{
for(int k=0;k<r;k++)
result.a[i][j]+=a[i][k]*m.a[k][j];
}
return result;
}
Matrix operator % (const int p){ //矩阵对每个元素取余
Matrix result(*this);
for(int i=0;i<r;i++)
for(int j=0;j<r;j++)
result.a[i][j]%=p;
return result;
}
Matrix operator + (const Matrix& m){ //矩阵互相相加
Matrix result(r);
for(int i=0;i<r;i++)
for(int j=0;j<r;j++)
result.a[i][j]=a[i][j]+m.a[i][j];
return result;
}
Matrix operator + (int n){ //加上个常数
Matrix result(r);
result.MakeI(n);
return *this+result;
}
};