00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef PS_MINIMIZE_H
00018 #define PS_MINIMIZE_H
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "psVector.h"
00029 #include "psMemory.h"
00030 #include "psArray.h"
00031 #include "psImage.h"
00032 #include "psMatrix.h"
00033 #include "psPolynomial.h"
00034 #include "psSpline.h"
00035 #include "psStats.h"
00036 #include "psTrace.h"
00037 #include "psError.h"
00038 #include "psConstants.h"
00039
00040
00041
00042
00043
00044 typedef struct
00045 {
00046 const int maxIter;
00047 const float tol;
00048 float value;
00049 int iter;
00050 float lastDelta;
00051 }
00052 psMinimization;
00053
00054 #define P_PSMINIMIZATION_SET_MAXITER(m,val) *(int*)&m->maxIter = val
00055 #define P_PSMINIMIZATION_SET_TOL(m,val) *(float*)&m->tol = val
00056
00057
00058
00059
00060
00061
00062 psMinimization *psMinimizationAlloc(
00063 int maxIter,
00064 float tol
00065 );
00066
00067
00068
00069
00070
00071
00072
00073 bool psMemCheckMinimization(
00074 psPtr ptr
00075 );
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 psPolynomial1D *psVectorFitPolynomial1D(
00093 psPolynomial1D *poly,
00094 const psVector *mask,
00095 psMaskType maskValue,
00096 const psVector *f,
00097 const psVector *fErr,
00098 const psVector *x
00099 );
00100
00101 psPolynomial2D *psVectorFitPolynomial2D(
00102 psPolynomial2D *poly,
00103 const psVector *mask,
00104 psMaskType maskValue,
00105 const psVector *f,
00106 const psVector *fErr,
00107 const psVector *x,
00108 const psVector *y
00109 );
00110
00111 psPolynomial3D *psVectorFitPolynomial3D(
00112 psPolynomial3D *poly,
00113 const psVector *mask,
00114 psMaskType maskValue,
00115 const psVector *f,
00116 const psVector *fErr,
00117 const psVector *x,
00118 const psVector *y,
00119 const psVector *z
00120 );
00121
00122 psPolynomial4D *psVectorFitPolynomial4D(
00123 psPolynomial4D *poly,
00124 const psVector *mask,
00125 psMaskType maskValue,
00126 const psVector *f,
00127 const psVector *fErr,
00128 const psVector *x,
00129 const psVector *y,
00130 const psVector *z,
00131 const psVector *t
00132 );
00133
00134
00135 psPolynomial1D *psVectorClipFitPolynomial1D(
00136 psPolynomial1D *poly,
00137 psStats *stats,
00138 const psVector *mask,
00139 psMaskType maskValue,
00140 const psVector *f,
00141 const psVector *fErr,
00142 const psVector *x
00143 );
00144
00145 psPolynomial2D *psVectorClipFitPolynomial2D(
00146 psPolynomial2D *poly,
00147 psStats *stats,
00148 const psVector *mask,
00149 psMaskType maskValue,
00150 const psVector *f,
00151 const psVector *fErr,
00152 const psVector *x,
00153 const psVector *y
00154 );
00155
00156 psPolynomial3D *psVectorClipFitPolynomial3D(
00157 psPolynomial3D *poly,
00158 psStats *stats,
00159 const psVector *mask,
00160 psMaskType maskValue,
00161 const psVector *f,
00162 const psVector *fErr,
00163 const psVector *x,
00164 const psVector *y,
00165 const psVector *z
00166 );
00167
00168 psPolynomial4D *psVectorClipFitPolynomial4D(
00169 psPolynomial4D *poly,
00170 psStats *stats,
00171 const psVector *mask,
00172 psMaskType maskValue,
00173 const psVector *f,
00174 const psVector *fErr,
00175 const psVector *x,
00176 const psVector *y,
00177 const psVector *z,
00178 const psVector *t
00179 );
00180
00181
00182
00183
00184
00185
00186
00187 typedef
00188 float (*psMinimizeLMChi2Func)(
00189 psVector *deriv,
00190 const psVector *params,
00191 const psVector *x
00192 );
00193
00194
00195
00196
00197
00198 bool psMinimizeLMChi2(
00199 psMinimization *min,
00200 psImage *covar,
00201 psVector *params,
00202 const psVector *paramMask,
00203 const psArray *x,
00204 const psVector *y,
00205 const psVector *yErr,
00206 psMinimizeLMChi2Func func
00207 );
00208
00209 bool psMinimizeGaussNewtonDelta (
00210 psVector *delta,
00211 const psVector *params,
00212 const psVector *paramMask,
00213 const psArray *x,
00214 const psVector *y,
00215 const psVector *yErr,
00216 psMinimizeLMChi2Func func
00217 );
00218
00219
00220
00221
00222
00223 psF64 p_psMinLM_SetABX (
00224 psImage *alpha,
00225 psVector *beta,
00226 const psVector *params,
00227 const psVector *paramMask,
00228 const psArray *x,
00229 const psVector *y,
00230 const psVector *dy,
00231 psMinimizeLMChi2Func func
00232 );
00233
00234
00235
00236
00237
00238
00239
00240
00241 typedef
00242 float (*psMinimizePowellFunc)(
00243 const psVector *params,
00244 const psArray *coords
00245 );
00246
00247
00248
00249
00250
00251 bool psMinimizePowell(
00252 psMinimization *min,
00253 psVector *params,
00254 const psVector *paramMask,
00255 const psArray *coords,
00256 psMinimizePowellFunc func
00257 );
00258
00259
00260
00261
00262
00263
00264 typedef
00265 psVector *(*psMinimizeChi2PowellFunc)(
00266 const psVector *params,
00267 const psArray *coords
00268 );
00269
00270
00271
00272
00273
00274 bool psMinimizeChi2Powell(
00275 psMinimization *min,
00276 psVector *params,
00277 const psVector *paramMask,
00278 const psArray *coords,
00279 const psVector *value,
00280 const psVector *error,
00281 psMinimizeChi2PowellFunc model
00282 );
00283
00284
00285
00286
00287
00288 bool psGaussJordan(
00289 psImage *a,
00290 psVector *b
00291 );
00292
00293
00294
00295
00296
00297
00298 #endif // #ifndef PS_MINIMIZE_H
00299