/* Steven Andrews, 2/20/93. Modified substantially 9/98. */ /* See documentation called RnLU doc */ /* Copyright 2003 by Steven Andrews. Permission is granted for non-commercial use of and modifications to the code. */ #include #include #include "math2.h" #include "Rn.h" #include "RnLU.h" float LUdecomp(float *a,int n,int **indxptr) { int i,j,k,imax,*indx; double big,temp,dum,sum; float *vv; indx=*indxptr=NULL; vv=allocV(n); /* row scaling vector */ if(!vv) goto failure; *indxptr=indx=(int *) calloc(n+1,sizeof(int)); /* row index */ if(!indx) goto failure; indx[n]=1; /* even number row swaps */ for(i=0;ibig) big=temp; if(big==0.0) goto failure; /* singular */ vv[i]=1.0/big; } imax=0; for(j=0;j=big) { big=dum; imax=i; }} if(j!=imax) { for(k=0;k=0;i--) { sum=b[i]; for(j=i+1;j=0;i--) { sum=b[nb*i+k]; for(j=i+1;j