矩阵的相关运算公式就不贴了,线代课本和网上都有,直接上代码。
矩阵相加:
void sum(double *const pa,double *const pb, double *const sum,const int &x,const int &y)
{ //--------------------------------------矩阵相加
int i,j;
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
sum[i*y+j]=pa[i*y+j]+pb[i*y+j];
}
}
}
矩阵相乘:
void Mut(double *const pa,double *const pb, double *const Mut,const int &am,const int &an,const int &bm,const int bn)
{ //---------------------------------------矩阵相乘
int i,j,k,cm,cn;
double s;
cm = am;
cn = bn;
for(i=0;i<cm;i++)
{
for (j=0;j<cn;j++)
{
s=0;
for(k=0;k<an;k++)
{ s+=pa[i*an+k]*pb[k*bn+j];}
Mut[i*cn+j]=s;
}
}
}
矩阵转置:
void transpose(double *const A,double *const AT, const int &x,const int &y)
{
//------------------------------矩阵转置
int i,j;
for(i=0;i<x;i++)
{
for (j = 0; j<y; j++)
{
AT[j*x + i] = A[i*y + j];
}
}
}
矩阵求逆:
void ContraryMatrix(double *const pMatrix, double *const _pMatrix, const int &dim)
{//---------求pMatrix的逆矩阵,并存结果于矩阵_pMatrix中
double *tMatrix = new double[2*dim*dim];
for (int i=0; i<dim; i++){
for (int j=0; j<dim; j++)
tMatrix[i*dim*2+j] = pMatrix[i*dim+j];
}
for (int i=0; i<dim; i++){
for (int j=dim; j<dim*2; j++)
tMatrix[i*dim*2+j] = 0.0;
tMatrix[i*dim*2+dim+i] = 1.0;
}
for (int i=0; i<dim; i++)
{
double base = tMatrix[i*dim*2+i];
for (int j=0; j<dim; j++)
{
if (j == i) continue;
double times = tMatrix[j*dim*2+i]/base;
for (int k=0; k<dim*2; k++)
{
tMatrix[j*dim*2+k] = tMatrix[j*dim*2+k] - times*tMatrix[i*dim*2+k];
}
}
for (int k=0; k<dim*2; k++){
tMatrix[i*dim*2+k] /= base;
}
}
for (int i=0; i<dim; i++)
{
for (int j=0; j<dim; j++)
_pMatrix[i*dim+j] = tMatrix[i*dim*2+j+dim];
}
delete[] tMatrix;
}