12345678910111213141516171819202122232425262728293031323334353637383940 |
- #include <grass/gis.h>
- #include <grass/gmath.h>
- int invert(
- /* inverts a matrix of arbitrary size input as a 2D array. */
- double **a, /* input/output matrix */
- int n, /* dimension */
- double *det, /* determinant */
- int *indx, /* indx = G_alloc_ivector(n); */
- double **y, /* y = G_alloc_matrix(n,n); */
- double *col /* col = G_alloc_vector(n); */
- )
- {
- int i, j;
- double d;
- if (G_ludcmp(a, n, indx, &d)) {
- for (j = 0; j < n; j++) {
- d *= a[j][j];
- for (i = 0; i < n; i++)
- col[i] = 0.0;
- col[j] = 1.0;
- G_lubksb(a, n, indx, col);
- for (i = 0; i < n; i++)
- y[i][j] = col[i];
- }
- *det = d;
- for (i = 0; i < n; i++)
- for (j = 0; j < n; j++)
- a[i][j] = y[i][j];
- return (1);
- }
- else {
- *det = 0.0;
- return (0);
- }
- }
|