矩阵求逆的C/C++源程序
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 4
double AmldqbN]mldqbN]={{1,3,2,13},{7,2,1,-2},{9,15,3,-2},{-2,-2,11,5}};
inline void swap(double &a,double &b){double c=a;a=b;b=c;};
{
int i,j,k;
double d;
int JSmldqbN],ISmldqbN];
for (k=0;k<n;k++)
{
d=0;
for (i=k;i<n;i++)
for (j=k;j<n;j++)
{
if (fabs(Amldqbi]mldqbj])>d)
{
d=fabs(Amldqbi]mldqbj]);
ISmldqbk]=i;
JSmldqbk]=j;
}
}
if (d+1.0==1.0) return 0;
if (ISmldqbk]!=k)
for (j=0;j<n;j++)
swap(Amldqbk]mldqbj],AmldqbISmldqbk]]mldqbj]);
if (JSmldqbk]!=k)
for (i=0;i<n;i++)
swap(Amldqbi]mldqbk],Amldqbi]mldqbJSmldqbk]]);
Amldqbk]mldqbk]=1/Amldqbk]mldqbk];
for (j=0;j<n;j++)
if (j!=k) Amldqbk]mldqbj]=Amldqbk]mldqbj]*Amldqbk]mldqbk];
for (i=0;i<n;i++)
if (i!=k)
for (j=0;j<n;j++)
if (j!=k) Amldqbi]mldqbj]=Amldqbi]mldqbj]-Amldqbi]mldqbk]*Amldqbk]mldqbj];
for (i=0;i<n;i++)
if (i!=k) Amldqbi]mldqbk]=-Amldqbi]mldqbk]*Amldqbk]mldqbk];
}
for (k=n-1;k>=0;k--)
{
for (j=0;j<n;j++)
if (JSmldqbk]!=k) swap(Amldqbk]mldqbj],AmldqbJSmldqbk]]mldqbj]);
for (i=0;i<n;i++)
if (ISmldqbk]!=k) swap(Amldqbi]mldqbk],Amldqbi]mldqbISmldqbk]]);
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
printf(" %1.4f",Amldqbi]mldqbj]);
puts("");
}
}
void main()
{
DinV(A,4);
getch();
}