任意N阶复数矩阵求逆
别妄想泡我
851次浏览
2020年08月01日 16:50
最佳经验
本文由作者推荐
客观实在性-互利
#include
#include"stdlib.h"
#include "stdio.h"
using namespace std;
template
void reciprocal_complex_matrix(double c0_real[n][n],double c0_imag[n][n],double cr_real[n][n],double cr_imag[n][n])
{
int i,j,k,m;
double t;
double M[3*n][3*n]={0};
for(i=0;i
for(j=0;j
for(j=n;j<2*n;j++)
M[i][j]=-1.0*c0_imag[i][j-n];
M[i][i+2*n]=1;
}
for(i=n;i<2*n;i++)
{
for(j=0;j
for(j=n;j<2*n;j++)
M[i][j]=c0_real[i-n][j-n];
}
//Gauss
for(i=0;i
for(j=0;j<2*n;j++)
{
for(i=j;i<2*n;i++)
{
if(fabs(M[i][j])>fabs(M[j][j]))
m=i;
else
m=j;
}
for(k=0;k<3*n;k++)
{
t=M[j][k];
M[j][k]=M[m][k];
M[m][k]=t;
}
for(i=j+1;i<2*n;i++)
for(k=3*n-1;k>=j;k--)
M[i][k]=M[i][k]-M[j][k]*M[i][j]/M[j][j];
}
for(j=2*n-1;j>0;j--)
for(i=0;i
M[i][k]=M[i][k]-M[j][k]*M[i][j]/M[j][j];
for(i=0;i<2*n;i++)
for(k=3*n-1;k>=0;k--)
M[i][k]=M[i][k]/M[i][i];
for(i=0;i
cr_real[i][j]=M[i][j+2*n];
cr_imag[i][j]=M[i+n][j+2*n];
}
}
void main()
{
const int n=2;//n阶方阵t
//输入原矩阵
double c0_real[n][n]={{1,3},{2,4}};//实部
double c0_imag[n][n]={{2,5},{4,6}};//虚部
//需要求的逆矩阵
double cr_real[n][n]={0};
double cr_imag[n][n]={0};
reciprocal_complex_matrix
for(int i=0;i
for(int j=0;j
printf("
");
}
printf("
");
for(int i=0;i
for(int j=0;j
printf("
");
}
}