Changeset 1123 for trunk/psLib/test/dataManip/tst_psMinimize00.c
- Timestamp:
- Jun 28, 2004, 7:38:54 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/test/dataManip/tst_psMinimize00.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/test/dataManip/tst_psMinimize00.c
r1103 r1123 11 11 #include "psFunctions.h" 12 12 #include "psMinimize.h" 13 #include <math.h> 13 14 #define NUM_DATA 10 14 15 #define DATA_WIDTH 2 15 16 #define NUM_PARAMS 4 17 18 // The function is f(x) = (A * e^(lambda x)) + b 19 20 float 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 31 float 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 16 51 17 52 float myFunc(const psVector *restrict myData, … … 24 59 float C = myParams->data.F32[2]; 25 60 float D = myParams->data.F32[3]; 61 float tmp = 0.0; 26 62 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); 28 68 } 29 69 … … 45 85 tmp = x * y; 46 86 } 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); 47 91 return(tmp); 48 92 } … … 63 107 int testStatus = 0; 64 108 int memLeaks = 0; 109 psVector *theParams = NULL; 65 110 66 111 domain = psImageAlloc(DATA_WIDTH, NUM_DATA, PS_TYPE_F32); … … 71 116 tmpVecPtr = psVectorAlloc(DATA_WIDTH, PS_TYPE_F32); 72 117 73 printf("FUCK: initialGuess->n is %d\n", initialGuess->n);74 118 // Build the data. 75 119 initialGuess->data.F32[0] = 2.0; … … 77 121 initialGuess->data.F32[2] = 4.0; 78 122 initialGuess->data.F32[3] = 5.0; 123 79 124 for (i = 0; i<NUM_DATA; i++) { 80 125 for (j=0; j<DATA_WIDTH; j++) { … … 83 128 } 84 129 for (i = 0; i<NUM_DATA; i++) { 85 errors->data.F32[i] = 0.1;130 errors->data.F32[i] = 1.0; 86 131 } 87 132 133 printf("========== Setting Data Values ==========\n"); 88 134 for (i = 0; i<NUM_DATA; i++) { 89 135 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]; 91 137 } 92 138 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; 93 144 } 94 145 … … 97 148 "Calculate Histogram, no mask"); 98 149 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 107 163 108 164 printf("chiSq is %f\n", chiSq);
Note:
See TracChangeset
for help on using the changeset viewer.
