mailRe: r25322 - /trunk/specific_analyses/relax_disp/estimate_r2eff.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by Edward d'Auvergne on August 27, 2014 - 09:30:
Hi,

Again you need the Python wrapper functions in
specific_analyses.relax_fit.optimisation.  Note that func(), dfunc(),
and d2func() are the chi-squared value, gradient, and Hessian.  The
Jacobian is a completely different matrix that you can obtain using
the target_functions.relax_fit.jacobian() function, which returns a
Python list of lists, and that only the Levenberg-Marquardt
optimisation algorithm in minfx accepts this.

Regards,

Edward


On 27 August 2014 09:19,  <tlinnet@xxxxxxxxxxxxx> wrote:
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


_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-commits mailing list
relax-commits@xxxxxxx

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-commits



Related Messages


Powered by MHonArc, Updated Wed Aug 27 11:40:15 2014