//这个是我以前写的,vc编译器编译通过
#include
#include
#include
#include
using namespace std;
void swap(double &a,double &b)
{
double temp=a;
a=b;
b=temp;
}
/**********************************************
*函数名:InverseMatrix
*函数介绍:求逆矩阵(高斯—约当法)
*输入参数:矩阵首地址(二维数组)matrix,阶数row
*输出参数:matrix原矩阵的逆矩阵
*返回值:成功,0;失败,1
*调用函数:swap(double &a,double &b)
*作者:
*完成时间:2009-10-04
**********************************************/
int InverseMatrix(double *matrix,const int &row)
{
double *m=new double[row*row];
double *ptemp,*pt=m;
int i,j;
ptemp=matrix;
for (i=0;i
for (j=0;j
*pt=*ptemp;
ptemp++;
pt++;
}
}
int k;
int *is=new int[row],*js=new int[row];
for (k=0;k
double max=0;
//全选主元
//寻找最大元素
for (i=k;i
for (j=k;j
if (fabs(*(m+i*row+j))>max)
{
max=*(m+i*row+j);
is[k]=i;
js[k]=j;
}
}
}
if (0 == max)
{
return 1;
}
//行交换
if (is[k]!=k)
{
for (i=0;i
swap(*(m+k*row+i),*(m+is[k]*row+i));
}
}
//列交换
if (js[k]!=k)
{
for (i=0;i
swap(*(m+i*row+k),*(m+i*row+js[k]));
}
}
*(m+k*row+k)=1/(*(m+k*row+k));
for (j=0;j
if (j!=k)
{
*(m+k*row+j)*=*((m+k*row+k));
}
}
for (i=0;i
if (i!=k)
{
for (j=0;j
if(j!=k)
{
*(m+i*row+j)-=*(m+i*row+k)**(m+k*row+j);
}
}
}
}
for (i=0;i
if(i!=k)
{
*(m+i*row+k)*=-(*(m+k*row+k));
}
}
}
int r;
//恢复
for (r=row-1;r>=0;r--)
{
if (js[r]!=r)
{
for (j=0;j
swap(*(m+r*row+j),*(m+js[r]*row+j));
}
}
if (is[r]!=r)
{
for (i=0;i
swap(*(m+i*row+r),*(m+i*row+is[r]));
}
}
}
ptemp=matrix;
pt=m;
for (i=0;i
for (j=0;j
*ptemp=*pt;
ptemp++;
pt++;
}
}
delete []is;
delete []js;
delete []m;
return 0;
}
int main()
{
double a[6*6];
int i;
for(i=0;i<36;i++)
{
a[i] = rand()%1000+1;
}
for(i=0;i<36;i++)
{
cout< if ((i+1)%6 == 0)
{
cout<
}
cout<
for(i=0;i<36;i++)
{
cout< if ((i+1)%6 == 0)
{
cout<
}
cout<
return 0;
}