Oh, I forgot to mention, but I also converted the Relax_fit.test_curve_fitting_height and Relax_fit.test_curve_fitting_volume system tests to use BFGS optimisation. This is one of the best optimisation techniques when only the function and gradient are present, as it tries to numerically approximate the Hessian matrix, updating it as the algorithm moves along. It is fast and performs incredibly well, so it is a widely used algorithm. The system tests using BFGS demonstrate that the gradient works very well for optimisation. It isn't as fast as Newton optimisation however.
Regards, Edward On 26 August 2014 13:00, Edward d'Auvergne <[email protected]> wrote: > Hi Troels, > > I've now implemented the exponential curve-fitting dfunc() function > for calculating the gradient. This includes: > > - The Python wrapper function > specific_analyses.relax_fit.optimisation.dfunc_wrapper(), > - The target_functions/c_chi2.c function dchi2(), > - The target_functions/exponential.c functions exponential_dI0() and > exponential_dR(), > - The target_functions.relax_fit C module dfunc() Python function. > > I have tested the gradient using the numerical integration in the > test_suite/shared_data/curve_fitting/numeric_gradient/integrate.py > file to determine what the chi-squared gradient should be at different > parameter combinations. And this has been converted into a few unit > tests. As this works, that means that the jacobian() function of the > C module should also be correct and bug-free, hence you should be able > to use it to obtain the covariance matrix. > > This is all I will do for now. All that is left is to do for the > target_functions.relax_fit C module is simply the same thing, but for > the Hessian. Feel free to give this a go if you are interested. If I > have time in the future, I might add this too. > > Regards, > > Edward > > > > > > On 24 August 2014 17:56, Troels E. Linnet > <[email protected]> wrote: >> URL: >> <http://gna.org/task/?7822> >> >> Summary: Implement user function to estimate R2eff and >> associated errors for exponential curve fitting. >> Project: relax >> Submitted by: tlinnet >> Submitted on: Sun 24 Aug 2014 03:56:36 PM UTC >> Should Start On: Sun 24 Aug 2014 12:00:00 AM UTC >> Should be Finished on: Sun 24 Aug 2014 12:00:00 AM UTC >> Category: relax's source code >> Priority: 5 - Normal >> Status: In Progress >> Percent Complete: 0% >> Assigned to: tlinnet >> Open/Closed: Open >> Discussion Lock: Any >> Effort: 0.00 >> >> _______________________________________________________ >> >> Details: >> >> A verification script, showed that using scipy.optimize.leastsq reaches the >> exact same parameters as minfx for exponential curve fitting. >> >> The verification script is in: >> test_suite/shared_data/curve_fitting/profiling/profiling_relax_fit.py >> test_suite/shared_data/curve_fitting/profiling/verify_error.py >> >> The profiling script shows that a 10 X increase in speed can be reached by >> removing >> the linear constraints when using minfx. >> >> The profiling also shows that scipy.optimize.leastsq is 10X as fast as using >> minfx, even without linear constraints. >> >> scipy.optimize.leastsq is a wrapper around wrapper around MINPACK's lmdif and >> lmder algorithms. >> >> MINPACK is a FORTRAN90 library which solves systems of nonlinear equations, >> or >> carries out the least squares minimization of the residual of a set of linear >> or nonlinear equations. >> >> The verification script also shows, that a very heavy and time consuming >> monte carlo simulation of 2000 steps, reaches the same errors as the errors >> reported by scipy.optimize.leastsq. >> >> The return from scipy.optimize.leastsq, gives the estimated co-variance. >> Taking the square root of the co-variance corresponds with 2X error reported >> by minfx after 2000 Monte-Carlo simulations. >> >> This could be an extremely time saving step, when performing model fitting in >> R1rho, where the errors of the R2eff values, are estimated by Monte-Carlo >> simulations. >> >> The following setup illustrates the problem. >> This was analysed on a: MacBook Pro, 13-inch, Late 2011. >> With no multi-core setup. >> >> Script running is: >> test_suite/shared_data/dispersion/Kjaergaard_et_al_2013/2_pre_run_r2eff.py >> >> This script analyses just the R2eff values for 15 residues. >> It estimates the errors of R2eff based on 2000 Monte Carlo simulations. >> For each residues, there is 14 exponential graphs. >> >> The script was broken after 35 simulations. >> This was measured to 20 minutes. >> So 500 simulations would take about 4.8 Hours. >> >> The R2eff values and errors can by scipy.optimize.leastsq can instead be >> calculated in: 15 residues * 0.02 seconds = 0.3 seconds. >> >> >> >> >> _______________________________________________________ >> >> Reply to this item at: >> >> <http://gna.org/task/?7822> >> >> _______________________________________________ >> Message sent via/by Gna! >> http://gna.org/ >> >> >> _______________________________________________ >> relax (http://www.nmr-relax.com) >> >> This is the relax-devel mailing list >> [email protected] >> >> To unsubscribe from this list, get a password >> reminder, or change your subscription options, >> visit the list information page at >> https://mail.gna.org/listinfo/relax-devel _______________________________________________ relax (http://www.nmr-relax.com) This is the relax-devel mailing list [email protected] To unsubscribe from this list, get a password reminder, or change your subscription options, visit the list information page at https://mail.gna.org/listinfo/relax-devel

