Changeset 1982 for trunk/psLib/src/math/psMinimize.c
- Timestamp:
- Oct 6, 2004, 11:30:53 AM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/math/psMinimize.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/math/psMinimize.c
r1964 r1982 7 7 * fit a 1-D polynomial to a set of data points. 8 8 * 9 * @author G eorge Gusciora, MHPCC9 * @author GLF, MHPCC 10 10 * 11 * @version $Revision: 1.5 4$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-10-0 5 23:14:15$11 * @version $Revision: 1.55 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-10-06 21:30:53 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 227 227 supplied, but does not equal the domains specified in mySpline? 228 228 XXX: can psSpline be NULL? 229 230 XXX: reimplement this assuming that mySpline is NULL? 231 232 XXX: What happens if X is NULL, then an index vector is generated for X, but 233 that index vector lies outside the range vectors in mySpline? 229 234 *****************************************************************************/ 230 235 psSpline1D *psVectorFitSpline1D(psSpline1D *mySpline, ///< The spline which will be generated. … … 269 274 CONVERT_VECTOR_F64_TO_F32(x, x32, x32Static); 270 275 } 271 PS_CHECK_VECTOR_SIZE_EQUAL_RETURN_NULL(x , y);272 PS_CHECK_VECTOR_SIZE_EQUAL_RETURN_NULL(yErr , y);273 274 if (y ->n != (1 + mySpline->n)) {276 PS_CHECK_VECTOR_SIZE_EQUAL_RETURN_NULL(x32, y32); 277 PS_CHECK_VECTOR_SIZE_EQUAL_RETURN_NULL(yErr32, y32); 278 279 if (y32->n != (1 + mySpline->n)) { 275 280 psError(__func__, "data size / spline size mismatch (%d %d)\n", 276 y ->n, mySpline->n);281 y32->n, mySpline->n); 277 282 return(NULL); 278 283 } … … 282 287 if (2 == (mySpline->spline[0])->n) { 283 288 for (i=0;i<mySpline->n;i++) { 284 slope = (y ->data.F32[i+1] - y->data.F32[i]) /289 slope = (y32->data.F32[i+1] - y32->data.F32[i]) / 285 290 (mySpline->domains[i+1] - mySpline->domains[i]); 286 (mySpline->spline[i])->coeff[0] = y ->data.F32[i] -291 (mySpline->spline[i])->coeff[0] = y32->data.F32[i] - 287 292 (slope * mySpline->domains[i]); 288 293 … … 307 312 // If we get here, then we know these are cubic splines. We first 308 313 // generate the second derivatives at each data point. 309 mySpline->p_psDeriv2 = CalculateSecondDerivs(x , y);310 for (i=0;i<y ->n;i++)314 mySpline->p_psDeriv2 = CalculateSecondDerivs(x32, y32); 315 for (i=0;i<y32->n;i++) 311 316 psTrace(".psLib.dataManip.psVectorFitSpline1D", 6, 312 317 "Second deriv[%d] is %f\n", i, mySpline->p_psDeriv2[i]); … … 316 321 // and Numerical Recipes in C. 317 322 for (i=0;i<numSplines;i++) { 318 H = x ->data.F32[i+1] - x->data.F32[i];323 H = x32->data.F32[i+1] - x32->data.F32[i]; 319 324 psTrace(".psLib.dataManip.psVectorFitSpline1D", 4, 320 325 "x data (%f - %f) (%f)\n", x->data.F32[i], x->data.F32[i+1], H); … … 323 328 // 324 329 // From (1) 325 (mySpline->spline[i])->coeff[0] = (y ->data.F32[i] * x->data.F32[i+1]/H);330 (mySpline->spline[i])->coeff[0] = (y32->data.F32[i] * x32->data.F32[i+1]/H); 326 331 // From (2) 327 ((mySpline->spline[i])->coeff[0])-= ((y ->data.F32[i+1] * x->data.F32[i])/H);332 ((mySpline->spline[i])->coeff[0])-= ((y32->data.F32[i+1] * x32->data.F32[i])/H); 328 333 // From (3) 329 tmp = (x ->data.F32[i+1] * x->data.F32[i+1] * x->data.F32[i+1]) / (H * H * H);330 tmp-= (x ->data.F32[i+1] / H);334 tmp = (x32->data.F32[i+1] * x32->data.F32[i+1] * x32->data.F32[i+1]) / (H * H * H); 335 tmp-= (x32->data.F32[i+1] / H); 331 336 tmp*= (mySpline->p_psDeriv2)[i] * H * H / 6.0; 332 337 ((mySpline->spline[i])->coeff[0])+= tmp; 333 338 // From (4) 334 tmp = -(x ->data.F32[i] * x->data.F32[i] * x->data.F32[i]) / (H * H * H);335 tmp+= (x ->data.F32[i] / H);339 tmp = -(x32->data.F32[i] * x32->data.F32[i] * x32->data.F32[i]) / (H * H * H); 340 tmp+= (x32->data.F32[i] / H); 336 341 tmp*= (mySpline->p_psDeriv2)[i+1] * H * H / 6.0; 337 342 ((mySpline->spline[i])->coeff[0])+= tmp; … … 341 346 // 342 347 // From (1) 343 (mySpline->spline[i])->coeff[1] = -(y ->data.F32[i]) / H;348 (mySpline->spline[i])->coeff[1] = -(y32->data.F32[i]) / H; 344 349 // From (2) 345 ((mySpline->spline[i])->coeff[1])+= (y ->data.F32[i+1] / H);350 ((mySpline->spline[i])->coeff[1])+= (y32->data.F32[i+1] / H); 346 351 // From (3) 347 tmp = -3.0 * (x ->data.F32[i+1] * x->data.F32[i+1]) / (H * H * H);352 tmp = -3.0 * (x32->data.F32[i+1] * x32->data.F32[i+1]) / (H * H * H); 348 353 tmp+= (1.0 / H); 349 354 tmp*= ((mySpline->p_psDeriv2)[i]) * H * H / 6.0; 350 355 ((mySpline->spline[i])->coeff[1])+= tmp; 351 356 // From (4) 352 tmp = 3.0 * (x ->data.F32[i] * x->data.F32[i]) / (H * H * H);357 tmp = 3.0 * (x32->data.F32[i] * x32->data.F32[i]) / (H * H * H); 353 358 tmp-= (1.0 / H); 354 359 tmp*= ((mySpline->p_psDeriv2)[i+1]) * H * H / 6.0; … … 359 364 // 360 365 // From (3) 361 (mySpline->spline[i])->coeff[2] = ((mySpline->p_psDeriv2)[i]) * 3.0 * x ->data.F32[i+1] / (6.0 * H);366 (mySpline->spline[i])->coeff[2] = ((mySpline->p_psDeriv2)[i]) * 3.0 * x32->data.F32[i+1] / (6.0 * H); 362 367 // From (4) 363 ((mySpline->spline[i])->coeff[2])-= (((mySpline->p_psDeriv2)[i+1]) * 3.0 * x ->data.F32[i] / (6.0 * H));368 ((mySpline->spline[i])->coeff[2])-= (((mySpline->p_psDeriv2)[i+1]) * 3.0 * x32->data.F32[i] / (6.0 * H)); 364 369 365 370 //
Note:
See TracChangeset
for help on using the changeset viewer.
