Hi,

I agree.


Séb  :)


Edward d'Auvergne wrote:
> Hi,
>
> Half the code is in place for the exponential curve-fitting gradients,
> as these are insanely basic to derive and code, but I just never got
> around to it because relax returns the same results as Art Palmer's
> CurveFit program
> (http://cpmcnet.columbia.edu/dept/gsas/biochem/labs/palmer/software/curvefit.html)
> using the unconstrained simplex minimisation.  This optimisation
> problem is very basic.  But I might add it later if more complicated
> exponential curve-fitting is found (in relaxation or another type of
> analysis).  There's no harm in having the functional code there, even
> though it is not currently used.  As for relaxation dispersion, this
> might be more complicated but the gradients can be added later if
> needed.
>
> Regards,
>
> Edward
>
>
> On Tue, Jan 13, 2009 at 3:37 PM, Sébastien Morin
> <[email protected]> wrote:
>   
>> Hi Ed,
>>
>> Fine, thanks for the tips.
>>
>> I have a question, though. You say gradients are not used for relaxation
>> exponential curve fitting. However, the code for the function
>> linear_constraints() in present in 'specific_fns/relax_fit.py'... Is
>> that normal ? Can this be used, i.e. are the partial derivatives of the
>> chi-squared equation for relaxation (R1, R2) calculated ?
>>
>> If not used, should we remove the code ?
>>
>> Thanks.
>>
>>
>> Séb  :)
>>
>>
>>
>>
>> Edward d'Auvergne wrote:
>>     
>>> Hi,
>>>
>>> As an aside, these linear constraints can only be used if the
>>> relaxation dispersion gradients are calculated.  These gradients are
>>> not present for the relaxation exponential curve-fitting as it is not
>>> necessary.  For model-free analysis, both the gradients and Hessians
>>> have been calculated and are coded into python functions.  At the
>>> start, the relaxation dispersion may not need parameter constraints
>>> but the gradient may be very useful for better optimisation.  With no
>>> gradients, only the simplex optimisation algorithm can be used.  So in
>>> the future if you'd like the gradients, you need to calculate the
>>> first partial derivatives of the chi-squared equation/relaxation
>>> dispersion equation for each parameter and code these as separate
>>> functions.
>>>
>>> Regards,
>>>
>>> Edward
>>>
>>>
>>> On Tue, Jan 13, 2009 at 4:13 AM,  <[email protected]> wrote:
>>>
>>>       
>>>> Author: semor
>>>> Date: Tue Jan 13 04:13:54 2009
>>>> New Revision: 8428
>>>>
>>>> URL: http://svn.gna.org/viewcvs/relax?rev=8428&view=rev
>>>> Log:
>>>> Converted the function linear_constraints() for relaxation dispersion 
>>>> needs.
>>>>
>>>>
>>>> Modified:
>>>>    branches/relax_disp/specific_fns/relax_disp.py
>>>>
>>>> Modified: branches/relax_disp/specific_fns/relax_disp.py
>>>> URL: 
>>>> http://svn.gna.org/viewcvs/relax/branches/relax_disp/specific_fns/relax_disp.py?rev=8428&r1=8427&r2=8428&view=diff
>>>> ==============================================================================
>>>> --- branches/relax_disp/specific_fns/relax_disp.py (original)
>>>> +++ branches/relax_disp/specific_fns/relax_disp.py Tue Jan 13 04:13:54 2009
>>>> @@ -725,27 +725,34 @@
>>>>         Standard notation
>>>>         =================
>>>>
>>>> -        The relaxation rate constraints are::
>>>> -
>>>> -            Rx >= 0
>>>> -
>>>> -        The intensity constraints are::
>>>> -
>>>> -            I0 >= 0
>>>> -            Iinf >= 0
>>>> +        The different constraints are::
>>>> +
>>>> +            R2 >= 0
>>>> +            Rex >= 0
>>>> +            kex >= 0
>>>> +
>>>> +            R2A >= 0
>>>> +            kA >= 0
>>>> +            dw >= 0
>>>>
>>>>
>>>>         Matrix notation
>>>>         ===============
>>>>
>>>> -        In the notation A.x >= b, where A is an matrix of coefficients, x 
>>>> is an array of parameter
>>>> +        In the notation A.x >= b, where A is a matrix of coefficients, x 
>>>> is an array of parameter
>>>>         values, and b is a vector of scalars, these inequality constraints 
>>>> are::
>>>>
>>>> -            | 1  0  0 |     |  Rx  |      |    0    |
>>>> +            | 1  0  0 |     |  R2  |      |    0    |
>>>>             |         |     |      |      |         |
>>>> -            | 1  0  0 |  .  |  I0  |  >=  |    0    |
>>>> +            | 1  0  0 |  .  |  Rex |      |    0    |
>>>>             |         |     |      |      |         |
>>>> -            | 1  0  0 |     | Iinf |      |    0    |
>>>> +            | 1  0  0 |     |  kex |      |    0    |
>>>> +            |         |     |      |  >=  |         |
>>>> +            | 1  0  0 |     |  R2A |      |    0    |
>>>> +            |         |     |      |      |         |
>>>> +            | 1  0  0 |     |  kA  |      |    0    |
>>>> +            |         |     |      |      |         |
>>>> +            | 1  0  0 |     |  dw  |      |    0    |
>>>>
>>>>
>>>>         @keyword spin:              The spin data container.
>>>> @@ -764,17 +771,25 @@
>>>>
>>>>         # Loop over the parameters.
>>>>         for k in xrange(len(spin.params)):
>>>> -            # Relaxation rate.
>>>> -            if spin.params[k] == 'Rx':
>>>> -                # Rx >= 0.
>>>> +            # Relaxation rates and Rex.
>>>> +            if search('^R', spin.params[k]):
>>>> +                # R2, Rex, R2A >= 0.
>>>>                 A.append(zero_array * 0.0)
>>>>                 A[j][i] = 1.0
>>>>                 b.append(0.0)
>>>>                 j = j + 1
>>>>
>>>> -            # Intensity parameter.
>>>> -            elif search('^I', spin.params[k]):
>>>> -                # I0, Iinf >= 0.
>>>> +            # Exchange rates.
>>>> +            elif search('^k', spin.params[k]):
>>>> +                # kex, kA >= 0.
>>>> +                A.append(zero_array * 0.0)
>>>> +                A[j][i] = 1.0
>>>> +                b.append(0.0)
>>>> +                j = j + 1
>>>> +
>>>> +            # Chemical exchange difference.
>>>> +            elif spin.params[k] == 'dw':
>>>> +                # dw >= 0.
>>>>                 A.append(zero_array * 0.0)
>>>>                 A[j][i] = 1.0
>>>>                 b.append(0.0)
>>>>
>>>>
>>>> _______________________________________________
>>>> relax (http://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://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://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://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