Hi, That's why I thought you wouldn't care too much about speed. But if you are performing and scanning a large quantity of repetitive error analyses, this may be a useful target for speeding that up even more.
Regards, Edward On 2 September 2014 09:27, Troels Emtekær Linnet <[email protected]> wrote: > 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

