1、求解逆矩阵源代码:
#include
#include
#include
#define TINY 1.0e-20
void inverse(double**,int);
void ludcmp(double**, int, int*, double*);
void lubksb(double**, int, int*, double*);
double **matrix(int,int,int,int);
double *vector(int,int);
void free_matrix(double**,
2、int,int,int,int);
void free_vector(double*,int,int);
void inverse(double **mat, int dim)
{
int i,j,*indx;
double **y,d,*col;
y = matrix(0,dim-1,0,dim-1);
indx = (int *)malloc((unsigned)(dim*sizeof(int)));
col = vector(0,dim-1);
ludcmp(mat,dim,indx,&d);
for (j=0;j3、m;j++)
{
for (i=0;i4、
free(indx);
}
void ludcmp(double **a, int n, int *indx, double *d)
{
int i,imax,j,k;
double big,dum,sum,temp;
double *vv;
vv = (double*)malloc((unsigned)(n*sizeof(double)));
if (!vv)
{
fprintf(stderr,"Error Allocating Vector Memory\n");
exit(1);
}
*d = 1.
5、0;
for (i=0;i big) big = temp;
}
if (big == 0.0)
{
fprintf(stderr,"Singular Matrix in Routine LUDCMP\n");
for (j=0;j6、 exit(1);
}
vv[i] = 1.0/big;
}
for (j=0;j7、0;k= big)
{
big = dum;
imax = i;
}
}
if (j != imax)
{
for (k=0;k8、 a[j][k] = dum;
}
*d = -(*d);
vv[imax] = vv[j];
}
indx[j] = imax;
if (a[j][j] == 0.0) a[j][j] = TINY;
if (j != n-1)
{
dum = 1.0 / a[j][j];
for (i=j+1;i9、ble **a, int n, int *indx, double *b)
{
int i,ip,j,ii=-1;
double sum;
for (i=0;i=0)
for (j=ii;j=0;i--)
{
sum = b[i];
for (j=i+1;j