Ignore:
Timestamp:
Apr 30, 2008 4:29:36 PM (16 years ago)
Author:
Mathieu Doucet <doucetm@…>
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
Message:

Added P(r) fit test

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pr_inversion/c_extensions/invertor.c

    r9e8dc22 reca05c8  
    4040double ortho(double d_max, int n, double r) { 
    4141        return 2.0*r*sin(pi*n*r/d_max); 
    42          
    4342} 
    4443 
     
    7675 */ 
    7776double pr(double *pars, double d_max, int n_c, double r) { 
    78     double sum = 0.0;  
     77    double sum = 0.0;   
    7978        int i; 
    8079    for (i=0; i<n_c; i++) { 
     
    8483} 
    8584 
     85/** 
     86 * P(r) calculated from the expansion, with errors 
     87 */ 
     88void 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}  
    86106 
     107/** 
     108 * dP(r)/dr calculated from the expansion. 
     109 */ 
     110double 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 */ 
     122double 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.