malt-wr
qdet.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

double det (double **aa, int n)
 

Function Documentation

double det ( double **  aa,
int  n 
)

Definition at line 6 of file qdet.c.

7 {
8  int i, imax, j, k;
9  double d, big, dum, sum, tem;
10  double *vv;
11 
12  vv=vector(1,n);
13  d=1.0;
14  for (i=1;i<=n;i++) {
15  big=0.0;
16  for (j=1;j<=n;j++)
17  if ((tem=fabs(aa[i][j])) > big) big=tem;
18  if (big == 0.0) nrerror ("Singular matrix in routine dim");
19  vv[i]=1.0/big;
20  }
21  for (j=1;j<=n;j++) {
22  for (i=1;i<j;i++) {
23  sum=aa[i][j];
24  for (k=1;k<i;k++) sum -= aa[i][k]*aa[k][j];
25  aa[i][j]=sum;
26  }
27  big=0.0;
28  for (i=j;i<=n;i++) {
29  sum=aa[i][j];
30  for (k=1;k<j;k++)
31  sum -= aa[i][k]*aa[k][j];
32  aa[i][j]=sum;
33  if ( (dum=vv[i]*fabs(sum)) >= big) {
34  big=dum;
35  imax=i;
36  }
37  }
38  if (j != imax) {
39  for (k=1;k<=n;k++) {
40  dum=aa[imax][k];
41  aa[imax][k]=aa[j][k];
42  aa[j][k]=dum;
43  }
44  d = -d;
45  vv[imax]=vv[j];
46  }
47  if (aa[j][j] == 0.0) aa[j][j]=TINY;
48  if (j != n) {
49  dum=1.0/(aa[j][j]);
50  for (i=j+1;i<=n;i++) aa[i][j] *= dum;
51  }
52  }
53 /* tack on the determinant determination */
54  for (j=1;j<=n;j++)
55  d *= aa[j][j];
56 
57  free_vector(vv,1,n);
58  return d;
59 }
void free_vector(double *v, int nl, int nh)
Definition: qnrutil.c:95
void nrerror(char *error_text)
Definition: lineread.c:7
#define TINY
Definition: qdet.c:4
double * vector(int nl, int nh)
Definition: qnrutil.c:16