Changeset eca05c8 in sasview for pr_inversion/c_extensions/invertor.c
- Timestamp:
- Apr 30, 2008 4:29:36 PM (16 years ago)
- Branches:
- master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- 34ae302
- Parents:
- 47f695c9
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pr_inversion/c_extensions/invertor.c
r9e8dc22 reca05c8 40 40 double ortho(double d_max, int n, double r) { 41 41 return 2.0*r*sin(pi*n*r/d_max); 42 43 42 } 44 43 … … 76 75 */ 77 76 double pr(double *pars, double d_max, int n_c, double r) { 78 double sum = 0.0; 77 double sum = 0.0; 79 78 int i; 80 79 for (i=0; i<n_c; i++) { … … 84 83 } 85 84 85 /** 86 * P(r) calculated from the expansion, with errors 87 */ 88 void pr_err(double *pars, double *err, double d_max, int n_c, 89 double r, double *pr_value, double *pr_value_err) { 90 double sum = 0.0; 91 double sum_err = 0.0; 92 double func_value; 93 int i; 94 for (i=0; i<n_c; i++) { 95 func_value = ortho(d_max, i+1, r); 96 sum += pars[i] * func_value; 97 sum_err += err[i]*err[i]*func_value*func_value; 98 } 99 *pr_value = sum; 100 if (sum_err>0) { 101 *pr_value_err = sqrt(sum_err); 102 } else { 103 *pr_value_err = sum; 104 } 105 } 86 106 107 /** 108 * dP(r)/dr calculated from the expansion. 109 */ 110 double dprdr(double *pars, double d_max, int n_c, double r) { 111 double sum = 0.0; 112 int i; 113 for (i=0; i<n_c; i++) { 114 sum += pars[i] * 2.0*(sin(pi*(i+1)*r/d_max) + pi*(i+1)*r/d_max * cos(pi*(i+1)*r/d_max)); 115 } 116 return sum; 117 } 118 119 /** 120 * regularization term calculated from the expansion. 121 */ 122 double reg_term(double *pars, double d_max, int n_c) { 123 double sum = 0.0; 124 double r; 125 double deriv; 126 int i; 127 for (i=0; i<25; i++) { 128 r = d_max/25.0*i; 129 deriv = dprdr(pars, d_max, n_c, r); 130 sum += deriv*deriv; 131 } 132 return sum/25.0*d_max; 133 } 134 135
Note: See TracChangeset
for help on using the changeset viewer.