mailr25268 - in /trunk/target_functions: exponential.c exponential.h relax_fit.c


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by edward on August 26, 2014 - 11:07:
Author: bugman
Date: Tue Aug 26 11:07:07 2014
New Revision: 25268

URL: http://svn.gna.org/viewcvs/relax?rev=25268&view=rev
Log:
Modified all of the exponential curve functions and gradients in the C target 
function module.

Instead of passing in the parameter vector, now the I0 and R values are 
passed in separately.  This
is for greater code flexibility as the parameter order does not need to be 
known.


Modified:
    trunk/target_functions/exponential.c
    trunk/target_functions/exponential.h
    trunk/target_functions/relax_fit.c

Modified: trunk/target_functions/exponential.c
URL: 
http://svn.gna.org/viewcvs/relax/trunk/target_functions/exponential.c?rev=25268&r1=25267&r2=25268&view=diff
==============================================================================
--- trunk/target_functions/exponential.c        (original)
+++ trunk/target_functions/exponential.c        Tue Aug 26 11:07:07 2014
@@ -25,8 +25,12 @@
 #include "exponential.h"
 
 
-void exponential(double *params, double *relax_times, double *back_calc, int 
num_times) {
-    /* Function to back calculate the peak intensities.
+void exponential(double I0, double R, double *relax_times, double 
*back_calc, int num_times) {
+    /* Function to back calculate the intensity values from an exponential.
+     *
+     * The function used is::
+     *
+     *     I = I0 * exp(-R.t)
     */
 
     /* Declarations */
@@ -35,18 +39,18 @@
     /* Loop over the time points */
     for (i = 0; i < num_times; i++) {
         /* Zero Rx value */
-        if (params[0] == 0.0)
-            back_calc[i] = params[1];
+        if (R == 0.0)
+            back_calc[i] = I0;
 
         /* Back calculate */
         else
-            back_calc[i] = params[1] * exp(-relax_times[i] * params[0]);
+            back_calc[i] = I0 * exp(-relax_times[i] * R);
 
     }
 }
 
-void exponential_dI(double *params, double *relax_times, double 
back_calc_grad[][MAXTIMES], int num_times) {
-    /* Calculate the dI partial derivate of the 2-parameter exponential 
curve.
+void exponential_dI0(double I0, double R, double *relax_times, double 
back_calc_grad[][MAXTIMES], int num_times) {
+    /* Calculate the dI0 partial derivate of the 2-parameter exponential 
curve.
     */
 
     /* Declarations */
@@ -55,17 +59,17 @@
     /* Loop over the time points */
     for (i = 0; i < num_times; i++) {
         /* Zero Rx value */
-        if (params[0] == 0.0)
+        if (R == 0.0)
             back_calc_grad[1][i] = 1.0;
 
         /* The partial derivate */
         else
-            back_calc_grad[1][i] = exp(-relax_times[i] * params[0]);
+            back_calc_grad[1][i] = exp(-relax_times[i] * R);
     }
 }
 
 
-void exponential_dR(double *params, double *relax_times, double 
back_calc_grad[][MAXTIMES], int num_times) {
+void exponential_dR(double I0, double R, double *relax_times, double 
back_calc_grad[][MAXTIMES], int num_times) {
     /* Calculate the dR partial derivate of the 2-parameter exponential 
curve.
     */
 
@@ -75,11 +79,11 @@
     /* Loop over the time points */
     for (i = 0; i < num_times; i++) {
         /* Zero Rx value */
-        if (params[0] == 0.0)
-            back_calc_grad[0][i] = -params[1] * relax_times[i];
+        if (R == 0.0)
+            back_calc_grad[0][i] = -I0 * relax_times[i];
 
         /* The partial derivate */
         else
-            back_calc_grad[0][i] = -params[1] * relax_times[i] * 
exp(-relax_times[i] * params[0]);
+            back_calc_grad[0][i] = -I0 * relax_times[i] * 
exp(-relax_times[i] * R);
     }
 }

Modified: trunk/target_functions/exponential.h
URL: 
http://svn.gna.org/viewcvs/relax/trunk/target_functions/exponential.h?rev=25268&r1=25267&r2=25268&view=diff
==============================================================================
--- trunk/target_functions/exponential.h        (original)
+++ trunk/target_functions/exponential.h        Tue Aug 26 11:07:07 2014
@@ -25,8 +25,8 @@
 #define MAXTIMES 50
 
 
-void exponential(double *params, double *relax_times, double *back_calc, int 
num_times);
-void exponential_dI(double *params, double *relax_times, double 
back_calc_grad[][MAXTIMES], int num_times);
-void exponential_dR(double *params, double *relax_times, double 
back_calc_grad[][MAXTIMES], int num_times);
+void exponential(double I0, double R, double *relax_times, double 
*back_calc, int num_times);
+void exponential_dI0(double I0, double R, double *relax_times, double 
back_calc_grad[][MAXTIMES], int num_times);
+void exponential_dR(double I0, double R, double *relax_times, double 
back_calc_grad[][MAXTIMES], int num_times);
 
 #endif

Modified: trunk/target_functions/relax_fit.c
URL: 
http://svn.gna.org/viewcvs/relax/trunk/target_functions/relax_fit.c?rev=25268&r1=25267&r2=25268&view=diff
==============================================================================
--- trunk/target_functions/relax_fit.c  (original)
+++ trunk/target_functions/relax_fit.c  Tue Aug 26 11:07:07 2014
@@ -108,7 +108,7 @@
     }
 
     /* Back calculated the peak intensities */
-    exponential(params, relax_times, back_calc, num_times);
+    exponential(params[1], params[0], relax_times, back_calc, num_times);
 
     /* Calculate and return the chi-squared value */
     return PyFloat_FromDouble(chi2(values, sd, back_calc, num_times));
@@ -145,11 +145,11 @@
     }
 
     /* Back calculated the peak intensities */
-    exponential(params, relax_times, back_calc, num_times);
+    exponential(params[1], params[0], relax_times, back_calc, num_times);
 
     /* The partial derivates */
-    exponential_dR(params, relax_times, back_calc_grad, num_times);
-    exponential_dI(params, relax_times, back_calc_grad, num_times);
+    exponential_dR(params[1], params[0], relax_times, back_calc_grad, 
num_times);
+    exponential_dI0(params[1], params[0], relax_times, back_calc_grad, 
num_times);
 
     /* The chi-squared gradient */
     dchi2(dchi2_vals, values, back_calc, back_calc_grad, sd, num_times, 
num_params);
@@ -220,8 +220,8 @@
     }
 
     /* The partial derivates */
-    exponential_dR(params, relax_times, back_calc_grad, num_times);
-    exponential_dI(params, relax_times, back_calc_grad, num_times);
+    exponential_dR(params[1], params[0], relax_times, back_calc_grad, 
num_times);
+    exponential_dI0(params[1], params[0], relax_times, back_calc_grad, 
num_times);
 
     /* Convert to a Python list of lists */
     PyObject *list = PyList_New(0);




Related Messages


Powered by MHonArc, Updated Tue Aug 26 11:20:02 2014