24 bool decomposed =
true;
31 vv=(
Real *)malloc((n+1)*
sizeof(
Real));
37 if ((temp=fabs(a[i][j])) > big) big=temp;
56 sum -= a[i][k]*a[k][j];
69 sum -= a[i][k]*a[k][j];
73 if ( (dum=vv[i]*fabs(
sum)) >= big) {
86 if (a[j][j] == 0.0) a[j][j]=
TINY;
89 for (i=j+1;i<=n;i++) a[i][j] *= dum;
112 for (j=ii;j<=i-1;j++)
131 int i,j, dum, *order;
135 order = (
int * )calloc( n,
sizeof(
int ) );
136 product = (
Real * )calloc( n,
sizeof(
Real) );
142 for (i=n-1; i>=0;i--) {
144 order[i] = order[indx[i]-1];
145 order[indx[i]-1] = dum;
149 for (i=0; i<n; i++) {
152 product[i] += a[i][j]*b[j];
156 for (i=0; i<n; i++) {
158 for (j=0; j<order[i]-1; j++ )
159 c[i] += a[order[i]-1][j]*product[j];
160 c[i] += product[order[i]-1];
171 int i,j, k, dum, *order;
175 order = (
int * )calloc( n,
sizeof(
int ) );
176 product = (
Real * )calloc( n,
sizeof(
Real) );
182 for (i=n-1; i>=0;i--) {
184 order[i] = order[indx[i]-1];
185 order[indx[i]-1] = dum;
188 for ( k=0; k<n; k++ ) {
190 for (i=0; i<n; i++) {
193 product[i] += a[i][j]*b[j][k];
197 for (i=0; i<n; i++) {
199 for (j=0; j<order[i]-1; j++ )
200 c[i][k] += a[order[i]-1][j]*product[j];
201 c[i][k] += product[order[i]-1];
230 for ( i=1; i<n; i++ ) {
246 for ( i=1; i<n; i++ )
249 for ( i=n-2; i>=0; i-- )
250 f[i] = (f[i]-c[i]*f[i+1])/a[i];
260 for (
sum=a[i][j],k=i-1;k>=1;k--)
sum -= a[i][k]*a[j][k];
263 fprintf( stderr,
"choldc failed\n");
267 }
else a[j][i]=
sum/p[i];
278 for (
sum=b[i],k=i-1;k>=1;k--)
sum -= a[i][k]*x[k];
282 for (
sum=x[i],k=i+1;k<=n;k++)
sum -= a[k][i]*x[k];
bool ludcmp(Real **a, size_t n, int *indx, Real *d)
void cholsl(Real **a, int n, Real p[], Real b[], Real x[])
Real ** mat_mult_ludcmp(int n, Real **a, int *indx, Real **b, Real **c)
void choldc(Real **a, int n, Real p[])
void tridiagbksb(int n, Real *a, Real *b, Real *c, Real *f)
void tridiagDecomp(int n, Real *a, Real *b, Real *c)
Real * lumult(int n, Real **a, Real *b, Real *c, int *indx)
void lubksb(Real **a, size_t n, int *indx, Real *b)
T sum(const vector< T > &vec)
Compute sum of a vector's entries.