If the issue of "fast" is not an issue, then why is an alternative
minimisation required?  Are you just after the covariance matrix?

Regards,

Edward


On 25 August 2014 11:16, Troels Emtekær Linnet <tlin...@nmr-relax.com> wrote:
> Hi Edward.
>
> In this target function, exist the target function whereby
> scipy.optimize.leastsq minimises.
>
> minfx minimises by minimisation of chi2.
>
> scipy.optimize.leastsq minimises the return of a function which
> calculate the array of difference between
> function and measured values.
>
> It will then (I guess) minimise sum squares.
>
> You could probably make a call to the target function "exponential" instead.
>
> But I am not so good with C code, and having the code in python makes
> it possible for me to bug-fix faster.
>
> The issue of "fast", does not really come into play here, as a
> minimisation takes about 0.02 seconds anyway.
>
> Best
> Troels
>
>
> 2014-08-25 10:33 GMT+02:00 Edward d'Auvergne <edw...@nmr-relax.com>:
>> Hi Troels,
>>
>> This new target_functions.relax_disp_curve_fit module clashes with the
>> C module.  It is repetitive, the code already exists in the
>> target_functions.relax_fit module.  Why is the faster C module not
>> being used?
>>
>> Regards,
>>
>> Edward
>>
>>
>>
>> On 25 August 2014 01:08,  <tlin...@nmr-relax.com> wrote:
>>> Author: tlinnet
>>> Date: Mon Aug 25 01:08:48 2014
>>> New Revision: 25230
>>>
>>> URL: http://svn.gna.org/viewcvs/relax?rev=25230&view=rev
>>> Log:
>>> Moved the target function for minimisation of exponential fit into the 
>>> target functions folder.
>>>
>>> task #7822(https://gna.org/task/index.php?7822): Implement user function to 
>>> estimate R2eff and associated errors for exponential curve fitting.
>>>
>>> Added:
>>>     trunk/target_functions/relax_disp_curve_fit.py
>>>       - copied, changed from r25229, 
>>> trunk/test_suite/shared_data/curve_fitting/profiling/relax_fit.py
>>> Removed:
>>>     trunk/test_suite/shared_data/curve_fitting/profiling/relax_fit.py
>>> Modified:
>>>     trunk/target_functions/__init__.py
>>>     
>>> trunk/test_suite/shared_data/curve_fitting/profiling/profiling_relax_fit.py
>>>     trunk/test_suite/shared_data/curve_fitting/profiling/verify_error.py
>>>
>>> Modified: trunk/target_functions/__init__.py
>>> URL: 
>>> http://svn.gna.org/viewcvs/relax/trunk/target_functions/__init__.py?rev=25230&r1=25229&r2=25230&view=diff
>>> ==============================================================================
>>> --- trunk/target_functions/__init__.py  (original)
>>> +++ trunk/target_functions/__init__.py  Mon Aug 25 01:08:48 2014
>>> @@ -32,5 +32,6 @@
>>>      'mf',
>>>      'n_state_model',
>>>      'potential',
>>> -    'relax_disp'
>>> +    'relax_disp',
>>> +    'relax_disp_curve_fit'
>>>  ]
>>>
>>> Copied: trunk/target_functions/relax_disp_curve_fit.py (from r25229, 
>>> trunk/test_suite/shared_data/curve_fitting/profiling/relax_fit.py)
>>> URL: 
>>> http://svn.gna.org/viewcvs/relax/trunk/target_functions/relax_disp_curve_fit.py?p2=trunk/target_functions/relax_disp_curve_fit.py&p1=trunk/test_suite/shared_data/curve_fitting/profiling/relax_fit.py&r1=25229&r2=25230&rev=25230&view=diff
>>> ==============================================================================
>>>     (empty)
>>>
>>> Modified: 
>>> trunk/test_suite/shared_data/curve_fitting/profiling/profiling_relax_fit.py
>>> URL: 
>>> http://svn.gna.org/viewcvs/relax/trunk/test_suite/shared_data/curve_fitting/profiling/profiling_relax_fit.py?rev=25230&r1=25229&r2=25230&view=diff
>>> ==============================================================================
>>> --- 
>>> trunk/test_suite/shared_data/curve_fitting/profiling/profiling_relax_fit.py 
>>> (original)
>>> +++ 
>>> trunk/test_suite/shared_data/curve_fitting/profiling/profiling_relax_fit.py 
>>> Mon Aug 25 01:08:48 2014
>>> @@ -57,7 +57,7 @@
>>>  # relax module imports.
>>>  from status import Status; status = Status()
>>>  from target_functions.relax_fit import setup, func, dfunc, d2func, 
>>> back_calc_I
>>> -from relax_fit import Exponential
>>> +from target_functions.relax_disp_curve_fit import Exponential
>>>
>>>
>>>  # Alter setup.
>>>
>>> Removed: trunk/test_suite/shared_data/curve_fitting/profiling/relax_fit.py
>>> URL: 
>>> http://svn.gna.org/viewcvs/relax/trunk/test_suite/shared_data/curve_fitting/profiling/relax_fit.py?rev=25229&view=auto
>>> ==============================================================================
>>> --- trunk/test_suite/shared_data/curve_fitting/profiling/relax_fit.py   
>>> (original)
>>> +++ trunk/test_suite/shared_data/curve_fitting/profiling/relax_fit.py   
>>> (removed)
>>> @@ -1,135 +0,0 @@
>>> -###############################################################################
>>> -#                                                                          
>>>    #
>>> -# Copyright (C) 2013-2014 Edward d'Auvergne                                
>>>    #
>>> -# Copyright (C) 2014 Troels E. Linnet                                      
>>>    #
>>> -#                                                                          
>>>    #
>>> -# This file is part of the program relax (http://www.nmr-relax.com).       
>>>    #
>>> -#                                                                          
>>>    #
>>> -# This program is free software: you can redistribute it and/or modify     
>>>    #
>>> -# it under the terms of the GNU General Public License as published by     
>>>    #
>>> -# the Free Software Foundation, either version 3 of the License, or        
>>>    #
>>> -# (at your option) any later version.                                      
>>>    #
>>> -#                                                                          
>>>    #
>>> -# This program is distributed in the hope that it will be useful,          
>>>    #
>>> -# but WITHOUT ANY WARRANTY; without even the implied warranty of           
>>>    #
>>> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            
>>>    #
>>> -# GNU General Public License for more details.                             
>>>    #
>>> -#                                                                          
>>>    #
>>> -# You should have received a copy of the GNU General Public License        
>>>    #
>>> -# along with this program.  If not, see <http://www.gnu.org/licenses/>.    
>>>    #
>>> -#                                                                          
>>>    #
>>> -###############################################################################
>>> -
>>> -# Module docstring.
>>> -"""Target functions for relaxation fit."""
>>> -
>>> -# Python module imports.
>>> -from copy import deepcopy
>>> -from numpy import exp, multiply, sum
>>> -
>>> -# relax module imports.
>>> -
>>> -
>>> -class Exponential:
>>> -    def __init__(self, num_params=None, num_times=None, values=None, 
>>> sd=None, relax_times=None, scaling_matrix=None):
>>> -        """Relaxation dispersion target functions for optimisation.
>>> -        """
>>> -
>>> -        # Store variables.
>>> -        self.num_params = num_params
>>> -        self.num_times = num_times
>>> -        self.values = values
>>> -        self.errors = sd
>>> -        self.relax_times = relax_times
>>> -        self.scaling_matrix = scaling_matrix
>>> -
>>> -        # Create the structure for holding the back-calculated R2eff 
>>> values (matching the dimensions of the values structure).
>>> -        self.back_calc = deepcopy(self.values)
>>> -
>>> -        # Define function to minimise.
>>> -        self.func = self.func_exp
>>> -        self.calc = self.calc_exp
>>> -
>>> -
>>> -    def chi2_rankN(self, data, back_calc_vals, errors):
>>> -        """Function to calculate the chi-squared value for multiple numpy 
>>> array axis.
>>> -
>>> -        @param data:            The multi dimensional vectors of yi values.
>>> -        @type data:             numpy multi dimensional array
>>> -        @param back_calc_vals:  The multi dimensional vectors of yi(theta) 
>>> values.
>>> -        @type back_calc_vals:   numpy multi dimensional array
>>> -        @param errors:          The multi dimensional vectors of sigma_i 
>>> values.
>>> -        @type errors:           numpy multi dimensional array
>>> -        @return:                The chi-squared value.
>>> -        @rtype:                 float
>>> -        """
>>> -
>>> -        # Calculate the chi-squared statistic.
>>> -        return sum((1.0 / errors * (data - back_calc_vals))**2)
>>> -
>>> -
>>> -    def calc_exp(self, times=None, r2eff=None, i0=None):
>>> -        """Calculate the function values of exponential function.
>>> -
>>> -        @keyword times: The time points.
>>> -        @type times:    float
>>> -        @keyword r2eff: The effective transversal relaxation rate.
>>> -        @type r2eff:    float
>>> -        @keyword i0:    The initial intensity.
>>> -        @type i0:       float
>>> -        @return:        The function values.
>>> -        @rtype:         float
>>> -        """
>>> -
>>> -        # Calculate.
>>> -        return i0 * exp( -times * r2eff)
>>> -
>>> -
>>> -    def calc_exp_chi2(self, r2eff=None, i0=None):
>>> -        """Calculate the chi-squared value of exponential function.
>>> -
>>> -
>>> -        @keyword r2eff: The effective transversal relaxation rate.
>>> -        @type r2eff:    float
>>> -        @keyword i0:    The initial intensity.
>>> -        @type i0:       float
>>> -        @return:        The chi-squared value.
>>> -        @rtype:         float
>>> -        """
>>> -
>>> -        # Calculate.
>>> -        self.back_calc[:] = self.calc_exp(times=self.relax_times, 
>>> r2eff=r2eff, i0=i0)
>>> -
>>> -        # Return the total chi-squared value.
>>> -        return self.chi2_rankN(data=self.values, 
>>> back_calc_vals=self.back_calc, errors=self.errors)
>>> -
>>> -
>>> -    def func_exp(self, params):
>>> -        """Target function for exponential fit.
>>> -
>>> -        @param params:  The vector of parameter values.
>>> -        @type params:   numpy rank-1 float array
>>> -        @return:        The chi-squared value.
>>> -        @rtype:         float
>>> -        """
>>> -
>>> -        # Unpack the parameter values.
>>> -        r2eff = params[0]
>>> -        i0 = params[1]
>>> -
>>> -        # Calculate and return the chi-squared value.
>>> -        return self.calc_exp_chi2(r2eff=r2eff, i0=i0)
>>> -
>>> -
>>> -    def func_exp_general(self, params, xdata, ydata):
>>> -        """Target function for minimisation with scipy.optimize.leastsq
>>> -        """
>>> -
>>> -        return self.calc_exp(xdata, *params) - ydata
>>> -
>>> -
>>> -    def func_exp_weighted_general(self, params, xdata, ydata, weights):
>>> -        """Target function for minimisation with scipy.optimize.leastsq
>>> -        """
>>> -
>>> -        return weights * (self.calc_exp(xdata, *params) - ydata)
>>>
>>> Modified: 
>>> trunk/test_suite/shared_data/curve_fitting/profiling/verify_error.py
>>> URL: 
>>> http://svn.gna.org/viewcvs/relax/trunk/test_suite/shared_data/curve_fitting/profiling/verify_error.py?rev=25230&r1=25229&r2=25230&view=diff
>>> ==============================================================================
>>> --- trunk/test_suite/shared_data/curve_fitting/profiling/verify_error.py    
>>>     (original)
>>> +++ trunk/test_suite/shared_data/curve_fitting/profiling/verify_error.py    
>>>     Mon Aug 25 01:08:48 2014
>>> @@ -32,7 +32,7 @@
>>>  from status import Status; status = Status()
>>>
>>>  # Initial try for Exponential class.
>>> -from relax_fit import Exponential
>>> +from target_functions.relax_disp_curve_fit import Exponential
>>>
>>>  # Define data path.
>>>  prev_data_path = status.install_path + 
>>> sep+'test_suite'+sep+'shared_data'+sep+'dispersion'+sep+'Kjaergaard_et_al_2013'
>>>  +sep+ "check_graphs" +sep+ "mc_2000"  +sep+ "R2eff"
>>>
>>>
>>> _______________________________________________
>>> relax (http://www.nmr-relax.com)
>>>
>>> This is the relax-commits mailing list
>>> relax-comm...@gna.org
>>>
>>> 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
>> relax-devel@gna.org
>>
>> 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
relax-devel@gna.org

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