IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 29, 2005, 4:00:11 PM (20 years ago)
Author:
desonia
Message:

merged eam_r8.0_b2 into CVS trunk.

File:
1 edited

Legend:

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

    r5576 r5624  
    77*  polynomials.  It also contains a Gaussian functions.
    88*
    9 *  @version $Revision: 1.132 $ $Name: not supported by cvs2svn $
    10 *  @date $Date: 2005-11-22 21:40:40 $
     9*  @version $Revision: 1.133 $ $Name: not supported by cvs2svn $
     10*  @date $Date: 2005-11-30 02:00:09 $
    1111*
    1212*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    725725}
    726726
    727 psPolynomial4D* psPolynomial4DAlloc(
    728     unsigned int nX,
    729     unsigned int nY,
    730     unsigned int nZ,
    731     unsigned int nT,
    732     psPolynomialType type)
     727psPolynomial4D* psPolynomial4DAlloc( unsigned int nX,
     728                                     unsigned int nY,
     729                                     unsigned int nZ,
     730                                     unsigned int nT,
     731                                     psPolynomialType type)
    733732{
    734733    PS_ASSERT_INT_NONNEGATIVE(nX, NULL);
     
    785784}
    786785
    787 
    788 
    789 
    790 
    791 
    792 
    793 
    794 
    795 
    796 
    797 
    798 
    799 
    800 
    801 
    802 
    803 
    804 
    805 
    806 
    807 
    808 
    809786psF64 psPolynomial1DEval(const psPolynomial1D* poly,
    810787                         psF64 x)
     
    824801}
    825802
     803// this function must accept F32 and F64 input x vectors
    826804psVector *psPolynomial1DEvalVector(const psPolynomial1D *poly,
    827805                                   const psVector *x)
     
    829807    PS_ASSERT_POLY_NON_NULL(poly, NULL);
    830808    PS_ASSERT_VECTOR_NON_NULL(x, NULL);
    831     PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL);
     809    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(x, NULL);
    832810
    833811    psVector *tmp;
    834812
    835     tmp = psVectorAlloc(x->n, PS_TYPE_F64);
    836     for (unsigned int i=0;i<x->n;i++) {
    837         tmp->data.F64[i] = psPolynomial1DEval(poly, x->data.F64[i]);
    838     }
    839 
     813    switch (x->type.type) {
     814    case PS_TYPE_F64:
     815        tmp = psVectorAlloc(x->n, PS_TYPE_F64);
     816        for (unsigned int i=0;i<x->n;i++) {
     817            tmp->data.F64[i] = psPolynomial1DEval(poly, x->data.F64[i]);
     818        }
     819        break;
     820    case PS_TYPE_F32:
     821        tmp = psVectorAlloc(x->n, PS_TYPE_F32);
     822        for (unsigned int i=0;i<x->n;i++) {
     823            tmp->data.F32[i] = psPolynomial1DEval(poly, x->data.F32[i]);
     824        }
     825        break;
     826    default:
     827        psError(PS_ERR_UNKNOWN, false, "invalid input data type.\n");
     828        return (NULL);
     829    }
    840830    return(tmp);
    841831}
     
    859849}
    860850
     851// this function must support input data types of F32 and F64
     852// all input vectors data types must match (all F32 or all F64)
    861853psVector *psPolynomial2DEvalVector(const psPolynomial2D *poly,
    862854                                   const psVector *x,
     
    866858    PS_ASSERT_POLY_NON_NULL(poly, NULL);
    867859    PS_ASSERT_VECTOR_NON_NULL(x, NULL);
    868     PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL);
     860    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(x, NULL);
    869861    PS_ASSERT_VECTOR_NON_NULL(y, NULL);
    870     PS_ASSERT_VECTOR_TYPE(y, PS_TYPE_F64, NULL);
     862    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(y, NULL);
    871863
    872864    psVector *tmp;
     
    878870    }
    879871
    880     // Create output vector to return
    881     tmp = psVectorAlloc(vecLen, PS_TYPE_F64);
    882 
    883     // Evaluate the polynomial at the specified points
    884     for (unsigned int i=0; i<vecLen; i++) {
    885         tmp->data.F64[i] = psPolynomial2DEval(poly,x->data.F64[i],y->data.F64[i]);
    886     }
    887 
     872    switch (x->type.type) {
     873    case PS_TYPE_F32:
     874        if (y->type.type != x->type.type) {
     875            psError(PS_ERR_UNKNOWN, true, "type mismatch in data vectors");
     876            return (NULL);
     877        }
     878
     879        // Create output vector to return
     880        tmp = psVectorAlloc(vecLen, PS_TYPE_F32);
     881
     882        // Evaluate the polynomial at the specified points
     883        for (unsigned int i=0; i<vecLen; i++) {
     884            tmp->data.F32[i] = psPolynomial2DEval(poly,x->data.F32[i],y->data.F32[i]);
     885        }
     886        break;
     887    case PS_TYPE_F64:
     888        if (y->type.type != x->type.type) {
     889            psError(PS_ERR_UNKNOWN, true, "type mismatch in data vectors");
     890            return (NULL);
     891        }
     892
     893        // Create output vector to return
     894        tmp = psVectorAlloc(vecLen, PS_TYPE_F64);
     895
     896        // Evaluate the polynomial at the specified points
     897        for (unsigned int i=0; i<vecLen; i++) {
     898            tmp->data.F64[i] = psPolynomial2DEval(poly,x->data.F64[i],y->data.F64[i]);
     899        }
     900        break;
     901    default:
     902        psError(PS_ERR_UNKNOWN, false, "invalid input data type.\n");
     903        return (NULL);
     904    }
    888905    // Return output vector
    889906    return(tmp);
Note: See TracChangeset for help on using the changeset viewer.