Changeset 3104
- Timestamp:
- Jan 28, 2005, 5:16:20 AM (21 years ago)
- Location:
- trunk/Ohana/src/opihi
- Files:
-
- 2 edited
-
cmd.data/fit.c (modified) (2 diffs)
-
lib.data/gaussj.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/fit.c
r2843 r3104 90 90 } 91 91 } 92 gaussj (c, nterm, b, 1);92 if (!gaussj (c, nterm, b, 1)) goto escape; 93 93 94 94 /* print & save basic fit parameters */ … … 112 112 if (!Quiet) fprintf (stderr, "\n"); 113 113 114 for (i = 0; i < nterm; i++) { 115 free (b[i]); 116 free (c[i]); 117 } 118 free (b); 119 free (c); 120 free (s); 114 121 return (TRUE); 115 122 123 escape: 124 for (i = 0; i < nterm; i++) { 125 free (b[i]); 126 free (c[i]); 127 } 128 free (b); 129 free (c); 130 free (s); 131 return (FALSE); 116 132 } 117 118 119 120 -
trunk/Ohana/src/opihi/lib.data/gaussj.c
r2598 r3104 13 13 ipiv[j] = 0; 14 14 15 irow = icol = 0; 16 big = fabs(a[0][0]); 17 15 18 for (i = 0; i < n; i++) { 16 19 big = 0.0; 17 20 for (j = 0; j < n; j++) { 21 if (!finite(a[i][j])) { 22 fprintf (stderr, "GAUSSJ: NaN\n"); 23 goto escape; 24 } 18 25 if (ipiv[j] != 1) { 19 26 for (k = 0; k < n; k++) { … … 28 35 if (ipiv[k] > 1) { 29 36 fprintf (stderr, "GAUSSJ: Singular Matrix! (1)\n"); 30 return (0);37 goto escape; 31 38 } 32 39 } … … 44 51 if (a[icol][icol] == 0.0) { 45 52 fprintf (stderr, "GAUSSJ: Singular Matrix! (2)\n"); 46 return (0); 53 goto escape; 54 } 55 pivinv = 1.0 / a[icol][icol]; 56 a[icol][icol] = 1.0; 57 for (l = 0; l < n; l++) 58 a[icol][l] *= pivinv; 59 for (l = 0; l < m; l++) 60 b[icol][l] *= pivinv; 61 for (ll = 0; ll < n; ll++) { 62 if (ll != icol) { 63 dum = a[ll][icol]; 64 a[ll][icol] = 0.0; 65 for (l = 0; l < n; l++) 66 a[ll][l] -= a[icol][l]*dum; 67 for (l = 0; l < m; l++) 68 b[ll][l] -= b[icol][l]*dum; 69 } 70 } 71 } 72 73 for (l = n - 1; l >= 0; l--) { 74 if (indxr[l] != indxc[l]) 75 for (k = 0; k < n; k++) 76 SWAP (a[k][indxr[l]], a[k][indxc[l]]); 77 } 78 free (ipiv); 79 free (indxr); 80 free (indxc); 81 return (TRUE); 82 83 escape: 84 free (ipiv); 85 free (indxr); 86 free (indxc); 87 return (FALSE); 88 } 89 90 91 int fgaussj (float **a, int n, float **b, int m) { 92 93 int *indxc,*indxr,*ipiv; 94 int i, icol, irow, j, k, l, ll; 95 float big,dum,pivinv; 96 97 ALLOCATE (indxc, int, n); 98 ALLOCATE (indxr, int, n); 99 ALLOCATE (ipiv, int, n); 100 for (j = 0; j < n; j++) 101 ipiv[j] = 0; 102 103 irow = icol = 0; 104 big = fabs(a[0][0]); 105 106 for (i = 0; i < n; i++) { 107 big = 0.0; 108 for (j = 0; j < n; j++) { 109 if (!finite(a[i][j])) { 110 fprintf (stderr, "GAUSSJ: NaN\n"); 111 goto fescape; 112 } 113 if (ipiv[j] != 1) { 114 for (k = 0; k < n; k++) { 115 if (ipiv[k] == 0) { 116 if (fabs (a[j][k]) >= big) { 117 big = fabs (a[j][k]); 118 irow = j; 119 icol = k; 120 } 121 } 122 else 123 if (ipiv[k] > 1) { 124 fprintf (stderr, "GAUSSJ: Singular Matrix! (1)\n"); 125 goto fescape; 126 } 127 } 128 } 129 } 130 ipiv[icol]++; 131 if (irow != icol) { 132 for (l = 0; l < n; l++) 133 SWAP (a[irow][l], a[icol][l]); 134 for (l = 0; l < m; l++) 135 SWAP (b[irow][l], b[icol][l]); 136 } 137 indxr[i] = irow; 138 indxc[i] = icol; 139 if (a[icol][icol] == 0.0) { 140 fprintf (stderr, "GAUSSJ: Singular Matrix! (2)\n"); 141 goto fescape; 47 142 } 48 143 pivinv = 1.0 / a[icol][icol]; … … 73 168 free (indxc); 74 169 return (1); 75 }76 170 77 78 int fgaussj (float **a, int n, float **b, int m) { 79 80 int *indxc,*indxr,*ipiv; 81 int i, icol, irow, j, k, l, ll; 82 float big,dum,pivinv; 83 84 ALLOCATE (indxc, int, n); 85 ALLOCATE (indxr, int, n); 86 ALLOCATE (ipiv, int, n); 87 for (j = 0; j < n; j++) 88 ipiv[j] = 0; 89 90 for (i = 0; i < n; i++) { 91 big = 0.0; 92 for (j = 0; j < n; j++) { 93 if (ipiv[j] != 1) { 94 for (k = 0; k < n; k++) { 95 if (ipiv[k] == 0) { 96 if (fabs (a[j][k]) >= big) { 97 big = fabs (a[j][k]); 98 irow = j; 99 icol = k; 100 } 101 } 102 else 103 if (ipiv[k] > 1) { 104 fprintf (stderr, "GAUSSJ: Singular Matrix! (1)\n"); 105 return (0); 106 } 107 } 108 } 109 } 110 ipiv[icol]++; 111 if (irow != icol) { 112 for (l = 0; l < n; l++) 113 SWAP (a[irow][l], a[icol][l]); 114 for (l = 0; l < m; l++) 115 SWAP (b[irow][l], b[icol][l]); 116 } 117 indxr[i] = irow; 118 indxc[i] = icol; 119 if (a[icol][icol] == 0.0) { 120 fprintf (stderr, "GAUSSJ: Singular Matrix! (2)\n"); 121 return (0); 122 } 123 pivinv = 1.0 / a[icol][icol]; 124 a[icol][icol] = 1.0; 125 for (l = 0; l < n; l++) 126 a[icol][l] *= pivinv; 127 for (l = 0; l < m; l++) 128 b[icol][l] *= pivinv; 129 for (ll = 0; ll < n; ll++) { 130 if (ll != icol) { 131 dum = a[ll][icol]; 132 a[ll][icol] = 0.0; 133 for (l = 0; l < n; l++) 134 a[ll][l] -= a[icol][l]*dum; 135 for (l = 0; l < m; l++) 136 b[ll][l] -= b[icol][l]*dum; 137 } 138 } 139 } 140 141 for (l = n - 1; l >= 0; l--) { 142 if (indxr[l] != indxc[l]) 143 for (k = 0; k < n; k++) 144 SWAP (a[k][indxr[l]], a[k][indxc[l]]); 145 } 171 fescape: 146 172 free (ipiv); 147 173 free (indxr); 148 174 free (indxc); 149 return ( 1);175 return (FALSE); 150 176 }
Note:
See TracChangeset
for help on using the changeset viewer.
