Changeset 7809


Ignore:
Timestamp:
11/18/11 09:07:43 (8 years ago)
Author:
paulbarber
Message:

Better comments on why the convolution is actually correct.
Fixed one possible crash point if there are no params to fit, now just returns the fitted fn with params provided.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/projects/slim-curve/src/main/c/EcfSingle.c

    r7803 r7809  
    745745                        if (paramfree[j]) 
    746746                                mfit++; 
    747  
     747                 
    748748                if (GCI_marquardt_compute_fn(x, y, ndata, noise, sig, 
    749749                                                                         param, paramfree, nparam, fitfunc, 
     
    891891        } 
    892892 
    893         /* Matrix solution; GCI_gauss_jordan solves Ax=b rather than AX=B */ 
    894         if (GCI_solve(covar, *pmfit, dparam) != 0) 
    895                 return -1; 
     893        if (*pmfit>0) { 
     894                /* Matrix solution; GCI_gauss_jordan solves Ax=b rather than AX=B */ 
     895                if (GCI_solve(covar, *pmfit, dparam) != 0) 
     896                        return -1; 
     897        } 
     898        else 
     899                *alambda = 0; 
    896900 
    897901        /* Once converged, evaluate covariance matrix */ 
     
    12871291                        /* We wish to find yfit = (*pfnvals) * instr, so explicitly: 
    12881292                             yfit[i] = sum_{j=0}^i (*pfnvals)[i-j].instr[j] 
    1289                            But instr[k]=0 for k >= ninstr, so we only need to sum: 
     1293                           But instr[k]=0 for k >= ninstr, AND (*pfnvals)[i]=0 for i<0 
     1294                           so we only need to sum: 
    12901295                             yfit[i] = sum_{j=0}^{min(ninstr-1,i)} 
    12911296                           (*pfnvals)[i-j].instr[j] 
     
    12961301                        for (k=1; k<nparam; k++) 
    12971302                                (*pdy_dparam_conv)[i][k] = 0; 
     1303 
    12981304 
    12991305                        convpts = (ninstr <= i) ? ninstr-1 : i; 
     
    16791685                        /* We wish to find yfit = fnvals * instr, so explicitly: 
    16801686                             yfit[i] = sum_{j=0}^i fnvals[i-j].instr[j] 
    1681                            But instr[k]=0 for k >= ninstr, so we only need to sum: 
     1687                             But instr[k]=0 for k >= ninstr, AND (*pfnvals)[i]=0 for i<0 
     1688                             so we only need to sum: 
    16821689                             yfit[i] = sum_{j=0}^{min(ninstr-1,i)} 
    16831690                           fnvals[i-j].instr[j] 
Note: See TracChangeset for help on using the changeset viewer.