Up \Optimization

{@abstract(Levenberg-Marquardt fit and optimization, SVD fit)
author: Nikolai Shokhirev )
created: June 06, 2003)
last modified: January 1, 2004)
ŠNikolai V. Shokhirev, 2001-2003 }
unit uLevenbergMarquardt;

interface

uses
  uMatTypes, uTensors, uArrays, uAlgUtils, uTensorUtils;

type
  FitFunction = function(x: TFloat; const P: ITensor1D): TFloat;
  FitGradient = procedure(x: TFloat; const P, GP: ITensor1D);

  OptimFunction = function(const P: ITensor1D): TFloat;
  OptimDerivatives = procedure(const P, GP: ITensor1D; const HP: ITensor2D);

{ Levenberg-Marquardt fit }
procedure LMFit(F: FitFunction; G: FitGradient; const Xe, Fe, W: ITensor1D;
            const P0: ITensor1D; epsP, epsG: TFloat; var deltaP, deltaG: TFloat;
            var err: TInt; Factor: TFloat = 8.0; IterMax: TInt = 999);

{ Fit using SVD}
procedure SVDFit(F: FitFunction; G: FitGradient; const Xe, Fe, W: ITensor1D;
            const P0: ITensor1D; epsP, epsG: TFloat; var deltaP, deltaG: TFloat;
            var err: TInt; NoiseLevel: TFloat = MinFloat; IterMax: TInt = 999);

{ Levenberg-Marquardt optimization }
procedure LMOptim(F: OptimFunction; GH: OptimDerivatives;
            const P0: ITensor1D; epsP, epsG: TFloat; var deltaP, deltaG: TFloat;
            var err: TInt; Factor: TFloat = 8.0; IterMax: TInt = 999);

implementation


end.

Up \Optimization