![]() |
#2
guowei37582010-05-06 10:42
|
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include <iostream>
#define M 3
/*********************************************************************************************
函数名:juzhenqiuni
功能:求矩阵(g+jb)(n1*n1阶)的逆矩阵
参数:由g[M][M],b[M][M], n1传递
返回值:由(g+jb)(n1*n1阶)带回
**********************************************************************************************/
void juzhenqiuni(float g[M][M],float b[M][M],int n1)
{
static float Re,Im,t,d;
static float E[M][M]={0.0},g1[M][2*M]={0.0},b1[M][2*M]={0.0};
int i,j,k;
/*********************************************************************************************
以下为形成增广矩阵的过程
**********************************************************************************************/
for(i=1;i<=n1;i++) E[i][i]=1;
for(i=1;i<=n1;i++)
for(j=1;j<=n1;j++)
{
g1[i][j]=g[i][j];g1[i][j+n1]=E[i][j];
b1[i][j]=b[i][j];b1[i][j+n1]=E[i][j];
}
/********************************************************************************************
以下为求逆的过程
*********************************************************************************************/
do{
k=1;
Re=g1[k][k]/(g1[k][k]*g1[k][k]+b1[k][k]*b1[k][k]);
Im=-b1[k][k]/(g1[k][k]*g1[k][k]+b1[k][k]*b1[k][k]);
for(j=k+1;j<=2*n1;j++)
{t=g1[k][j];d=b1[k][j];
g1[k][j]=t*Re-d*Im;
b1[k][j]=d*Re+t*Im;
}
for(i=k+1;i<=n1;i++)
for(j=k+1;j<=2*n1;j++)
{
g1[i][j]=g1[i][j]-g1[i][k]*g1[k][j]+b1[i][k]*b1[k][j];
b1[i][j]=b1[i][j]-g1[i][k]*b1[k][j]-b1[i][k]*g1[k][j];
}
k++;
}while(k<=n1);
for(i=1;i<=n1;i++)
for(j=1;j<=n1;j++)
{
g[i][j]=g1[i][j];
b[i][j]=b1[i][j];
}
}
void main()
{
float g[3][3]={1,2,3,2,2,1,3,4,3};
float b[3][3]={0};
int n1,j,i;
FILE *fp1;
n1=3;
juzhenqiuni(g,b,n1);
fp1=fopen("output.txt","w");
for(i=1;i<=3;i++)
{
fprintf(fp1,"\n");
for(j=1;j<=3;j++)
fprintf(fp1,"%8.4f+j%8.4f",g[i][j],b[i][j]);
}
fclose(fp1);
}