Changeset 15253
- Timestamp:
- Oct 9, 2007, 9:24:46 AM (19 years ago)
- Location:
- trunk/psLib/src/math
- Files:
-
- 2 edited
-
psPolynomial.c (modified) (29 diffs)
-
psPolynomial.h (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/math/psPolynomial.c
r10999 r15253 7 7 * polynomials. It also contains a Gaussian functions. 8 8 * 9 * @version $Revision: 1.15 7$ $Name: not supported by cvs2svn $10 * @date $Date: 2007- 01-09 22:38:53$9 * @version $Revision: 1.158 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2007-10-09 19:24:46 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 95 95 psFree(poly->coeff); 96 96 psFree(poly->coeffErr); 97 psFree(poly-> mask);97 psFree(poly->coeffMask); 98 98 } 99 99 … … 105 105 psFree(poly->coeff[x]); 106 106 psFree(poly->coeffErr[x]); 107 psFree(poly-> mask[x]);107 psFree(poly->coeffMask[x]); 108 108 } 109 109 psFree(poly->coeff); 110 110 psFree(poly->coeffErr); 111 psFree(poly-> mask);111 psFree(poly->coeffMask); 112 112 } 113 113 … … 121 121 psFree(poly->coeff[x][y]); 122 122 psFree(poly->coeffErr[x][y]); 123 psFree(poly-> mask[x][y]);123 psFree(poly->coeffMask[x][y]); 124 124 } 125 125 psFree(poly->coeff[x]); 126 126 psFree(poly->coeffErr[x]); 127 psFree(poly-> mask[x]);127 psFree(poly->coeffMask[x]); 128 128 } 129 129 130 130 psFree(poly->coeff); 131 131 psFree(poly->coeffErr); 132 psFree(poly-> mask);132 psFree(poly->coeffMask); 133 133 } 134 134 … … 144 144 psFree(poly->coeff[x][y][z]); 145 145 psFree(poly->coeffErr[x][y][z]); 146 psFree(poly-> mask[x][y][z]);146 psFree(poly->coeffMask[x][y][z]); 147 147 } 148 148 psFree(poly->coeff[x][y]); 149 149 psFree(poly->coeffErr[x][y]); 150 psFree(poly-> mask[x][y]);150 psFree(poly->coeffMask[x][y]); 151 151 } 152 152 psFree(poly->coeff[x]); 153 153 psFree(poly->coeffErr[x]); 154 psFree(poly-> mask[x]);154 psFree(poly->coeffMask[x]); 155 155 } 156 156 157 157 psFree(poly->coeff); 158 158 psFree(poly->coeffErr); 159 psFree(poly-> mask);159 psFree(poly->coeffMask); 160 160 } 161 161 … … 221 221 222 222 for (loop_x = 0; loop_x < poly->nX+1; loop_x++) { 223 if ( poly->mask[loop_x] == 0) {223 if (!(poly->coeffMask[loop_x] & PS_POLY_MASK_SET)) { 224 224 psTrace("psLib.math", 8, 225 225 "polysum+= sum*coeff [%lf+= (%lf * %lf)\n", polySum, xSum, poly->coeff[loop_x]); … … 251 251 // Special case where the Chebyshev poly is constant. 252 252 if (nTerms == 1) { 253 if ( poly->mask[0] == 0) {253 if (!(poly->coeffMask[0] & PS_POLY_MASK_SET)) { 254 254 tmp += poly->coeff[0]; 255 255 } … … 259 259 // Special case where the Chebyshev poly is linear. 260 260 if (nTerms == 2) { 261 if ( poly->mask[0] == 0) {261 if (!(poly->coeffMask[0] & PS_POLY_MASK_SET)) { 262 262 tmp+= poly->coeff[0]; 263 263 } 264 if ( poly->mask[1] == 0) {264 if (!(poly->coeffMask[1] & PS_POLY_MASK_SET)) { 265 265 tmp+= poly->coeff[1] * x; 266 266 } … … 271 271 // General case where the Chebyshev poly has 2 or more terms. 272 272 d = psVectorAlloc(nTerms, PS_TYPE_F64); 273 if (poly->mask[nTerms-1] == 0) {273 if (!(poly->coeffMask[nTerms-1] & PS_POLY_MASK_SET)) { 274 274 d->data.F64[nTerms-1] = poly->coeff[nTerms-1]; 275 275 } else { … … 278 278 279 279 d->data.F64[nTerms-2] = (2.0 * x * d->data.F64[nTerms-1]); 280 if (poly->mask[nTerms-2] == 0) {280 if (!(poly->coeffMask[nTerms-2] & PS_POLY_MASK_SET)) { 281 281 d->data.F64[nTerms-2] += poly->coeff[nTerms-2]; 282 282 } … … 284 284 for (i=nTerms-3;i>=1;i--) { 285 285 d->data.F64[i] = (2.0 * x * d->data.F64[i+1]) - (d->data.F64[i+2]); 286 if (poly->mask[i] == 0) {286 if (!(poly->coeffMask[i] & PS_POLY_MASK_SET)) { 287 287 d->data.F64[i] += poly->coeff[i]; 288 288 } … … 290 290 291 291 tmp = (x * d->data.F64[1]) - (d->data.F64[2]); 292 if (poly->mask[0] == 0) {292 if (!(poly->coeffMask[0] & PS_POLY_MASK_SET)) { 293 293 tmp += (0.5 * poly->coeff[0]); 294 294 } … … 328 328 ySum = xSum; 329 329 for (loop_y = 0; loop_y < (1 + poly->nY); loop_y++) { 330 if ( poly->mask[loop_x][loop_y] == 0) {330 if (!(poly->coeffMask[loop_x][loop_y] & PS_POLY_MASK_SET)) { 331 331 polySum += ySum * poly->coeff[loop_x][loop_y]; 332 332 } … … 364 364 for (loop_x = 0; loop_x < (1 + poly->nX); loop_x++) { 365 365 for (loop_y = 0; loop_y < (1 + poly->nY); loop_y++) { 366 if ( poly->mask[loop_x][loop_y] == 0) {366 if (!(poly->coeffMask[loop_x][loop_y] & PS_POLY_MASK_SET)) { 367 367 polySum += poly->coeff[loop_x][loop_y] * 368 368 psPolynomial1DEval(chebPolys[loop_x], x) * … … 396 396 zSum = ySum; 397 397 for (loop_z = 0; loop_z < (1 + poly->nZ); loop_z++) { 398 if ( poly->mask[loop_x][loop_y][loop_z] == 0) {398 if (!(poly->coeffMask[loop_x][loop_y][loop_z] & PS_POLY_MASK_SET)) { 399 399 polySum += zSum * poly->coeff[loop_x][loop_y][loop_z]; 400 400 } … … 439 439 for (loop_y = 0; loop_y < (1 + poly->nY); loop_y++) { 440 440 for (loop_z = 0; loop_z < (1 + poly->nZ); loop_z++) { 441 if ( poly->mask[loop_x][loop_y][loop_z] == 0) {441 if (!(poly->coeffMask[loop_x][loop_y][loop_z] & PS_POLY_MASK_SET)) { 442 442 polySum += poly->coeff[loop_x][loop_y][loop_z] * 443 443 psPolynomial1DEval(chebPolys[loop_x], x) * … … 479 479 tSum = zSum; 480 480 for (loop_t = 0; loop_t < (1 + poly->nT); loop_t++) { 481 if ( poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) {481 if (!(poly->coeffMask[loop_x][loop_y][loop_z][loop_t] & PS_POLY_MASK_SET)) { 482 482 polySum += tSum * poly->coeff[loop_x][loop_y][loop_z][loop_t]; 483 483 } … … 532 532 for (loop_z = 0; loop_z < (1 + poly->nZ); loop_z++) { 533 533 for (loop_t = 0; loop_t < (1 + poly->nT); loop_t++) { 534 if ( poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) {534 if (!(poly->coeffMask[loop_x][loop_y][loop_z][loop_t] & PS_POLY_MASK_SET)) { 535 535 polySum += poly->coeff[loop_x][loop_y][loop_z][loop_t] * 536 536 psPolynomial1DEval(chebPolys[loop_x], x) * … … 596 596 newPoly->coeff = psAlloc((nOrder + 1) * sizeof(psF64)); 597 597 newPoly->coeffErr = psAlloc((nOrder + 1) * sizeof(psF64)); 598 newPoly-> mask = (psMaskType *)psAlloc((nOrder + 1) * sizeof(psMaskType));598 newPoly->coeffMask = (psMaskType *)psAlloc((nOrder + 1) * sizeof(psMaskType)); 599 599 for (psU32 i = 0; i < (nOrder + 1); i++) { 600 600 newPoly->coeff[i] = 0.0; 601 601 newPoly->coeffErr[i] = 0.0; 602 newPoly-> mask[i] = 0;602 newPoly->coeffMask[i] = PS_POLY_MASK_NONE; 603 603 } 604 604 … … 626 626 newPoly->coeff = psAlloc((1 + nX) * sizeof(psF64 *)); 627 627 newPoly->coeffErr = psAlloc((1 + nX) * sizeof(psF64 *)); 628 newPoly-> mask = (psMaskType **)psAlloc((1 + nX) * sizeof(psMaskType *));628 newPoly->coeffMask = (psMaskType **)psAlloc((1 + nX) * sizeof(psMaskType *)); 629 629 for (x = 0; x < (1 + nX); x++) { 630 630 newPoly->coeff[x] = psAlloc((1 + nY) * sizeof(psF64)); 631 631 newPoly->coeffErr[x] = psAlloc((1 + nY) * sizeof(psF64)); 632 newPoly-> mask[x] = (psMaskType *)psAlloc((1 + nY) * sizeof(psMaskType));632 newPoly->coeffMask[x] = (psMaskType *)psAlloc((1 + nY) * sizeof(psMaskType)); 633 633 } 634 634 for (x = 0; x < (1 + nX); x++) { … … 636 636 newPoly->coeff[x][y] = 0.0; 637 637 newPoly->coeffErr[x][y] = 0.0; 638 newPoly-> mask[x][y] = 0;638 newPoly->coeffMask[x][y] = PS_POLY_MASK_NONE; 639 639 } 640 640 } … … 661 661 psFree (poly->coeff[i]); 662 662 psFree (poly->coeffErr[i]); 663 psFree (poly-> mask[i]);663 psFree (poly->coeffMask[i]); 664 664 } 665 665 psFree (poly->coeff); 666 666 psFree (poly->coeffErr); 667 psFree (poly-> mask);667 psFree (poly->coeffMask); 668 668 669 669 poly->type = type; … … 673 673 poly->coeff = psAlloc((1 + nX) * sizeof(psF64 *)); 674 674 poly->coeffErr = psAlloc((1 + nX) * sizeof(psF64 *)); 675 poly-> mask = (psMaskType **)psAlloc((1 + nX) * sizeof(psMaskType *));675 poly->coeffMask = (psMaskType **)psAlloc((1 + nX) * sizeof(psMaskType *)); 676 676 for (int i = 0; i < (1 + nX); i++) { 677 677 poly->coeff[i] = psAlloc((1 + nY) * sizeof(psF64)); 678 678 poly->coeffErr[i] = psAlloc((1 + nY) * sizeof(psF64)); 679 poly-> mask[i] = (psMaskType *)psAlloc((1 + nY) * sizeof(psMaskType));679 poly->coeffMask[i] = (psMaskType *)psAlloc((1 + nY) * sizeof(psMaskType)); 680 680 } 681 681 } … … 684 684 poly->coeff[i][j] = 0.0; 685 685 poly->coeffErr[i][j] = 0.0; 686 poly-> mask[i][j] = 0;686 poly->coeffMask[i][j] = PS_POLY_MASK_NONE; 687 687 } 688 688 } … … 704 704 out->coeff[i][j] = poly->coeff[i][j]; 705 705 out->coeffErr[i][j] = poly->coeffErr[i][j]; 706 out-> mask[i][j] = poly->mask[i][j];706 out->coeffMask[i][j] = poly->coeffMask[i][j]; 707 707 } 708 708 } … … 737 737 newPoly->coeff = psAlloc((nX + 1) * sizeof(psF64 **)); 738 738 newPoly->coeffErr = psAlloc((nX + 1) * sizeof(psF64 **)); 739 newPoly-> mask = (psMaskType ***)psAlloc((nX + 1) * sizeof(psMaskType **));739 newPoly->coeffMask = (psMaskType ***)psAlloc((nX + 1) * sizeof(psMaskType **)); 740 740 for (x = 0; x < (1 + nX); x++) { 741 741 newPoly->coeff[x] = psAlloc((nY + 1) * sizeof(psF64 *)); 742 742 newPoly->coeffErr[x] = psAlloc((nY + 1) * sizeof(psF64 *)); 743 newPoly-> mask[x] = (psMaskType **)psAlloc((nY + 1) * sizeof(psMaskType *));743 newPoly->coeffMask[x] = (psMaskType **)psAlloc((nY + 1) * sizeof(psMaskType *)); 744 744 for (y = 0; y < (nY + 1); y++) { 745 745 newPoly->coeff[x][y] = psAlloc((nZ + 1) * sizeof(psF64)); 746 746 newPoly->coeffErr[x][y] = psAlloc((nZ + 1) * sizeof(psF64)); 747 newPoly-> mask[x][y] = (psMaskType *)psAlloc((nZ + 1) * sizeof(psMaskType));747 newPoly->coeffMask[x][y] = (psMaskType *)psAlloc((nZ + 1) * sizeof(psMaskType)); 748 748 } 749 749 } … … 753 753 newPoly->coeff[x][y][z] = 0.0; 754 754 newPoly->coeffErr[x][y][z] = 0.0; 755 newPoly-> mask[x][y][z] = 0;755 newPoly->coeffMask[x][y][z] = PS_POLY_MASK_NONE; 756 756 } 757 757 } … … 792 792 newPoly->coeff = psAlloc((nX + 1) * sizeof(psF64 ***)); 793 793 newPoly->coeffErr = psAlloc((nX + 1) * sizeof(psF64 ***)); 794 newPoly-> mask = (psMaskType ****)psAlloc((nX + 1) * sizeof(psMaskType ***));794 newPoly->coeffMask = (psMaskType ****)psAlloc((nX + 1) * sizeof(psMaskType ***)); 795 795 for (x = 0; x < (nX + 1); x++) { 796 796 newPoly->coeff[x] = psAlloc((nY + 1) * sizeof(psF64 **)); 797 797 newPoly->coeffErr[x] = psAlloc((nY + 1) * sizeof(psF64 **)); 798 newPoly-> mask[x] = (psMaskType ***)psAlloc((nY + 1) * sizeof(psMaskType **));798 newPoly->coeffMask[x] = (psMaskType ***)psAlloc((nY + 1) * sizeof(psMaskType **)); 799 799 for (y = 0; y < (nY + 1); y++) { 800 800 newPoly->coeff[x][y] = psAlloc((nZ + 1) * sizeof(psF64 *)); 801 801 newPoly->coeffErr[x][y] = psAlloc((nZ + 1) * sizeof(psF64 *)); 802 newPoly-> mask[x][y] = (psMaskType **)psAlloc((nZ + 1) * sizeof(psMaskType *));802 newPoly->coeffMask[x][y] = (psMaskType **)psAlloc((nZ + 1) * sizeof(psMaskType *)); 803 803 for (z = 0; z < (nZ + 1); z++) { 804 804 newPoly->coeff[x][y][z] = psAlloc((nT + 1) * sizeof(psF64)); 805 805 newPoly->coeffErr[x][y][z] = psAlloc((nT + 1) * sizeof(psF64)); 806 newPoly-> mask[x][y][z] = (psMaskType *)psAlloc((nT + 1) * sizeof(psMaskType));806 newPoly->coeffMask[x][y][z] = (psMaskType *)psAlloc((nT + 1) * sizeof(psMaskType)); 807 807 } 808 808 } … … 814 814 newPoly->coeff[x][y][z][t] = 0.0; 815 815 newPoly->coeffErr[x][y][z][t] = 0.0; 816 newPoly-> mask[x][y][z][t] = 0;816 newPoly->coeffMask[x][y][z][t] = PS_POLY_MASK_NONE; 817 817 } 818 818 } -
trunk/psLib/src/math/psPolynomial.h
r14452 r15253 8 8 * @author GLG, MHPCC 9 9 * 10 * @version $Revision: 1.6 8$ $Name: not supported by cvs2svn $11 * @date $Date: 2007- 08-09 01:40:07$10 * @version $Revision: 1.69 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2007-10-09 19:24:46 $ 12 12 * 13 13 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 27 27 #include "psVector.h" 28 28 #include "psScalar.h" 29 30 typedef enum { 31 PS_POLY_MASK_NONE = 0, 32 PS_POLY_MASK_SET = 1, // the coefficient should not be used (implies MASK_FIT) 33 PS_POLY_MASK_FIT = 2, // the coefficient should not be fitted 34 PS_POLY_MASK_BOTH = 3, // the coefficient should not be fitted 35 } psPolynomialMaskValues; 29 36 30 37 /** Evaluate a non-normalized Gaussian with the given mean and sigma at the … … 60 67 psF64 *coeff; ///< Coefficients 61 68 psF64 *coeffErr; ///< Error in coefficients 62 psMaskType * mask;///< Coefficient mask69 psMaskType *coeffMask; ///< Coefficient mask 63 70 } 64 71 psPolynomial1D; … … 72 79 psF64 **coeff; ///< Coefficients 73 80 psF64 **coeffErr; ///< Error in coefficients 74 psMaskType ** mask; ///< Coefficients mask81 psMaskType **coeffMask; ///< Coefficients mask 75 82 } 76 83 psPolynomial2D; … … 85 92 psF64 ***coeff; ///< Coefficients 86 93 psF64 ***coeffErr; ///< Error in coefficients 87 psMaskType *** mask; ///< Coefficients mask94 psMaskType ***coeffMask; ///< Coefficients mask 88 95 } 89 96 psPolynomial3D; … … 93 100 { 94 101 psPolynomialType type; ///< Polynomial type 95 unsigned int nX; ///< Polynomial order in x96 unsigned int nY; ///< Polynomial order in y97 unsigned int nZ; ///< Polynomial order in z98 unsigned int nT; ///< Polynomial order in t102 unsigned int nX; ///< Polynomial order in x 103 unsigned int nY; ///< Polynomial order in y 104 unsigned int nZ; ///< Polynomial order in z 105 unsigned int nT; ///< Polynomial order in t 99 106 psF64 ****coeff; ///< Coefficients 100 107 psF64 ****coeffErr; ///< Error in coefficients 101 psMaskType **** mask;///< Coefficients mask108 psMaskType ****coeffMask; ///< Coefficients mask 102 109 } 103 110 psPolynomial4D;
Note:
See TracChangeset
for help on using the changeset viewer.
