diff --git a/deb b/deb index 4f2efc7763b33da14d6c63d5e37dbab5041f7928..aa07200151af66580d88ab2f0ad317b450286c78 100755 --- a/deb +++ b/deb @@ -1,22 +1,144 @@ -9,11d8 -< #if !defined(__base2z_h) -< #define __base2z_h -< -13a11,12 -> #include "newmatap.h" -> #include "newmatio.h" -15c14,19 -< namespace MISCMATHS { ---- -> using namespace NEWMAT; -> -> namespace UTILS{ -> -> #if !defined(__base2z_h) -> #define __base2z_h -38a43,44 -> -> #endif -41,42d46 -< -< #endif +Log directory is: /usr/people/woolrich/fsl/nsrc/smmfast/logdir++++ +epibt =1000 +spatialdatafile =/usr/people/woolrich/matlab/smm/data/art_z_checker +maskfile =/usr/people/woolrich/matlab/smm/data/art_mask_checker +mrf_precision=0.25 +means=-0.187964 2.466296 -5.830409 + +vars=0.781579 2.096998 1.603299 + +props=0.559440 0.127918 0.312642 + +it=1 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=1988.99 +smmfunc.evaluate_withmrfprec(latest)=-1702.47 +latest(nclasses*num_superthreshold+1)=71.6585 +mrf_precision=71.6585 +it=2 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-1702.47 +smmfunc.evaluate_withmrfprec(latest)=-1969.63 +latest(nclasses*num_superthreshold+1)=114.107 +mrf_precision=114.107 +it=3 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-1969.63 +smmfunc.evaluate_withmrfprec(latest)=-2069.99 +latest(nclasses*num_superthreshold+1)=135.829 +mrf_precision=135.829 +it=4 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2069.99 +smmfunc.evaluate_withmrfprec(latest)=-2119.04 +latest(nclasses*num_superthreshold+1)=147.931 +mrf_precision=147.931 +it=5 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2119.04 +smmfunc.evaluate_withmrfprec(latest)=-2168.2 +latest(nclasses*num_superthreshold+1)=161.158 +mrf_precision=161.158 +it=6 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2168.2 +smmfunc.evaluate_withmrfprec(latest)=-2202.21 +latest(nclasses*num_superthreshold+1)=170.851 +mrf_precision=170.851 +it=7 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2202.21 +smmfunc.evaluate_withmrfprec(latest)=-2257.59 +latest(nclasses*num_superthreshold+1)=187.959 +mrf_precision=187.959 +it=8 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2257.59 +smmfunc.evaluate_withmrfprec(latest)=-2291.83 +latest(nclasses*num_superthreshold+1)=199.568 +mrf_precision=199.568 +it=9 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2291.83 +smmfunc.evaluate_withmrfprec(latest)=-2320.1 +latest(nclasses*num_superthreshold+1)=209.342 +mrf_precision=209.342 +it=10 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2320.1 +smmfunc.evaluate_withmrfprec(latest)=-2339.78 +latest(nclasses*num_superthreshold+1)=216.569 +mrf_precision=216.569 +it=11 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2339.78 +smmfunc.evaluate_withmrfprec(latest)=-2362.63 +latest(nclasses*num_superthreshold+1)=225.299 +mrf_precision=225.299 +it=12 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2362.63 +smmfunc.evaluate_withmrfprec(latest)=-2374.07 +latest(nclasses*num_superthreshold+1)=229.721 +mrf_precision=229.721 +it=13 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2374.07 +smmfunc.evaluate_withmrfprec(latest)=-2385.38 +latest(nclasses*num_superthreshold+1)=234.241 +mrf_precision=234.241 +it=14 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2385.38 +smmfunc.evaluate_withmrfprec(latest)=-2397.25 +latest(nclasses*num_superthreshold+1)=239.055 +mrf_precision=239.055 +it=15 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2397.25 +smmfunc.evaluate_withmrfprec(latest)=-2412.04 +latest(nclasses*num_superthreshold+1)=245.244 +mrf_precision=245.244 +it=16 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2412.04 +smmfunc.evaluate_withmrfprec(latest)=-2422.29 +latest(nclasses*num_superthreshold+1)=249.555 +mrf_precision=249.555 +it=17 +sit=1 +"Updating distribution params"=Updating distribution params +"Updating weights"=Updating weights +smmfunc.evaluate_withmrfprec(latest)=-2422.29 diff --git a/minimize.cc b/minimize.cc index a6dd5040943d5cb8b53b07b08d5d6d389eac3fa3..eb199a825514dbfd91f465c8d3cfe3a63d09a7e1 100644 --- a/minimize.cc +++ b/minimize.cc @@ -350,9 +350,7 @@ void fminsearch(ColumnVector& x, const EvalFunction& func){ } - -void scg(ColumnVector& x,const gEvalFunction& func){ - int niters=100; //default maybe make an options option +void scg(ColumnVector& x,const gEvalFunction& func, float tol, float eps, int niters){ int fevals=0; int gevals=0; @@ -371,8 +369,7 @@ void scg(ColumnVector& x,const gEvalFunction& func){ float lambdamax = 1.0e15; int j = 1; float mu=0,kappa=0,sigma=0,gamma=0,alpha=0,delta=0,Delta,beta=0; - float eps=1e-16; - float tol=0.0000001; + // main loop.. while(j<niters){ diff --git a/minimize.h b/minimize.h index c0c67b98343423ccf2a0e48bcad007d5ec37bb29..39de572199929d8f81f16c3b9b488f8de3ec3bde 100644 --- a/minimize.h +++ b/minimize.h @@ -81,7 +81,7 @@ ReturnMatrix hessian(const ColumnVector& x, const EvalFunction& func,float h,int void fminsearch(ColumnVector& x, const EvalFunction& func); -void scg(ColumnVector& x, const gEvalFunction& func); +void scg(ColumnVector& x, const gEvalFunction& func, float tol = 0.0001, float eps=1e-16, int niters=100); } diff --git a/miscprob.h b/miscprob.h index b6bd56047fea396b52e4d4e4763282605be9c88f..b50691da906d2fae6aa2cbb9204cf148bd2c0907 100644 --- a/miscprob.h +++ b/miscprob.h @@ -26,6 +26,7 @@ namespace MISCMATHS { ReturnMatrix normrnd(const int dim1 = 1, const int dim2 = -1, const float mu = 0, const float sigma = 1); + // returns nsamps*nparams matrix: ReturnMatrix mvnrnd(const RowVector& mu, const SymmetricMatrix& covar, int nsamp = 1); diff --git a/sparsefn.cc b/sparsefn.cc index 625d45c5b4ab1a5233cbb4f6190c84f93ae9120e..cf97bed1c8f791656bacac54b2f3021244489596 100644 --- a/sparsefn.cc +++ b/sparsefn.cc @@ -341,12 +341,12 @@ namespace MISCMATHS { } - float solvefortracex(const SparseMatrix& A, const SparseMatrix& b, SparseMatrix& x) + float solvefortracex(const SparseMatrix& A, const SparseMatrix& b, SparseMatrix& x, int nsamps, float tol) { Tracer_Plus trace("sparsefns::solvefortracex"); - int every = Max(1,A.Ncols()/100); - //int every = 1; + int every = Max(1,A.Ncols()/nsamps); + // int every = 1; OUT(every); float tr = 0.0; @@ -360,7 +360,7 @@ namespace MISCMATHS { ColumnVector br = b.RowAsColumn(r); ColumnVector xr = x.RowAsColumn(r); - solveforx3(A,br,xr); + solveforx3(A,br,xr,tol); for(int c = 1; c<=b.Ncols(); c++) { @@ -456,7 +456,7 @@ namespace MISCMATHS { // write_ascii_matrix("rho",rho); } - void solveforx3(const SparseMatrix& A, const ColumnVector& b, ColumnVector& x) + void solveforx3(const SparseMatrix& A, const ColumnVector& b, ColumnVector& x, float tol) { Tracer_Plus trace("sparsefns::solveforx3"); @@ -478,7 +478,7 @@ namespace MISCMATHS { ColumnVector w; ColumnVector p = r; - while(std::sqrt(rho(k))>0.2*norm2(b) && k < kmax) + while(std::sqrt(rho(k))>tol*norm2(b) && k < kmax) { k++; //if(k>2) diff --git a/sparsefn.h b/sparsefn.h index 740a397ad8a6f24dbdaca48f74c6b51f0eb1105c..7c2309813632ef0f2c7923627f6506691d0c33ee 100644 --- a/sparsefn.h +++ b/sparsefn.h @@ -31,8 +31,8 @@ namespace MISCMATHS { void solveforx(const SparseMatrix& A, const ColumnVector& b, ColumnVector& x); void solveforx(const SparseMatrix& A, const ColumnVector& b, SparseMatrix& x); void solveforx(const SparseMatrix& A, const SparseMatrix& b, SparseMatrix& x); - float solvefortracex(const SparseMatrix& A, const SparseMatrix& b, SparseMatrix& x); - void solveforx3(const SparseMatrix& A, const ColumnVector& b, ColumnVector& x); + float solvefortracex(const SparseMatrix& A, const SparseMatrix& b, SparseMatrix& x, int nsamps = 50, float tol = 0.001); + void solveforx3(const SparseMatrix& A, const ColumnVector& b, ColumnVector& x, float tol = 0.001); void solve(const SparseMatrix& A, const Matrix& b, SparseMatrix& x); void addto(SparseMatrix& A, const SparseMatrix& B, float S); void symmetric_addto(SparseMatrix& A, const SparseMatrix& B, float S);