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
00055
00056
00057
00058 psMinimization *psMinimizationAlloc(
00059 int maxIter,
00060 float tol
00061 );
00062
00063
00064
00065
00066
00067
00068
00069 bool psMemCheckMinimization(
00070 psPtr ptr
00071 );
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088 psPolynomial1D *psVectorFitPolynomial1D(
00089 psPolynomial1D *poly,
00090 const psVector *mask,
00091 psMaskType maskValue,
00092 const psVector *f,
00093 const psVector *fErr,
00094 const psVector *x
00095 );
00096
00097 psPolynomial2D *psVectorFitPolynomial2D(
00098 psPolynomial2D *poly,
00099 const psVector *mask,
00100 psMaskType maskValue,
00101 const psVector *f,
00102 const psVector *fErr,
00103 const psVector *x,
00104 const psVector *y
00105 );
00106
00107 psPolynomial3D *psVectorFitPolynomial3D(
00108 psPolynomial3D *poly,
00109 const psVector *mask,
00110 psMaskType maskValue,
00111 const psVector *f,
00112 const psVector *fErr,
00113 const psVector *x,
00114 const psVector *y,
00115 const psVector *z
00116 );
00117
00118 psPolynomial4D *psVectorFitPolynomial4D(
00119 psPolynomial4D *poly,
00120 const psVector *mask,
00121 psMaskType maskValue,
00122 const psVector *f,
00123 const psVector *fErr,
00124 const psVector *x,
00125 const psVector *y,
00126 const psVector *z,
00127 const psVector *t
00128 );
00129
00130
00131 psPolynomial1D *psVectorClipFitPolynomial1D(
00132 psPolynomial1D *poly,
00133 psStats *stats,
00134 const psVector *mask,
00135 psMaskType maskValue,
00136 const psVector *f,
00137 const psVector *fErr,
00138 const psVector *x
00139 );
00140
00141 psPolynomial2D *psVectorClipFitPolynomial2D(
00142 psPolynomial2D *poly,
00143 psStats *stats,
00144 const psVector *mask,
00145 psMaskType maskValue,
00146 const psVector *f,
00147 const psVector *fErr,
00148 const psVector *x,
00149 const psVector *y
00150 );
00151
00152 psPolynomial3D *psVectorClipFitPolynomial3D(
00153 psPolynomial3D *poly,
00154 psStats *stats,
00155 const psVector *mask,
00156 psMaskType maskValue,
00157 const psVector *f,
00158 const psVector *fErr,
00159 const psVector *x,
00160 const psVector *y,
00161 const psVector *z
00162 );
00163
00164 psPolynomial4D *psVectorClipFitPolynomial4D(
00165 psPolynomial4D *poly,
00166 psStats *stats,
00167 const psVector *mask,
00168 psMaskType maskValue,
00169 const psVector *f,
00170 const psVector *fErr,
00171 const psVector *x,
00172 const psVector *y,
00173 const psVector *z,
00174 const psVector *t
00175 );
00176
00177
00178
00179
00180
00181
00182
00183 typedef
00184 float (*psMinimizeLMChi2Func)(
00185 psVector *deriv,
00186 const psVector *params,
00187 const psVector *x
00188 );
00189
00190
00191
00192
00193
00194 bool psMinimizeLMChi2(
00195 psMinimization *min,
00196 psImage *covar,
00197 psVector *params,
00198 const psVector *paramMask,
00199 const psArray *x,
00200 const psVector *y,
00201 const psVector *yErr,
00202 psMinimizeLMChi2Func func
00203 );
00204
00205 bool psMinimizeGaussNewtonDelta (
00206 psVector *delta,
00207 const psVector *params,
00208 const psVector *paramMask,
00209 const psArray *x,
00210 const psVector *y,
00211 const psVector *yErr,
00212 psMinimizeLMChi2Func func
00213 );
00214
00215
00216
00217
00218
00219 psBool p_psMinLM_GuessABP(
00220 psImage *Alpha,
00221 psVector *Beta,
00222 psVector *Params,
00223 const psImage *alpha,
00224 const psVector *beta,
00225 const psVector *params,
00226 const psVector *paramMask,
00227 psF64 lambda
00228
00229 );
00230
00231
00232
00233
00234
00235 psF64 p_psMinLM_SetABX (
00236 psImage *alpha,
00237 psVector *beta,
00238 const psVector *params,
00239 const psVector *paramMask,
00240 const psArray *x,
00241 const psVector *y,
00242 const psVector *dy,
00243 psMinimizeLMChi2Func func
00244 );
00245
00246
00247
00248
00249
00250
00251
00252
00253 typedef
00254 float (*psMinimizePowellFunc)(
00255 const psVector *params,
00256 const psArray *coords
00257 );
00258
00259
00260
00261
00262
00263 bool psMinimizePowell(
00264 psMinimization *min,
00265 psVector *params,
00266 const psVector *paramMask,
00267 const psArray *coords,
00268 psMinimizePowellFunc func
00269 );
00270
00271
00272
00273
00274
00275
00276 typedef
00277 psVector *(*psMinimizeChi2PowellFunc)(
00278 const psVector *params,
00279 const psArray *coords
00280 );
00281
00282
00283
00284
00285
00286 bool psMinimizeChi2Powell(
00287 psMinimization *min,
00288 psVector *params,
00289 const psVector *paramMask,
00290 const psArray *coords,
00291 const psVector *value,
00292 const psVector *error,
00293 psMinimizeChi2PowellFunc model
00294 );
00295
00296
00297
00298
00299
00300 bool psGaussJordan(
00301 psImage *a,
00302 psVector *b
00303 );
00304
00305
00306
00307
00308
00309
00310 #endif // #ifndef PS_MINIMIZE_H
00311