Author: tlinnet Date: Wed Aug 27 09:19:45 2014 New Revision: 25322 URL: http://svn.gna.org/viewcvs/relax?rev=25322&view=rev Log: Modified estimate R2eff module, to use C-code. But systemtest Relax_disp.test_estimate_r2eff_error shows that the Jacobian is not correctly implemented to be called in minfx. Modified: trunk/specific_analyses/relax_disp/estimate_r2eff.py Modified: trunk/specific_analyses/relax_disp/estimate_r2eff.py URL: http://svn.gna.org/viewcvs/relax/trunk/specific_analyses/relax_disp/estimate_r2eff.py?rev=25322&r1=25321&r2=25322&view=diff ============================================================================== --- trunk/specific_analyses/relax_disp/estimate_r2eff.py (original) +++ trunk/specific_analyses/relax_disp/estimate_r2eff.py Wed Aug 27 09:19:45 2014 @@ -41,6 +41,8 @@ from specific_analyses.relax_disp.parameters import disassemble_param_vector from specific_analyses.relax_disp.variables import MODEL_R2EFF from target_functions.chi2 import chi2_rankN +from target_functions.relax_fit import setup, func, dfunc, d2func, back_calc_I + # Scipy installed. if scipy_module: @@ -381,7 +383,7 @@ # 'minfx' # 'scipy.optimize.leastsq' -def estimate_r2eff(spin_id=None, ftol=1e-15, xtol=1e-15, maxfev=10000000, factor=100.0, method='scipy.optimize.leastsq', verbosity=1): +def estimate_r2eff(spin_id=None, ftol=1e-15, xtol=1e-15, maxfev=10000000, factor=100.0, method='minfx', verbosity=1): """Estimate r2eff and errors by exponential curve fitting with scipy.optimize.leastsq. scipy.optimize.leastsq is a wrapper around MINPACK's lmdif and lmder algorithms. @@ -703,19 +705,33 @@ E.set_settings_minfx(min_algor=min_algor) - # Define function to minimise for minfx. - if match('^[Ss]implex$', E.min_algor): - func = E.func_exp - - dfunc = None - d2func = None + # Do C code + do_C = True + + if do_C: + # Initialise the function to minimise. + scaling_list = [1.0, 1.0] + setup(num_params=len(x0), num_times=len(E.times), values=E.values, sd=E.errors, relax_times=E.times, scaling_matrix=scaling_list) + + t_func = func + t_dfunc = dfunc + t_d2func = d2func + else: - func = E.func_exp - dfunc = E.func_exp_grad - d2func = E.func_exp_hess - - # Minimise with minfx. - results_minfx = generic_minimise(func=func, dfunc=dfunc, d2func=d2func, args=(), x0=x0, min_algor=E.min_algor, min_options=E.min_options, func_tol=E.func_tol, grad_tol=E.grad_tol, maxiter=E.max_iterations, A=E.A, b=E.b, full_output=True, print_flag=E.verbosity) + # Minimise with minfx. + # Define function to minimise for minfx. + if match('^[Ss]implex$', E.min_algor): + t_func = E.func_exp + + t_dfunc = None + t_d2func = None + else: + t_func = E.func_exp + t_dfunc = E.func_exp_grad + t_d2func = E.func_exp_hess + + # Minimise. + results_minfx = generic_minimise(func=t_func, dfunc=t_dfunc, d2func=t_d2func, args=(), x0=x0, min_algor=E.min_algor, min_options=E.min_options, func_tol=E.func_tol, grad_tol=E.grad_tol, maxiter=E.max_iterations, A=E.A, b=E.b, full_output=True, print_flag=E.verbosity) # Unpack param_vector, chi2, iter_count, f_count, g_count, h_count, warning = results_minfx