IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 7, 2005, 10:56:13 AM (21 years ago)
Author:
evanalst
Message:

Update Chebyshev polynomial evaluation to include mask.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/math/psSpline.c

    r3374 r3380  
    77 *  polynomials.  It also contains a Gaussian functions.
    88 *
    9  *  @version $Revision: 1.90 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2005-03-04 20:51:20 $
     9 *  @version $Revision: 1.91 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2005-03-07 20:56:13 $
    1111 *
    1212 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    320320    n = myPoly->n;
    321321    d = psVectorAlloc(n, PS_TYPE_F32);
    322     d->data.F32[n-1] = myPoly->coeff[n-1];
    323     d->data.F32[n-2] = (2.0 * x * d->data.F32[n-1]) + myPoly->coeff[n-2];
     322    if(myPoly->mask[n-1] == 0) {
     323        d->data.F32[n-1] = myPoly->coeff[n-1];
     324    } else {
     325        d->data.F32[n-1] = 0.0;
     326    }
     327    d->data.F32[n-2] = (2.0 * x * d->data.F32[n-1]);
     328    if(myPoly->mask[n-2] == 0) {
     329        d->data.F32[n-2] += myPoly->coeff[n-2];
     330    }
    324331    for (i=n-3;i>=1;i--) {
    325332        d->data.F32[i] = (2.0 * x * d->data.F32[i+1]) -
    326                          (d->data.F32[i+2]) +
    327                          (myPoly->coeff[i]);
     333                         (d->data.F32[i+2]);
     334        if(myPoly->mask[i] == 0) {
     335            d->data.F32[i] += myPoly->coeff[i];
     336        }
    328337    }
    329338
    330339    tmp = (x * d->data.F32[1]) -
    331           (d->data.F32[2]) +
    332           (0.5 * myPoly->coeff[0]);
    333 
     340          (d->data.F32[2]);
     341    if(myPoly->mask[0] == 0) {
     342        tmp += (0.5 * myPoly->coeff[0]);
     343    }
    334344    psFree(d);
    335345    return(tmp);
     
    608618    n = myPoly->n;
    609619    d = psVectorAlloc(n, PS_TYPE_F64);
    610     d->data.F64[n-1] = myPoly->coeff[n-1];
    611     d->data.F64[n-2] = (2.0 * x * d->data.F64[n-1]) + myPoly->coeff[n-2];
     620    if(myPoly->mask[n-1] == 0) {
     621        d->data.F64[n-1] = myPoly->coeff[n-1];
     622    } else {
     623        d->data.F64[n-1] = 0.0;
     624    }
     625    d->data.F64[n-2] = (2.0 * x * d->data.F64[n-1]);
     626    if(myPoly->mask[n-2] == 0) {
     627        d->data.F64[n-2] += myPoly->coeff[n-2];
     628    }
    612629    for (i=n-3;i>=1;i--) {
    613630        d->data.F64[i] = (2.0 * x * d->data.F64[i+1]) -
    614                          (d->data.F64[i+2]) +
    615                          (myPoly->coeff[i]);
     631                         (d->data.F64[i+2]);
     632        if(myPoly->mask[i] == 0) {
     633            d->data.F64[i] += myPoly->coeff[i];
     634        }
    616635    }
    617636
    618637    tmp = (x * d->data.F64[1]) -
    619           (d->data.F64[2]) +
    620           (0.5 * myPoly->coeff[0]);
     638          (d->data.F64[2]);
     639    if(myPoly->mask[0] == 0) {
     640        tmp += (0.5 * myPoly->coeff[0]);
     641    }
    621642
    622643    psFree(d);
     
    12071228
    12081229    psVector *tmp;
    1209     psVector *myX;
    1210     psS32 i;
    12111230
    12121231    tmp = psVectorAlloc(x->n, PS_TYPE_F32);
    1213     for (i=0;i<x->n;i++) {
     1232    for (psS32 i=0;i<x->n;i++) {
    12141233        tmp->data.F32[i] = psPolynomial1DEval(myPoly, x->data.F32[i]);
    12151234    }
    12161235
    1217     if (x->type.type != PS_TYPE_F32) {
    1218         psFree(myX);
    1219     }
    12201236    return(tmp);
    12211237}
     
    16081624
    16091625    psVector *tmp;
    1610     psVector *myX;
    1611     psS32 i;
    16121626
    16131627    tmp = psVectorAlloc(x->n, PS_TYPE_F64);
    1614     for (i=0;i<x->n;i++) {
     1628    for (psS32 i=0;i<x->n;i++) {
    16151629        tmp->data.F64[i] = psDPolynomial1DEval(myPoly,
    16161630                                               x->data.F64[i]);
    16171631    }
    16181632
    1619     if (x->type.type != PS_TYPE_F64) {
    1620         psFree(myX);
    1621     }
    16221633    return(tmp);
    16231634}
Note: See TracChangeset for help on using the changeset viewer.