mailr25433 - /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 tlinnet on August 29, 2014 - 15:09:
Author: tlinnet
Date: Fri Aug 29 15:09:12 2014
New Revision: 25433

URL: http://svn.gna.org/viewcvs/relax?rev=25433&view=rev
Log:
Tried implementing getting the chi2 gradient, using 
target_function.chi2.dchi2().

The output seem equal.

task #7822(https://gna.org/task/index.php?7822): Implement user function to 
estimate R2eff and associated errors for exponential curve fitting.

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=25433&r1=25432&r2=25433&view=diff
==============================================================================
--- trunk/specific_analyses/relax_disp/estimate_r2eff.py        (original)
+++ trunk/specific_analyses/relax_disp/estimate_r2eff.py        Fri Aug 29 
15:09:12 2014
@@ -24,7 +24,7 @@
 
 # Python module imports.
 from copy import deepcopy
-from numpy import absolute, any, array, asarray, diag, dot, exp, eye, inf, 
log, multiply, ones, spacing, sqrt, sum, transpose, zeros
+from numpy import absolute, allclose, any, array, asarray, diag, dot, exp, 
eye, inf, log, multiply, ones, spacing, sqrt, sum, transpose, zeros
 from numpy.linalg import cond, inv, qr
 from minfx.generic import generic_minimise
 from re import match, search
@@ -42,7 +42,7 @@
 from specific_analyses.relax_disp.data import average_intensity, 
loop_exp_frq_offset_point, loop_frq, loop_time, return_param_key_from_data
 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.chi2 import chi2_rankN, dchi2
 
 # C modules.
 if C_module_exp_fn:
@@ -622,8 +622,36 @@
         # Define Jacobian as m rows with function derivatives and n columns 
of parameters.
         sum_jacobian_matrix_exp_chi2 = transpose(array( [sum_d_chi2_d_r2eff 
, sum_d_chi2_d_i0] ) )
 
+        ######### Try with lib function.
+
+        # Get the back calc.
+        back_calc = self.func_exp(params=params, times=times)
+
+        # Get the Jacobian, with partial derivative, with respect to r2eff 
and i0.
+        exp_grad = func_exp_grad(params=params, times=times, values=values, 
errors=errors)
+
+        # Transpose back, to get rows.
+        exp_grad_t = transpose(exp_grad)
+
+        # n is number of fitted parameters.
+        n = len(params)
+
+        # Define array to update parameters in.
+        sum_jacobian_matrix_exp_chi2_minfx = zeros([2])
+
+        # Update value elements.        
+        dchi2(dchi2=sum_jacobian_matrix_exp_chi2_minfx, M=n, data=values, 
back_calc_vals=back_calc, back_calc_grad=exp_grad_t, errors=errors)
+
+        # Make test of two methods.
+        test_eq = allclose(sum_jacobian_matrix_exp_chi2, 
sum_jacobian_matrix_exp_chi2_minfx, rtol=1e-15, atol=1e-15)
+
+        if not test_eq:
+            print("Chi2 gradient are not equal.")
+            print(asd)
+
+
         # Return Jacobian matrix.
-        return sum_jacobian_matrix_exp_chi2
+        return sum_jacobian_matrix_exp_chi2_minfx
 
 
 def estimate_r2eff(method='minfx', min_algor='simplex', c_code=True, 
constraints=False, chi2_jacobian=False, spin_id=None, ftol=1e-15, xtol=1e-15, 
maxfev=10000000, factor=100.0, verbosity=1):




Related Messages


Powered by MHonArc, Updated Fri Aug 29 15:20:02 2014