Changeset 2250 for trunk/psLib/test/dataManip/tst_psMinimize07.c
- Timestamp:
- Nov 1, 2004, 1:57:08 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/test/dataManip/tst_psMinimize07.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/test/dataManip/tst_psMinimize07.c
r2248 r2250 10 10 #define N 24 11 11 #define NUM_PARAMS 2 12 #define MEAN 8.513 #define STDEV 1. 512 #define MEAN 14.5 13 #define STDEV 1.2 14 14 15 15 float expectedParm[NUM_PARAMS]; 16 16 psS32 testStatus = true; 17 17 18 psVector *genGaussianVector() 18 // This routine generates a vector of length "n" with the specified mean and 19 // stdev. 20 psVector *genGaussianVector(int n, float mean, float stdev) 19 21 { 20 psVector *y = psVectorAlloc( N, PS_TYPE_F32);22 psVector *y = psVectorAlloc(n, PS_TYPE_F32); 21 23 22 for (psS32 i=0;i< N;i++) {23 y->data.F32[i] = psGaussian((float) i, MEAN, STDEV, false);24 for (psS32 i=0;i<n;i++) { 25 y->data.F32[i] = psGaussian((float) i, mean, stdev, false); 24 26 } 25 27 return(y); 26 28 } 27 29 28 psVector *myFunc(psVector *params, 29 psArray *coords) 30 { 31 PS_PTR_CHECK_NULL(coords, NULL); 32 PS_PTR_CHECK_NULL(params, NULL); 33 34 float x; 35 int i; 36 float mean = params->data.F32[0]; 37 float stdev = params->data.F32[1]; 38 psVector *out = psVectorAlloc(coords->n, PS_TYPE_F32); 39 40 for (i=0;i<coords->n;i++) { 41 x = ((psVector *) (coords->data[i]))->data.F32[0]; 42 out->data.F32[i] = psGaussian(x, mean, stdev, false); 43 } 44 45 return(out); 46 } 47 30 // This routine tries to fit a Gaussian to a set of data points via the 31 // psMinimizeLMChi2() and psMinimizeLMChi2Gauss1D() functions. 48 32 psS32 t00() 49 33 { … … 56 40 psMinimization *min; 57 41 58 psTraceSetLevel(".psLib.dataManip.psMinimize", 6); 59 psTraceSetLevel(".psLib.dataManip.p_psDetermineBracket", 0); 42 psTraceSetLevel(".psLib.dataManip.psMinimize", 0); 60 43 /************************************************************************** 61 44 *************************************************************************/ … … 63 46 myCovar = psImageAlloc(NUM_PARAMS, NUM_PARAMS, PS_TYPE_F32); 64 47 myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32); 65 myParams->data.F32[0] = (float) (N/2);66 myParams->data.F32[1] = 0.5;48 myParams->data.F32[0] = MEAN * 0.7; 49 myParams->data.F32[1] = STDEV * 0.7; 67 50 myCoords = psArrayAlloc(N); 68 psVector *y = genGaussianVector( );51 psVector *y = genGaussianVector(N, MEAN, STDEV); 69 52 70 53 for (i=0;i<N;i++) { 71 54 myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32); 72 55 ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) i; 56 printf("Initial data %d: (%f, %f)\n", i, ((psVector *) (myCoords->data[i]))->data.F32[0], y->data.F32[i]); 73 57 } 74 58 … … 105 89 } 106 90 91 // This routine tries to fit a Gaussian to a set of data points via the 92 // psMinimizeChi2Powell() function. 107 93 psS32 t01() 108 94 { … … 115 101 psMinimization *min; 116 102 117 psTraceSetLevel(".psLib.dataManip.psMinimizePowell", 10); 118 psTraceSetLevel(".psLib.dataManip.myPowellChi2Func", 10); 103 psTraceSetLevel(".psLib.dataManip.psMinimize", 0); 104 psTraceSetLevel(".psLib.dataManip.psMinimizeLMChi2Gauss1D", 0); 105 106 psTraceSetLevel(".psLib.dataManip.psMinimizePowell", 0); 107 psTraceSetLevel(".psLib.dataManip.myPowellChi2Func", 0); 108 psTraceSetLevel(".psLib.dataManip.p_psLineMin", 0); 109 psTraceSetLevel(".psLib.dataManip.p_psDetermineBracket", 0); 119 110 psTraceSetLevel(".psLib.dataManip.psFunctions.psGaussian", 0); 120 111 psTraceSetLevel(".psLib.dataManip.psFunctions", 0); 121 psTraceSetLevel(".", 10);122 psTracePrintLevels();112 psTraceSetLevel(".", 0); 113 // psTracePrintLevels(); 123 114 /************************************************************************** 124 115 *************************************************************************/ … … 126 117 myCovar = psImageAlloc(NUM_PARAMS, NUM_PARAMS, PS_TYPE_F32); 127 118 myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32); 128 myParams->data.F32[0] = (float) (N/2); 129 myParams->data.F32[0] = 2.0 * MEAN; 130 myParams->data.F32[1] = 0.5; 131 myParams->data.F32[1] = 1.5 * STDEV; 119 myParams->data.F32[0] = MEAN * 0.7; 120 myParams->data.F32[1] = STDEV * 0.7; 132 121 myCoords = psArrayAlloc(N); 133 psVector *y = genGaussianVector( );122 psVector *y = genGaussianVector(N, MEAN, STDEV); 134 123 135 124 for (i=0;i<N;i++) { 136 125 myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32); 137 126 ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) i; 127 printf("Initial data %d: (%f, %f)\n", i, ((psVector *) (myCoords->data[i]))->data.F32[0], y->data.F32[i]); 138 128 } 139 129 130 // psMinimizeChi2Powell(min, myParams, NULL, myCoords, y, NULL, 131 // (psMinimizeChi2PowellFunc) myFunc); 140 132 psMinimizeChi2Powell(min, myParams, NULL, myCoords, y, NULL, 141 (psMinimizeChi2PowellFunc) myFunc);133 (psMinimizeChi2PowellFunc) psMinimizePowellChi2Gauss1D); 142 134 143 135 printf("\nThe chi-squared is %f\n", min->value);
Note:
See TracChangeset
for help on using the changeset viewer.
