Changeset 5090 for trunk/psLib/src/math/psPolynomial.c
- Timestamp:
- Sep 21, 2005, 4:47:16 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/math/psPolynomial.c (modified) (21 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/math/psPolynomial.c
r5074 r5090 7 7 * polynomials. It also contains a Gaussian functions. 8 8 * 9 * @version $Revision: 1.12 2$ $Name: not supported by cvs2svn $10 * @date $Date: 2005-09-2 0 20:48:35$9 * @version $Revision: 1.123 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2005-09-22 02:47:16 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 95 95 unsigned int x = 0; 96 96 97 for (x = 0; x < poly-> nX; x++) {97 for (x = 0; x < poly->COOL_2D_nX; x++) { 98 98 psFree(poly->coeff[x]); 99 99 psFree(poly->coeffErr[x]); … … 110 110 unsigned int y = 0; 111 111 112 for (x = 0; x < poly-> nX; x++) {113 for (y = 0; y < poly-> nY; y++) {112 for (x = 0; x < poly->COOL_3D_nX; x++) { 113 for (y = 0; y < poly->COOL_3D_nY; y++) { 114 114 psFree(poly->coeff[x][y]); 115 115 psFree(poly->coeffErr[x][y]); … … 132 132 unsigned int z = 0; 133 133 134 for (x = 0; x < poly-> nX; x++) {135 for (y = 0; y < poly-> nY; y++) {136 for (z = 0; z < poly-> nZ; z++) {134 for (x = 0; x < poly->COOL_4D_nX; x++) { 135 for (y = 0; y < poly->COOL_4D_nY; y++) { 136 for (z = 0; z < poly->COOL_4D_nZ; z++) { 137 137 psFree(poly->coeff[x][y][z]); 138 138 psFree(poly->coeffErr[x][y][z]); … … 170 170 chebPolys = (psPolynomial1D **) psAlloc(maxChebyPoly * sizeof(psPolynomial1D *)); 171 171 for (unsigned int i = 0; i < maxChebyPoly; i++) { 172 chebPolys[i] = psPolynomial1DAlloc(i + 1, PS_POLYNOMIAL_ORD);172 chebPolys[i] = psPolynomial1DAlloc(i, PS_POLYNOMIAL_ORD); 173 173 } 174 174 … … 182 182 183 183 for (psS32 i = 2; i < maxChebyPoly; i++) { 184 for (psS32 j = 0; j < chebPolys[i - 1]-> n; j++) {184 for (psS32 j = 0; j < chebPolys[i - 1]->COOL_1D_n; j++) { 185 185 chebPolys[i]->coeff[j + 1] = 2 * chebPolys[i - 1]->coeff[j]; 186 186 } 187 for (psS32 j = 0; j < chebPolys[i - 2]-> n; j++) {187 for (psS32 j = 0; j < chebPolys[i - 2]->COOL_1D_n; j++) { 188 188 chebPolys[i]->coeff[j] -= chebPolys[i - 2]->coeff[j]; 189 189 } … … 210 210 "---- Calling ordPolynomial1DEval(%lf)\n", x); 211 211 psTrace(".psLib.dataManip.psPolynomial.ordPolynomial1DEval", 4, 212 "Polynomial order is %u\n", poly-> n);213 for (loop_x = 0; loop_x < poly-> n; loop_x++) {212 "Polynomial order is %u\n", poly->COOL_1D_n); 213 for (loop_x = 0; loop_x < poly->COOL_1D_n+1; loop_x++) { 214 214 psTrace(".psLib.dataManip.psPolynomial.ordPolynomial1DEval", 4, 215 215 "Polynomial coeff[%u] is %lf\n", loop_x, poly->coeff[loop_x]); 216 216 } 217 217 218 for (loop_x = 0; loop_x < poly-> n; loop_x++) {218 for (loop_x = 0; loop_x < poly->COOL_1D_n+1; loop_x++) { 219 219 if (poly->mask[loop_x] == 0) { 220 220 // XXX: If you set the tracelevel to 10 here, and later set the tracelevel to … … 238 238 PS_ASSERT_DOUBLE_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 239 239 // XXX: Create a macro for this in psConstants.h 240 if (poly-> n < 1) {241 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Error: Chebyshev polynomial as order %u.", poly->n);240 if (poly->COOL_1D_n < 1) { 241 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Error: Chebyshev polynomial is order %u.", poly->COOL_1D_n); 242 242 return(NAN); 243 243 } 244 244 psVector *d; 245 unsigned int n = poly->n; 245 // XXX: n should be nTerms here (for clarity). Or get rid of the variable. 246 unsigned int n = 1 + poly->COOL_1D_n; 246 247 unsigned int i; 247 248 psF64 tmp = 0.0; … … 302 303 psPolynomial1D **chebPolys = NULL; 303 304 304 n = poly->n;305 n = 1 + poly->COOL_1D_n; 305 306 chebPolys = createChebyshevPolys(n); 306 307 307 308 tmp = 0.0; 308 for (i=0;i< poly->n;i++) {309 for (i=0;i<(1 + poly->COOL_1D_n);i++) { 309 310 tmp+= (poly->coeff[i] * psPolynomial1DEval(x, chebPolys[i])); 310 311 } … … 328 329 psF64 ySum = 1.0; 329 330 330 for (loop_x = 0; loop_x < poly->nX; loop_x++) {331 for (loop_x = 0; loop_x < (1 + poly->COOL_2D_nX); loop_x++) { 331 332 ySum = xSum; 332 for (loop_y = 0; loop_y < poly->nY; loop_y++) {333 for (loop_y = 0; loop_y < (1 + poly->COOL_2D_nY); loop_y++) { 333 334 if (poly->mask[loop_x][loop_y] == 0) { 334 335 polySum += ySum * poly->coeff[loop_x][loop_y]; … … 359 360 // Determine how many Chebyshev polynomials 360 361 // are needed, then create them. 361 maxChebyPoly = poly->nX;362 if ( poly->nY> maxChebyPoly) {363 maxChebyPoly = poly->nY;362 maxChebyPoly = 1 + poly->COOL_2D_nX; 363 if ((1 + poly->COOL_2D_nY) > maxChebyPoly) { 364 maxChebyPoly = (1 + poly->COOL_2D_nY); 364 365 } 365 366 chebPolys = createChebyshevPolys(maxChebyPoly); 366 367 367 for (loop_x = 0; loop_x < poly->nX; loop_x++) {368 for (loop_y = 0; loop_y < poly->nY; loop_y++) {368 for (loop_x = 0; loop_x < (1 + poly->COOL_2D_nX); loop_x++) { 369 for (loop_y = 0; loop_y < (1 + poly->COOL_2D_nY); loop_y++) { 369 370 if (poly->mask[loop_x][loop_y] == 0) { 370 371 polySum += poly->coeff[loop_x][loop_y] * … … 394 395 psF64 zSum = 1.0; 395 396 396 for (loop_x = 0; loop_x < poly->nX; loop_x++) {397 for (loop_x = 0; loop_x < (1 + poly->COOL_3D_nX); loop_x++) { 397 398 ySum = xSum; 398 for (loop_y = 0; loop_y < poly->nY; loop_y++) {399 for (loop_y = 0; loop_y < (1 + poly->COOL_3D_nY); loop_y++) { 399 400 zSum = ySum; 400 for (loop_z = 0; loop_z < poly->nZ; loop_z++) {401 for (loop_z = 0; loop_z < (1 + poly->COOL_3D_nZ); loop_z++) { 401 402 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 402 403 polySum += zSum * poly->coeff[loop_x][loop_y][loop_z]; … … 430 431 // Determine how many Chebyshev polynomials 431 432 // are needed, then create them. 432 maxChebyPoly = poly-> nX;433 if (poly-> nY > maxChebyPoly) {434 maxChebyPoly = poly-> nY;435 } 436 if (poly-> nZ > maxChebyPoly) {437 maxChebyPoly = poly-> nZ;438 } 439 chebPolys = createChebyshevPolys(maxChebyPoly );440 441 for (loop_x = 0; loop_x < poly->nX; loop_x++) {442 for (loop_y = 0; loop_y < poly->nY; loop_y++) {443 for (loop_z = 0; loop_z < poly->nZ; loop_z++) {433 maxChebyPoly = poly->COOL_3D_nX; 434 if (poly->COOL_3D_nY > maxChebyPoly) { 435 maxChebyPoly = poly->COOL_3D_nY; 436 } 437 if (poly->COOL_3D_nZ > maxChebyPoly) { 438 maxChebyPoly = poly->COOL_3D_nZ; 439 } 440 chebPolys = createChebyshevPolys(maxChebyPoly + 1); 441 442 for (loop_x = 0; loop_x < (1 + poly->COOL_3D_nX); loop_x++) { 443 for (loop_y = 0; loop_y < (1 + poly->COOL_3D_nY); loop_y++) { 444 for (loop_z = 0; loop_z < (1 + poly->COOL_3D_nZ); loop_z++) { 444 445 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 445 446 polySum += poly->coeff[loop_x][loop_y][loop_z] * … … 475 476 psF64 tSum = 1.0; 476 477 477 for (loop_x = 0; loop_x < poly->nX; loop_x++) {478 for (loop_x = 0; loop_x < (1 + poly->COOL_4D_nX); loop_x++) { 478 479 ySum = xSum; 479 for (loop_y = 0; loop_y < poly->nY; loop_y++) {480 for (loop_y = 0; loop_y < (1 + poly->COOL_4D_nY); loop_y++) { 480 481 zSum = ySum; 481 for (loop_z = 0; loop_z < poly->nZ; loop_z++) {482 for (loop_z = 0; loop_z < (1 + poly->COOL_4D_nZ); loop_z++) { 482 483 tSum = zSum; 483 for (loop_t = 0; loop_t < poly->nT; loop_t++) {484 for (loop_t = 0; loop_t < (1 + poly->COOL_4D_nT); loop_t++) { 484 485 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 485 486 polySum += tSum * poly->coeff[loop_x][loop_y][loop_z][loop_t]; … … 518 519 // Determine how many Chebyshev polynomials 519 520 // are needed, then create them. 520 maxChebyPoly = poly-> nX;521 if (poly-> nY > maxChebyPoly) {522 maxChebyPoly = poly-> nY;523 } 524 if (poly-> nZ > maxChebyPoly) {525 maxChebyPoly = poly-> nZ;526 } 527 if (poly-> nT > maxChebyPoly) {528 maxChebyPoly = poly-> nT;521 maxChebyPoly = poly->COOL_4D_nX; 522 if (poly->COOL_4D_nY > maxChebyPoly) { 523 maxChebyPoly = poly->COOL_4D_nY; 524 } 525 if (poly->COOL_4D_nZ > maxChebyPoly) { 526 maxChebyPoly = poly->COOL_4D_nZ; 527 } 528 if (poly->COOL_4D_nT > maxChebyPoly) { 529 maxChebyPoly = poly->COOL_4D_nT; 529 530 } 530 531 chebPolys = createChebyshevPolys(maxChebyPoly); 531 532 532 for (loop_x = 0; loop_x < poly->nX; loop_x++) {533 for (loop_y = 0; loop_y < poly->nY; loop_y++) {534 for (loop_z = 0; loop_z < poly->nZ; loop_z++) {535 for (loop_t = 0; loop_t < poly->nT; loop_t++) {533 for (loop_x = 0; loop_x < (1 + poly->COOL_4D_nX); loop_x++) { 534 for (loop_y = 0; loop_y < (1 + poly->COOL_4D_nY); loop_y++) { 535 for (loop_z = 0; loop_z < (1 + poly->COOL_4D_nZ); loop_z++) { 536 for (loop_t = 0; loop_t < (1 + poly->COOL_4D_nZ); loop_t++) { 536 537 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 537 538 polySum += poly->coeff[loop_x][loop_y][loop_z][loop_t] * … … 610 611 /***************************************************************************** 611 612 This routine must allocate memory for the polynomial structures. 613 XXX: replaces nterms variables with nOrder. Lots of potential for bugs 614 here. Probably should create separately named private variables 615 in these functions. 612 616 *****************************************************************************/ 613 617 psPolynomial1D* psPolynomial1DAlloc(unsigned int n, … … 623 627 624 628 newPoly->type = type; 625 newPoly-> n = n;629 newPoly->COOL_1D_n = n; 626 630 newPoly->coeff = psAlloc(n * sizeof(psF64)); 627 631 newPoly->coeffErr = psAlloc(n * sizeof(psF64)); 628 newPoly->mask = (psMaskType *)psAlloc( n* sizeof(psMaskType));629 for (i = 0; i < n; i++) {632 newPoly->mask = (psMaskType *)psAlloc((n + 1) * sizeof(psMaskType)); 633 for (i = 0; i < (n + 1); i++) { 630 634 newPoly->coeff[i] = 0.0; 631 635 newPoly->coeffErr[i] = 0.0; … … 651 655 652 656 newPoly->type = type; 653 newPoly-> nX = nX;654 newPoly-> nY = nY;655 656 newPoly->coeff = psAlloc( nX* sizeof(psF64 *));657 newPoly->coeffErr = psAlloc( nX* sizeof(psF64 *));658 newPoly->mask = (psMaskType **)psAlloc( nX* sizeof(psMaskType *));659 for (x = 0; x < nX; x++) {660 newPoly->coeff[x] = psAlloc( nY* sizeof(psF64));661 newPoly->coeffErr[x] = psAlloc( nY* sizeof(psF64));662 newPoly->mask[x] = (psMaskType *)psAlloc( nY* sizeof(psMaskType));663 } 664 for (x = 0; x < nX; x++) {665 for (y = 0; y < nY; y++) {657 newPoly->COOL_2D_nX = nX; 658 newPoly->COOL_2D_nY = nY; 659 660 newPoly->coeff = psAlloc((1 + nX) * sizeof(psF64 *)); 661 newPoly->coeffErr = psAlloc((1 + nX) * sizeof(psF64 *)); 662 newPoly->mask = (psMaskType **)psAlloc((1 + nX) * sizeof(psMaskType *)); 663 for (x = 0; x < (1 + nX); x++) { 664 newPoly->coeff[x] = psAlloc((1 + nY) * sizeof(psF64)); 665 newPoly->coeffErr[x] = psAlloc((1 + nY) * sizeof(psF64)); 666 newPoly->mask[x] = (psMaskType *)psAlloc((1 + nY) * sizeof(psMaskType)); 667 } 668 for (x = 0; x < (1 + nX); x++) { 669 for (y = 0; y < (1 + nY); y++) { 666 670 newPoly->coeff[x][y] = 0.0; 667 671 newPoly->coeffErr[x][y] = 0.0; … … 691 695 692 696 newPoly->type = type; 693 newPoly-> nX = nX;694 newPoly-> nY = nY;695 newPoly-> nZ = nZ;696 697 newPoly->coeff = psAlloc( nX* sizeof(psF64 **));698 newPoly->coeffErr = psAlloc( nX* sizeof(psF64 **));699 newPoly->mask = (psMaskType ***)psAlloc( nX* sizeof(psMaskType **));700 for (x = 0; x < nX; x++) {701 newPoly->coeff[x] = psAlloc( nY* sizeof(psF64 *));702 newPoly->coeffErr[x] = psAlloc( nY* sizeof(psF64 *));703 newPoly->mask[x] = (psMaskType **)psAlloc( nY* sizeof(psMaskType *));704 for (y = 0; y < nY; y++) {705 newPoly->coeff[x][y] = psAlloc( nZ* sizeof(psF64));706 newPoly->coeffErr[x][y] = psAlloc( nZ* sizeof(psF64));707 newPoly->mask[x][y] = (psMaskType *)psAlloc( nZ* sizeof(psMaskType));708 } 709 } 710 for (x = 0; x < nX; x++) {711 for (y = 0; y < nY; y++) {712 for (z = 0; z < nZ; z++) {697 newPoly->COOL_3D_nX = nX; 698 newPoly->COOL_3D_nY = nY; 699 newPoly->COOL_3D_nZ = nZ; 700 701 newPoly->coeff = psAlloc((nX + 1) * sizeof(psF64 **)); 702 newPoly->coeffErr = psAlloc((nX + 1) * sizeof(psF64 **)); 703 newPoly->mask = (psMaskType ***)psAlloc((nX + 1) * sizeof(psMaskType **)); 704 for (x = 0; x < (1 + nX); x++) { 705 newPoly->coeff[x] = psAlloc((nY + 1) * sizeof(psF64 *)); 706 newPoly->coeffErr[x] = psAlloc((nY + 1) * sizeof(psF64 *)); 707 newPoly->mask[x] = (psMaskType **)psAlloc((nY + 1) * sizeof(psMaskType *)); 708 for (y = 0; y < (nY + 1); y++) { 709 newPoly->coeff[x][y] = psAlloc((nZ + 1) * sizeof(psF64)); 710 newPoly->coeffErr[x][y] = psAlloc((nZ + 1) * sizeof(psF64)); 711 newPoly->mask[x][y] = (psMaskType *)psAlloc((nZ + 1) * sizeof(psMaskType)); 712 } 713 } 714 for (x = 0; x < (nX + 1); x++) { 715 for (y = 0; y < (nY + 1); y++) { 716 for (z = 0; z < (nZ + 1); z++) { 713 717 newPoly->coeff[x][y][z] = 0.0; 714 718 newPoly->coeffErr[x][y][z] = 0.0; … … 742 746 743 747 newPoly->type = type; 744 newPoly-> nX = nX;745 newPoly-> nY = nY;746 newPoly-> nZ = nZ;747 newPoly-> nT = nT;748 749 newPoly->coeff = psAlloc( nX* sizeof(psF64 ***));750 newPoly->coeffErr = psAlloc( nX* sizeof(psF64 ***));751 newPoly->mask = (psMaskType ****)psAlloc( nX* sizeof(psMaskType ***));752 for (x = 0; x < nX; x++) {753 newPoly->coeff[x] = psAlloc( nY* sizeof(psF64 **));754 newPoly->coeffErr[x] = psAlloc( nY* sizeof(psF64 **));755 newPoly->mask[x] = (psMaskType ***)psAlloc( nY* sizeof(psMaskType **));756 for (y = 0; y < nY; y++) {757 newPoly->coeff[x][y] = psAlloc( nZ* sizeof(psF64 *));758 newPoly->coeffErr[x][y] = psAlloc( nZ* sizeof(psF64 *));759 newPoly->mask[x][y] = (psMaskType **)psAlloc( nZ* sizeof(psMaskType *));760 for (z = 0; z < nZ; z++) {761 newPoly->coeff[x][y][z] = psAlloc( nT* sizeof(psF64));762 newPoly->coeffErr[x][y][z] = psAlloc( nT* sizeof(psF64));763 newPoly->mask[x][y][z] = (psMaskType *)psAlloc( nT* sizeof(psMaskType));764 } 765 } 766 } 767 for (x = 0; x < nX; x++) {768 for (y = 0; y < nY; y++) {769 for (z = 0; z < nZ; z++) {770 for (t = 0; t < nT; t++) {748 newPoly->COOL_4D_nX = nX; 749 newPoly->COOL_4D_nY = nY; 750 newPoly->COOL_4D_nZ = nZ; 751 newPoly->COOL_4D_nT = nT; 752 753 newPoly->coeff = psAlloc((nX + 1) * sizeof(psF64 ***)); 754 newPoly->coeffErr = psAlloc((nX + 1) * sizeof(psF64 ***)); 755 newPoly->mask = (psMaskType ****)psAlloc((nX + 1) * sizeof(psMaskType ***)); 756 for (x = 0; x < (nX + 1); x++) { 757 newPoly->coeff[x] = psAlloc((nY + 1) * sizeof(psF64 **)); 758 newPoly->coeffErr[x] = psAlloc((nY + 1) * sizeof(psF64 **)); 759 newPoly->mask[x] = (psMaskType ***)psAlloc((nY + 1) * sizeof(psMaskType **)); 760 for (y = 0; y < (nY + 1); y++) { 761 newPoly->coeff[x][y] = psAlloc((nZ + 1) * sizeof(psF64 *)); 762 newPoly->coeffErr[x][y] = psAlloc((nZ + 1) * sizeof(psF64 *)); 763 newPoly->mask[x][y] = (psMaskType **)psAlloc((nZ + 1) * sizeof(psMaskType *)); 764 for (z = 0; z < (nZ + 1); z++) { 765 newPoly->coeff[x][y][z] = psAlloc((nT + 1) * sizeof(psF64)); 766 newPoly->coeffErr[x][y][z] = psAlloc((nT + 1) * sizeof(psF64)); 767 newPoly->mask[x][y][z] = (psMaskType *)psAlloc((nT + 1) * sizeof(psMaskType)); 768 } 769 } 770 } 771 for (x = 0; x < (nX + 1); x++) { 772 for (y = 0; y < (nY + 1); y++) { 773 for (z = 0; z < (nZ + 1); z++) { 774 for (t = 0; t < (nT + 1); t++) { 771 775 newPoly->coeff[x][y][z][t] = 0.0; 772 776 newPoly->coeffErr[x][y][z][t] = 0.0; … … 972 976 } 973 977 974 // Alloc ateoutput vector978 // Allocoutput vector 975 979 tmp = psVectorAlloc(vecLen, PS_TYPE_F64); 976 980
Note:
See TracChangeset
for help on using the changeset viewer.
