IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 20, 2006, 4:43:32 PM (20 years ago)
Author:
gusciora
Message:

Restructuring of the psMinimize.c file

psMinimizeLMM.c psMinimizeLMM.h

The Levenberg-Marquadt routines, AND, the psMinimization struct

psMinimizePolyFit.c psMinimizePolyFit.h

The various polynomial to vector fitting routines.

psMinimizePowell.c psMinimizePowell.h

The Powell minimization routines.

File:
1 edited

Legend:

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

    r5813 r6101  
    77*  polynomials.  It also contains a Gaussian functions.
    88*
    9 *  @version $Revision: 1.134 $ $Name: not supported by cvs2svn $
    10 *  @date $Date: 2005-12-19 23:58:47 $
     9*  @version $Revision: 1.135 $ $Name: not supported by cvs2svn $
     10*  @date $Date: 2006-01-21 02:43:31 $
    1111*
    1212*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    965965}
    966966
     967// XXX: The output of this routine is always psF64 while 1D and 2D are
     968// dependent on the input vectors.
    967969psVector *psPolynomial3DEvalVector(const psPolynomial3D *poly,
    968970                                   const psVector *x,
     
    973975    PS_ASSERT_POLY_NON_NULL(poly, NULL);
    974976    PS_ASSERT_VECTOR_NON_NULL(x, NULL);
    975     PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL);
     977    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(x, NULL);
    976978    PS_ASSERT_VECTOR_NON_NULL(y, NULL);
    977     PS_ASSERT_VECTOR_TYPE(y, PS_TYPE_F64, NULL);
     979    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(y, NULL);
    978980    PS_ASSERT_VECTOR_NON_NULL(z, NULL);
    979     PS_ASSERT_VECTOR_TYPE(z, PS_TYPE_F64, NULL);
     981    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(z, NULL);
    980982
    981983    psVector *tmp;
     
    994996
    995997    // Evaluate polynomial
    996     for (unsigned int i = 0; i < vecLen; i++) {
    997         tmp->data.F64[i] = psPolynomial3DEval(poly,
    998                                               x->data.F64[i],
    999                                               y->data.F64[i],
    1000                                               z->data.F64[i]);
    1001     }
     998    // XXX: Consult with IfA: is this how they want to handle multiple data types?
     999    if ((x->type.type == PS_TYPE_F32) || (y->type.type == PS_TYPE_F32) || (z->type.type == PS_TYPE_F32)) {
     1000        for (unsigned int i = 0; i < vecLen; i++) {
     1001            tmp->data.F64[i] = psPolynomial3DEval(poly, x->data.F32[i], y->data.F32[i], z->data.F32[i]);
     1002        }
     1003    } else if ((x->type.type == PS_TYPE_F32) || (y->type.type == PS_TYPE_F32) || (z->type.type == PS_TYPE_F64)) {
     1004        for (unsigned int i = 0; i < vecLen; i++) {
     1005            tmp->data.F64[i] = psPolynomial3DEval(poly, x->data.F32[i], y->data.F32[i], z->data.F64[i]);
     1006        }
     1007    } else if ((x->type.type == PS_TYPE_F32) || (y->type.type == PS_TYPE_F64) || (z->type.type == PS_TYPE_F32)) {
     1008        for (unsigned int i = 0; i < vecLen; i++) {
     1009            tmp->data.F64[i] = psPolynomial3DEval(poly, x->data.F32[i], y->data.F64[i], z->data.F32[i]);
     1010        }
     1011    } else if ((x->type.type == PS_TYPE_F32) || (y->type.type == PS_TYPE_F64) || (z->type.type == PS_TYPE_F64)) {
     1012        for (unsigned int i = 0; i < vecLen; i++) {
     1013            tmp->data.F64[i] = psPolynomial3DEval(poly, x->data.F32[i], y->data.F64[i], z->data.F64[i]);
     1014        }
     1015    } else if ((x->type.type == PS_TYPE_F64) || (y->type.type == PS_TYPE_F32) || (z->type.type == PS_TYPE_F32)) {
     1016        for (unsigned int i = 0; i < vecLen; i++) {
     1017            tmp->data.F64[i] = psPolynomial3DEval(poly, x->data.F64[i], y->data.F32[i], z->data.F32[i]);
     1018        }
     1019    } else if ((x->type.type == PS_TYPE_F64) || (y->type.type == PS_TYPE_F32) || (z->type.type == PS_TYPE_F64)) {
     1020        for (unsigned int i = 0; i < vecLen; i++) {
     1021            tmp->data.F64[i] = psPolynomial3DEval(poly, x->data.F64[i], y->data.F32[i], z->data.F32[i]);
     1022        }
     1023    } else if ((x->type.type == PS_TYPE_F64) || (y->type.type == PS_TYPE_F64) || (z->type.type == PS_TYPE_F32)) {
     1024        for (unsigned int i = 0; i < vecLen; i++) {
     1025            tmp->data.F64[i] = psPolynomial3DEval(poly, x->data.F64[i], y->data.F32[i], z->data.F32[i]);
     1026        }
     1027    } else if ((x->type.type == PS_TYPE_F64) || (y->type.type == PS_TYPE_F64) || (z->type.type == PS_TYPE_F64)) {
     1028        for (unsigned int i = 0; i < vecLen; i++) {
     1029            tmp->data.F64[i] = psPolynomial3DEval(poly, x->data.F64[i], y->data.F32[i], z->data.F32[i]);
     1030        }
     1031    }
     1032
    10021033
    10031034    // Return output vector
     
    10331064    PS_ASSERT_POLY_NON_NULL(poly, NULL);
    10341065    PS_ASSERT_VECTOR_NON_NULL(x, NULL);
    1035     PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL);
     1066    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(x, NULL);
    10361067    PS_ASSERT_VECTOR_NON_NULL(y, NULL);
    1037     PS_ASSERT_VECTOR_TYPE(y, PS_TYPE_F64, NULL);
     1068    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(y, NULL);
    10381069    PS_ASSERT_VECTOR_NON_NULL(z, NULL);
    1039     PS_ASSERT_VECTOR_TYPE(z, PS_TYPE_F64, NULL);
     1070    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(z, NULL);
    10401071    PS_ASSERT_VECTOR_NON_NULL(t, NULL);
    1041     PS_ASSERT_VECTOR_TYPE(t, PS_TYPE_F64, NULL);
     1072    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(t, NULL);
    10421073
    10431074    psVector *tmp;
     
    10571088    // Allocoutput vector
    10581089    tmp = psVectorAlloc(vecLen, PS_TYPE_F64);
     1090
     1091    // Evaluate polynomial
     1092    // XXX: Consult with IfA: is this how they want to handle multiple data types?
     1093    if ((x->type.type == PS_TYPE_F32) || (y->type.type == PS_TYPE_F32) || (z->type.type == PS_TYPE_F32) || (t->type.type == PS_TYPE_F32)) {
     1094        for (unsigned int i = 0; i < vecLen; i++) {
     1095            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F32[i], y->data.F32[i], z->data.F32[i], t->data.F32[i]);
     1096        }
     1097    } else if ((x->type.type == PS_TYPE_F32) || (y->type.type == PS_TYPE_F32) || (z->type.type == PS_TYPE_F32) || (t->type.type == PS_TYPE_F64)) {
     1098        for (unsigned int i = 0; i < vecLen; i++) {
     1099            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F32[i], y->data.F32[i], z->data.F32[i], t->data.F64[i]);
     1100        }
     1101    } else if ((x->type.type == PS_TYPE_F32) || (y->type.type == PS_TYPE_F32) || (z->type.type == PS_TYPE_F64) || (t->type.type == PS_TYPE_F32)) {
     1102        for (unsigned int i = 0; i < vecLen; i++) {
     1103            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F32[i], y->data.F32[i], z->data.F64[i], t->data.F32[i]);
     1104        }
     1105    } else if ((x->type.type == PS_TYPE_F32) || (y->type.type == PS_TYPE_F32) || (z->type.type == PS_TYPE_F64) || (t->type.type == PS_TYPE_F64)) {
     1106        for (unsigned int i = 0; i < vecLen; i++) {
     1107            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F32[i], y->data.F32[i], z->data.F64[i], t->data.F64[i]);
     1108        }
     1109    } else if ((x->type.type == PS_TYPE_F32) || (y->type.type == PS_TYPE_F64) || (z->type.type == PS_TYPE_F32) || (t->type.type == PS_TYPE_F32)) {
     1110        for (unsigned int i = 0; i < vecLen; i++) {
     1111            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F32[i], y->data.F64[i], z->data.F32[i], t->data.F32[i]);
     1112        }
     1113    } else if ((x->type.type == PS_TYPE_F32) || (y->type.type == PS_TYPE_F64) || (z->type.type == PS_TYPE_F32) || (t->type.type == PS_TYPE_F64)) {
     1114        for (unsigned int i = 0; i < vecLen; i++) {
     1115            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F32[i], y->data.F64[i], z->data.F32[i], t->data.F64[i]);
     1116        }
     1117    } else if ((x->type.type == PS_TYPE_F32) || (y->type.type == PS_TYPE_F64) || (z->type.type == PS_TYPE_F64) || (t->type.type == PS_TYPE_F32)) {
     1118        for (unsigned int i = 0; i < vecLen; i++) {
     1119            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F32[i], y->data.F64[i], z->data.F64[i], t->data.F32[i]);
     1120        }
     1121    } else if ((x->type.type == PS_TYPE_F32) || (y->type.type == PS_TYPE_F64) || (z->type.type == PS_TYPE_F64) || (t->type.type == PS_TYPE_F64)) {
     1122        for (unsigned int i = 0; i < vecLen; i++) {
     1123            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F32[i], y->data.F64[i], z->data.F64[i], t->data.F64[i]);
     1124        }
     1125    } else if ((x->type.type == PS_TYPE_F64) || (y->type.type == PS_TYPE_F32) || (z->type.type == PS_TYPE_F32) || (t->type.type == PS_TYPE_F32)) {
     1126        for (unsigned int i = 0; i < vecLen; i++) {
     1127            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F64[i], y->data.F32[i], z->data.F32[i], t->data.F32[i]);
     1128        }
     1129    } else if ((x->type.type == PS_TYPE_F64) || (y->type.type == PS_TYPE_F32) || (z->type.type == PS_TYPE_F32) || (t->type.type == PS_TYPE_F64)) {
     1130        for (unsigned int i = 0; i < vecLen; i++) {
     1131            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F64[i], y->data.F32[i], z->data.F32[i], t->data.F64[i]);
     1132        }
     1133    } else if ((x->type.type == PS_TYPE_F64) || (y->type.type == PS_TYPE_F32) || (z->type.type == PS_TYPE_F64) || (t->type.type == PS_TYPE_F32)) {
     1134        for (unsigned int i = 0; i < vecLen; i++) {
     1135            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F64[i], y->data.F32[i], z->data.F64[i], t->data.F32[i]);
     1136        }
     1137    } else if ((x->type.type == PS_TYPE_F64) || (y->type.type == PS_TYPE_F32) || (z->type.type == PS_TYPE_F64) || (t->type.type == PS_TYPE_F64)) {
     1138        for (unsigned int i = 0; i < vecLen; i++) {
     1139            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F64[i], y->data.F32[i], z->data.F64[i], t->data.F64[i]);
     1140        }
     1141    } else if ((x->type.type == PS_TYPE_F64) || (y->type.type == PS_TYPE_F64) || (z->type.type == PS_TYPE_F32) || (t->type.type == PS_TYPE_F32)) {
     1142        for (unsigned int i = 0; i < vecLen; i++) {
     1143            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F64[i], y->data.F64[i], z->data.F32[i], t->data.F32[i]);
     1144        }
     1145    } else if ((x->type.type == PS_TYPE_F64) || (y->type.type == PS_TYPE_F64) || (z->type.type == PS_TYPE_F32) || (t->type.type == PS_TYPE_F64)) {
     1146        for (unsigned int i = 0; i < vecLen; i++) {
     1147            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F64[i], y->data.F64[i], z->data.F32[i], t->data.F64[i]);
     1148        }
     1149    } else if ((x->type.type == PS_TYPE_F64) || (y->type.type == PS_TYPE_F64) || (z->type.type == PS_TYPE_F64) || (t->type.type == PS_TYPE_F32)) {
     1150        for (unsigned int i = 0; i < vecLen; i++) {
     1151            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F64[i], y->data.F64[i], z->data.F64[i], t->data.F32[i]);
     1152        }
     1153    } else if ((x->type.type == PS_TYPE_F64) || (y->type.type == PS_TYPE_F64) || (z->type.type == PS_TYPE_F64) || (t->type.type == PS_TYPE_F64)) {
     1154        for (unsigned int i = 0; i < vecLen; i++) {
     1155            tmp->data.F64[i] = psPolynomial4DEval(poly, x->data.F64[i], y->data.F64[i], z->data.F64[i], t->data.F64[i]);
     1156        }
     1157    }
     1158
    10591159
    10601160    // Evaluate polynomial
Note: See TracChangeset for help on using the changeset viewer.