IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 1123


Ignore:
Timestamp:
Jun 28, 2004, 7:38:54 PM (22 years ago)
Author:
gusciora
Message:

...

Location:
trunk/psLib
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/dataManip/psMinimize.c

    r1122 r1123  
    122122
    123123    for (i=0;i<domain->numRows;i++) {
    124         //        printf("Data item %d is ( ", i);
     124        printf("Data item %d is ( ", i);
    125125        for (j=0;j<domain->numCols;j++) {
    126126            tmpVecPtr->data.F32[j] = domain->data.F32[i][j];
    127             //            printf("%.1f ", tmpVecPtr->data.F32[j]);
     127            printf("%.1f ", tmpVecPtr->data.F32[j]);
    128128        }
    129129        tmpf = evalModel(tmpVecPtr, inputParameterList);
    130         //        printf(" ).  Output is %.1f\n", tmpf);
     130        printf(" ).  Output is %.1f\n", tmpf);
    131131
    132132        gsl_vector_set(outData, i, (tmpf - data->data.F32[i])/
  • trunk/psLib/src/math/psMinimize.c

    r1122 r1123  
    122122
    123123    for (i=0;i<domain->numRows;i++) {
    124         //        printf("Data item %d is ( ", i);
     124        printf("Data item %d is ( ", i);
    125125        for (j=0;j<domain->numCols;j++) {
    126126            tmpVecPtr->data.F32[j] = domain->data.F32[i][j];
    127             //            printf("%.1f ", tmpVecPtr->data.F32[j]);
     127            printf("%.1f ", tmpVecPtr->data.F32[j]);
    128128        }
    129129        tmpf = evalModel(tmpVecPtr, inputParameterList);
    130         //        printf(" ).  Output is %.1f\n", tmpf);
     130        printf(" ).  Output is %.1f\n", tmpf);
    131131
    132132        gsl_vector_set(outData, i, (tmpf - data->data.F32[i])/
  • trunk/psLib/test/dataManip/tst_psMinimize00.c

    r1103 r1123  
    1111#include "psFunctions.h"
    1212#include "psMinimize.h"
     13#include <math.h>
    1314#define NUM_DATA 10
    1415#define DATA_WIDTH 2
    1516#define NUM_PARAMS 4
     17
     18// The function is f(x) = (A * e^(lambda x)) + b
     19
     20float myFunc2(const psVector *restrict myData,
     21              const psVector *restrict myParams)
     22{
     23    float x = myData->data.F32[0];
     24    float A = myParams->data.F32[0];
     25    float lambda = myParams->data.F32[1];
     26    float b = myParams->data.F32[2];
     27
     28    return(A * exp(-lambda * x) + b);
     29}
     30
     31float myFunc2Deriv(const psVector *restrict myData,
     32                   const psVector *restrict myParams,
     33                   int whichParamDeriv)
     34{
     35    float x = myData->data.F32[0];
     36    float A = myParams->data.F32[0];
     37    float lambda = myParams->data.F32[1];
     38    float tmp = 0.0;
     39
     40    if (whichParamDeriv == 0) {
     41        tmp = exp(-lambda * x);
     42    } else if (whichParamDeriv == 1) {
     43        tmp = -x * A * exp(-lambda * x);
     44    } else if (whichParamDeriv == 2) {
     45        tmp = 1.0;
     46    }
     47    return(tmp);
     48}
     49
     50
    1651
    1752float myFunc(const psVector *restrict myData,
     
    2459    float C = myParams->data.F32[2];
    2560    float D = myParams->data.F32[3];
     61    float tmp = 0.0;
    2662
    27     return(A + (B*x) + (C*y) + (D*x*y));
     63    tmp = A + (B*x) + (C*y) + (D*x*y);
     64    printf("--------- myFunc((%.1f %.1f) %.1f %.1f %.1f %.1f) is %.1f ---------\n",
     65           x, y, A, B, C, D, tmp);
     66
     67    return(tmp);
    2868}
    2969
     
    4585        tmp = x * y;
    4686    }
     87
     88    printf("--------- myFuncDeriv((%.1f %.1f) %.1f %.1f %.1f %.1f (%d)) is %.1f ---------\n",
     89           x, y, myParams->data.F32[0], myParams->data.F32[1],
     90           myParams->data.F32[2], myParams->data.F32[3], whichParamDeriv, tmp);
    4791    return(tmp);
    4892}
     
    63107    int testStatus = 0;
    64108    int memLeaks = 0;
     109    psVector *theParams = NULL;
    65110
    66111    domain = psImageAlloc(DATA_WIDTH, NUM_DATA, PS_TYPE_F32);
     
    71116    tmpVecPtr = psVectorAlloc(DATA_WIDTH, PS_TYPE_F32);
    72117
    73     printf("FUCK: initialGuess->n is %d\n", initialGuess->n);
    74118    // Build the data.
    75119    initialGuess->data.F32[0] = 2.0;
     
    77121    initialGuess->data.F32[2] = 4.0;
    78122    initialGuess->data.F32[3] = 5.0;
     123
    79124    for (i = 0; i<NUM_DATA; i++) {
    80125        for (j=0; j<DATA_WIDTH; j++) {
     
    83128    }
    84129    for (i = 0; i<NUM_DATA; i++) {
    85         errors->data.F32[i] = 0.1;
     130        errors->data.F32[i] = 1.0;
    86131    }
    87132
     133    printf("========== Setting Data Values ==========\n");
    88134    for (i = 0; i<NUM_DATA; i++) {
    89135        for (j=0; j<DATA_WIDTH; j++) {
    90             tmpVecPtr->data.F32[i] = domain->data.F32[i][j];
     136            tmpVecPtr->data.F32[j] = domain->data.F32[i][j];
    91137        }
    92138        data->data.F32[i] = myFunc(tmpVecPtr, initialGuess);
     139    }
     140
     141    for (i=0;i<NUM_PARAMS;i++) {
     142        initialGuess->data.F32[i] = 1.0;
     143        initialGuess->data.F32[i]+= 10.0;
    93144    }
    94145
     
    97148                            "Calculate Histogram, no mask");
    98149
    99     psMinimizeChi2(myFunc,
    100                    myFuncDeriv,
    101                    domain,
    102                    data,
    103                    errors,
    104                    initialGuess,
    105                    NULL,
    106                    &chiSq);
     150    theParams = psMinimizeChi2(myFunc2,
     151                               myFunc2Deriv,
     152                               domain,
     153                               data,
     154                               errors,
     155                               initialGuess,
     156                               NULL,
     157                               &chiSq);
     158    for (i=0;i<NUM_PARAMS;i++) {
     159        printf("theParams[%d] is %.1f\n", i, theParams->data.F32[i]);
     160    }
     161
     162
    107163
    108164    printf("chiSq is %f\n", chiSq);
Note: See TracChangeset for help on using the changeset viewer.