Changeset 17147 for trunk/psLib/src/math/psPolynomialMD.c
- Timestamp:
- Mar 25, 2008, 3:26:06 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/math/psPolynomialMD.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/math/psPolynomialMD.c
r17075 r17147 153 153 } 154 154 155 // Calculate the standard deviation of the fit 156 static void polynomialMDStdev(psPolynomialMD *poly, // Polynomial for which to measure stdev 157 psVector *deviations, // Deviations, or NULL 158 const psArray *coords, // Array of coordinates 159 const psVector *values, // Measured values 160 const psVector *mask // Mask for values 161 ) 162 { 163 assert(poly); 164 assert(coords); 165 assert(values); 166 167 double rms = 0.0; // Root mean square deviation 168 int numValues = values->n; // Number of values 169 int numGood = numValues; // Number of good values 170 for (int i = 0; i < numValues; i++) { 171 if (mask && mask->data.U8[i]) { 172 numGood--; 173 continue; 174 } 175 float diff = values->data.F32[i] - psPolynomialMDEval(poly, coords->data[i]); 176 if (deviations) { 177 deviations->data.F32[i] = diff; 178 } 179 rms += PS_SQR(diff); 180 } 181 poly->stdevFit = sqrt(rms / (double)numGood); 182 183 return; 184 } 155 185 156 186 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// … … 195 225 poly->dim = dim; 196 226 poly->orders = psVectorCopy(NULL, orders, PS_TYPE_U8); 227 poly->numFit = 0; 228 poly->stdevFit = NAN; 197 229 198 230 int numTerms = 1; // Number of terms in polynomial … … 301 333 return false; 302 334 } 335 336 polynomialMDStdev(poly, NULL, coordsArray, values, NULL); 303 337 304 338 return true; … … 389 423 } 390 424 391 // Evaluate distribution 392 double rms = 0.0; // Root mean square deviation 393 for (int i = 0; i < numValues; i++) { 394 if (ownMask->data.U8[i]) { 395 continue; 396 } 397 float diff = values->data.F32[i] - psPolynomialMDEval(poly, coordsArray->data[i]); 398 deviations->data.F32[i] = diff; 399 rms += PS_SQR(diff); 400 } 401 rms = sqrt(rms / (double)numGood); 402 psTrace("psLib.math", 7, "RMS from %d points is %lf\n", numGood, rms); 425 polynomialMDStdev(poly, deviations, coordsArray, values, ownMask); 426 psTrace("psLib.math", 7, "RMS from %d points is %lf\n", numGood, poly->stdevFit); 403 427 404 428 // Reject 405 float limit = rej * rms;// Rejection limit429 float limit = rej * poly->stdevFit; // Rejection limit 406 430 for (int i = 0; i < numValues; i++) { 407 431 if (ownMask->data.U8[i]) { … … 433 457 return false; 434 458 } 459 polynomialMDStdev(poly, NULL, coordsArray, values, ownMask); 435 460 } 436 461 … … 446 471 return true; 447 472 } 473
Note:
See TracChangeset
for help on using the changeset viewer.
