Hi Edward.

I currently do not aim to implement minimisation with BFGS or similar.
This is only for estimating the error.

But I think I have it.

dw is returned in rad/s, and I need to scale i back to ppm.

Best
Troels

2014-09-02 9:24 GMT+02:00 Edward d'Auvergne <[email protected]>:
> Hi Troels,
>
> If you are interested in speed for these functions - something which
> may not be worth your effort right now - you should minimise
> repetitive calculations.  For example, you have:
>
>   dw*tcp = 5 times,
>   k_AB / dw = 2 times,
>   sin(dw*tcp) = 2 times.
>
> If you pre-calculate these in the calling function and then add them
> as new arguments, the code will not look as clean but it will be much
> faster.  This is done in the model-free code, but instead of arguments
> I have a special data container holding all the structures which is
> then passed into each function, gradient, and Hessian function.
>
> Regards,
>
> Edward
>
>
>
> On 1 September 2014 20:51,  <[email protected]> wrote:
>> Author: tlinnet
>> Date: Mon Sep  1 20:51:45 2014
>> New Revision: 25513
>>
>> URL: http://svn.gna.org/viewcvs/relax?rev=25513&view=rev
>> Log:
>> Added partial derivatives for model TSMFK01 and the Jacobian function.
>>
>> task #7824(https://gna.org/task/index.php?7824): Model parameter ERROR 
>> estimation from Jacobian and Co-variance matrix of dispersion models.
>>
>> Modified:
>>     branches/est_par_error/lib/dispersion/tsmfk01.py
>>
>> Modified: branches/est_par_error/lib/dispersion/tsmfk01.py
>> URL: 
>> http://svn.gna.org/viewcvs/relax/branches/est_par_error/lib/dispersion/tsmfk01.py?rev=25513&r1=25512&r2=25513&view=diff
>> ==============================================================================
>> --- branches/est_par_error/lib/dispersion/tsmfk01.py    (original)
>> +++ branches/est_par_error/lib/dispersion/tsmfk01.py    Mon Sep  1 20:51:45 
>> 2014
>> @@ -66,7 +66,7 @@
>>  """
>>
>>  # Python module imports.
>> -from numpy import fabs, min, sin, isfinite, sum
>> +from numpy import array, cos, fabs, min, sin, isfinite, ones, sum, transpose
>>  from numpy.ma import fix_invalid, masked_where
>>
>>
>> @@ -129,3 +129,72 @@
>>      if not isfinite(sum(back_calc)):
>>          # Replaces nan, inf, etc. with fill value.
>>          fix_invalid(back_calc, copy=False, fill_value=1e100)
>> +
>> +
>> +def r2eff_TSMFK01_jacobian(r20a=None, dw=None, k_AB=None, tcp=None):
>> +    """The Jacobian matrix of TSMFK01.
>> +
>> +    @keyword r20a:          The R20 parameter value of state A (R2 with no 
>> exchange).
>> +    @type r20a:             numpy float array of rank [NE][NS][NM][NO][ND]
>> +    @keyword dw:            The chemical exchange difference between states 
>> A and B in rad/s.
>> +    @type dw:               numpy float array of rank [NE][NS][NM][NO][ND]
>> +    @keyword k_AB:          The k_AB parameter value (the forward exchange 
>> rate in rad/s).
>> +    @type k_AB:             float
>> +    @keyword tcp:           The tau_CPMG times (1 / 4.nu1).
>> +    @type tcp:              numpy float array of rank [NE][NS][NM][NO][ND]
>> +    """
>> +
>> +    # Get the partial derivatives.
>> +    get_d_f_d_r20a = d_f_d_r20a(r20a=r20a, dw=dw, k_AB=k_AB, tcp=tcp)
>> +    get_d_f_d_dw = d_f_d_dw(r20a=r20a, dw=dw, k_AB=k_AB, tcp=tcp)
>> +    get_d_f_d_k_AB = d_f_d_k_AB(r20a=r20a, dw=dw, k_AB=k_AB, tcp=tcp)
>> +
>> +    return transpose(array( [get_d_f_d_r20a , get_d_f_d_dw, get_d_f_d_k_AB] 
>> ) )
>> +
>> +
>> +def d_f_d_r20a(r20a=None, dw=None, k_AB=None, tcp=None):
>> +    """Partial derivative with respect to r20a.
>> +
>> +    @keyword r20a:          The R20 parameter value of state A (R2 with no 
>> exchange).
>> +    @type r20a:             numpy float array of rank [NE][NS][NM][NO][ND]
>> +    @keyword dw:            The chemical exchange difference between states 
>> A and B in rad/s.
>> +    @type dw:               numpy float array of rank [NE][NS][NM][NO][ND]
>> +    @keyword k_AB:          The k_AB parameter value (the forward exchange 
>> rate in rad/s).
>> +    @type k_AB:             float
>> +    @keyword tcp:           The tau_CPMG times (1 / 4.nu1).
>> +    @type tcp:              numpy float array of rank [NE][NS][NM][NO][ND]
>> +    """
>> +
>> +    return ones(dw.shape)
>> +
>> +
>> +def d_f_d_dw(r20a=None, dw=None, k_AB=None, tcp=None):
>> +    """Partial derivative with respect to dw.
>> +
>> +    @keyword r20a:          The R20 parameter value of state A (R2 with no 
>> exchange).
>> +    @type r20a:             numpy float array of rank [NE][NS][NM][NO][ND]
>> +    @keyword dw:            The chemical exchange difference between states 
>> A and B in rad/s.
>> +    @type dw:               numpy float array of rank [NE][NS][NM][NO][ND]
>> +    @keyword k_AB:          The k_AB parameter value (the forward exchange 
>> rate in rad/s).
>> +    @type k_AB:             float
>> +    @keyword tcp:           The tau_CPMG times (1 / 4.nu1).
>> +    @type tcp:              numpy float array of rank [NE][NS][NM][NO][ND]
>> +    """
>> +
>> +    return -k_AB * cos( dw * tcp) / dw + k_AB * sin(dw * tcp) / ( dw**2 * 
>> tcp)
>> +
>> +
>> +def d_f_d_k_AB(r20a=None, dw=None, k_AB=None, tcp=None):
>> +    """Partial derivative with respect to k_AB.
>> +
>> +    @keyword r20a:          The R20 parameter value of state A (R2 with no 
>> exchange).
>> +    @type r20a:             numpy float array of rank [NE][NS][NM][NO][ND]
>> +    @keyword dw:            The chemical exchange difference between states 
>> A and B in rad/s.
>> +    @type dw:               numpy float array of rank [NE][NS][NM][NO][ND]
>> +    @keyword k_AB:          The k_AB parameter value (the forward exchange 
>> rate in rad/s).
>> +    @type k_AB:             float
>> +    @keyword tcp:           The tau_CPMG times (1 / 4.nu1).
>> +    @type tcp:              numpy float array of rank [NE][NS][NM][NO][ND]
>> +    """
>> +
>> +    return 1. - sin( dw * tcp) / (dw * tcp)
>>
>>
>> _______________________________________________
>> relax (http://www.nmr-relax.com)
>>
>> This is the relax-commits 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-commits
>
> _______________________________________________
> 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

Reply via email to