#include #include #include #include #include #include "linsubs.h" void pdinv(double *cinv, double *coeff, int n) { double *tt; double *p ; double t, sum ; int i,j, k ; p = (double *)malloc(n*sizeof(double)); tt = (double *)malloc(n*n*sizeof(double)); for(i=0;i= 0; k--) sum -= a[i*n+k] * x[k]; x[i] = sum / p[i]; } for (i = (n-1); i >= 0; i--) { sum = x[i]; for (k = i + 1; k < n; k++) sum -= a[k*n+i]* x[k]; x[i] = sum / p[i]; } } int choldc (double *a, int n, double p[]) { int i, j,k; double sum; for (i = 0; i < n; i++) { for (j = i; j < n; j++) { sum = a[i*n+j]; for (k = i - 1; k >= 0; k--) sum -= a[i*n+k] * a[j*n+k]; if (i == j) { /** printf("zzchol %d %20.10f %9.3f\n",i, sum, a[i][i]) ; */ if (sum <= 0.0) { return -1 ; // not pos def } p[i] = sqrt (sum); } else { a[j*n+i] = sum / p[i]; } } } return 1 ; } void cholesky(double *cf, double *a, int n) { int i, j, k ; double *tt ; double *p ; p = (double *)malloc(n*sizeof(double)); tt = (double *)malloc(n*n*sizeof(double)); for(i=0;i