struct LUdcmp { Int n; MatDoub lu; VecInt indx; Doub d; LUdcmp(MatDoub_I &a); void solve(VecDoub_I &b, VecDoub_O &x); void solve(MatDoub_I &b, MatDoub_O &x); void inverse(MatDoub_O &ainv); Doub det(); void mprove(VecDoub_I &b, VecDoub_IO &x); MatDoub_I &aref; }; LUdcmp::LUdcmp(MatDoub_I &a) : n(a.nrows()), lu(a), aref(a), indx(n) { const Doub TINY=1.0e-40; Int i,imax,j,k; Doub big,temp; VecDoub vv(n); d=1.0; for (i=0;i big) big=temp; if (big == 0.0) throw("Singular matrix in LUdcmp"); vv[i]=1.0/big; } for (k=0;k big) { big=temp; imax=i; } } if (k != imax) { for (j=0;j=0;i--) { sum=x[i]; for (j=i+1;j