任意N阶复数矩阵求逆

余年寄山水
619次浏览
2020年08月01日 16:50
最佳经验
本文由作者推荐

客观实在性-互利

#include
#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;jM[i][j]=c0_real[i][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;jM[i][j]=c0_imag[i-n][j];
for(j=n;j<2*n;j++)
M[i][j]=c0_real[i-n][j-n];
}
//Gauss
for(i=0;iM[i][i+2*n]=1;
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;ifor(k=3*n-1;k>=0;k--)
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;ifor(j=0;j{
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(c0_real,c0_imag,cr_real,cr_imag);

for(int i=0;i{
for(int j=0;jprintf("%ft",cr_real[i][j]);
printf("
");
}
printf("
");
for(int i=0;i{
for(int j=0;jprintf("%ft",cr_imag[i][j]);
printf("
");
}

}

公孙仪不受鱼-清白的近义词


笑什么什么-臃怎么读


一个字的动词-凭空


害拼音-祉怎么读


掩耳盗铃造句-孟仲叔季


接二连三造句-婪怎么读


爱劳动的名言-露怎么读


四大文明发源地-忸怩作态