亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? optim.pas

?? Delphi 的數學控件
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
{ **********************************************************************
  *                            Unit OPTIM.PAS                          *
  *                             Version 2.4d                           *
  *                     (c) J. Debord, February 2003                   *
  **********************************************************************
  This unit implements the following methods for function minimization:

    * Golden search for a function of one variable
    * Simplex, Marquardt, BFGS for a function of several variables
  **********************************************************************
  References:
  1) 'Numerical Recipes' by Press et al.
  2) D. W. MARQUARDT, J. Soc. Indust. Appl. Math., 1963, 11, 431-441
  3) J. A. NELDER & R. MEAD, Comput. J., 1964, 7, 308-313
  4) R. O'NEILL, Appl. Statist., 1971, 20, 338-345
  ********************************************************************** }

unit optim;

interface

uses
  fmath, matrices;

{ **********************************************************************
  Error codes
  ********************************************************************** }

const
  OPT_OK         =   0;  { No error }
  OPT_SING       = - 1;  { Singular hessian matrix }
  OPT_BIG_LAMBDA = - 2;  { Too high Marquardt's parameter }
  OPT_NON_CONV   = - 3;  { Non-convergence }

{ **********************************************************************
  Functional types
  ********************************************************************** }

type
  { Procedure to compute gradient vector }
  TGradient = procedure(Func           : TFuncNVar;
                        X              : TVector;
                        Lbound, Ubound : Integer;
                        G              : TVector);

  { Procedure to compute gradient vector and hessian matrix }
  THessGrad = procedure(Func           : TFuncNVar;
                        X              : TVector;
                        Lbound, Ubound : Integer;
                        G              : TVector;
                        H              : TMatrix);

{ **********************************************************************
  Log file
  ********************************************************************** }

const
  WriteLogFile : Boolean = False;        { Write iteration info to log file }
  LogFileName  : String  = 'optim.log';  { Name of log file }

{ **********************************************************************
  Minimization routines
  ********************************************************************** }

function GoldSearch(Func           : TFunc;
                    A, B           : Float;
                    MaxIter        : Integer;
                    Tol            : Float;
                    var Xmin, Ymin : Float) : Integer;
{ ----------------------------------------------------------------------
  Performs a golden search for the minimum of function Func
  ----------------------------------------------------------------------
  Input parameters  : Func    = objective function
                      A, B    = two points near the minimum
                      MaxIter = maximum number of iterations
                      Tol     = required precision (should not be less than
                                the square root of the machine precision)
  ----------------------------------------------------------------------
  Output parameters : Xmin, Ymin = coordinates of minimum
  ----------------------------------------------------------------------
  Possible results  : OPT_OK
                      OPT_NON_CONV
  ---------------------------------------------------------------------- }

function LinMin(Func           : TFuncNVar;
                X, DeltaX      : TVector;
                Lbound, Ubound : Integer;
                MaxIter        : Integer;
                Tol            : Float;
                var F_min      : Float) : Integer;

{ ----------------------------------------------------------------------
  Minimizes function Func from point X in the direction specified by
  DeltaX
  ----------------------------------------------------------------------
  Input parameters  : Func    = objective function
                      X       = initial minimum coordinates
                      DeltaX  = direction in which minimum is searched
                      Lbound,
                      Ubound  = indices of first and last variables
                      MaxIter = maximum number of iterations
                      Tol     = required precision
  ----------------------------------------------------------------------
  Output parameters : X     = refined minimum coordinates
                      F_min = function value at minimum
  ----------------------------------------------------------------------
  Possible results  : OPT_OK
                      OPT_NON_CONV
  ---------------------------------------------------------------------- }

function Simplex(Func           : TFuncNVar;
                 X              : TVector;
                 Lbound, Ubound : Integer;
                 MaxIter        : Integer;
                 Tol            : Float;
                 var F_min      : Float) : Integer;
{ ----------------------------------------------------------------------
  Minimization of a function of several variables by the simplex method
  of Nelder and Mead
  ----------------------------------------------------------------------
  Input parameters  : Func    = objective function
                      X       = initial minimum coordinates
                      Lbound,
                      Ubound  = indices of first and last variables
                      MaxIter = maximum number of iterations
                      Tol     = required precision
  ----------------------------------------------------------------------
  Output parameters : X     = refined minimum coordinates
                      F_min = function value at minimum
  ----------------------------------------------------------------------
  Possible results : OPT_OK
                     OPT_NON_CONV
  ---------------------------------------------------------------------- }

procedure NumGradient(Func           : TFuncNVar;
                      X              : TVector;
                      Lbound, Ubound : Integer;
                      G              : TVector);
{ ----------------------------------------------------------------------
  Computes the gradient vector of a function of several variables by
  numerical differentiation
  ----------------------------------------------------------------------
  Input parameters  : Func    = function of several variables
                      X       = vector of variables
                      Lbound,
                      Ubound  = indices of first and last variables
  ----------------------------------------------------------------------
  Output parameter  : G       = gradient vector
  ---------------------------------------------------------------------- }

procedure NumHessGrad(Func           : TFuncNVar;
                      X              : TVector;
                      Lbound, Ubound : Integer;
                      G              : TVector;
                      H              : TMatrix);
{ ----------------------------------------------------------------------
  Computes gradient vector & hessian matrix by numerical differentiation
  ----------------------------------------------------------------------
  Input parameters  : as in NumGradient
  ----------------------------------------------------------------------
  Output parameters : G = gradient vector
                      H = hessian matrix
  ---------------------------------------------------------------------- }

function Marquardt(Func           : TFuncNVar;
                   HessGrad       : THessGrad;
                   X              : TVector;
                   Lbound, Ubound : Integer;
                   MaxIter        : Integer;
                   Tol            : Float;
                   var F_min      : Float;
                   H_inv          : TMatrix) : Integer;
{ ----------------------------------------------------------------------
  Minimization of a function of several variables by Marquardt's method
  ----------------------------------------------------------------------
  Input parameters  : Func     = objective function
                      HessGrad = procedure to compute gradient & hessian
                      X        = initial minimum coordinates
                      Lbound,
                      Ubound   = indices of first and last variables
                      MaxIter  = maximum number of iterations
                      Tol      = required precision
  ----------------------------------------------------------------------
  Output parameters : X     = refined minimum coordinates
                      F_min = function value at minimum
                      H_inv = inverse hessian matrix
  ----------------------------------------------------------------------
  Possible results  : OPT_OK
                      OPT_SING
                      OPT_BIG_LAMBDA
                      OPT_NON_CONV
  ---------------------------------------------------------------------- }

function BFGS(Func           : TFuncNVar;
              Gradient       : TGradient;
              X              : TVector;
              Lbound, Ubound : Integer;
              MaxIter        : Integer;
              Tol            : Float;
              var F_min      : Float;
              H_inv          : TMatrix) : Integer;
{ ----------------------------------------------------------------------
  Minimization of a function of several variables by the
  Broyden-Fletcher-Goldfarb-Shanno method
  ----------------------------------------------------------------------
  Parameters : Gradient = procedure to compute gradient vector
               Other parameters as in Marquardt
  ----------------------------------------------------------------------
  Possible results : OPT_OK
                     OPT_NON_CONV
  ---------------------------------------------------------------------- }

implementation

var
  Eps              : Float;      { Fractional increment for numer. derivation }
  X1               : TVector;    { Initial point for line minimization }
  DeltaX1          : TVector;    { Direction for line minimization }
  Xt               : TVector;    { Minimum found by line minimization }
  Lbound1, Ubound1 : Integer;    { Bounds of X1 and DeltaX1 }
  LinObjFunc       : TFuncNVar;  { Objective function for line minimization }
  LogFile          : Text;       { Stores the result of each minimization step }


  procedure MinBrack(Func : TFunc; var A, B, C, Fa, Fb, Fc : Float);
{ ----------------------------------------------------------------------
  Given two points (A, B) this procedure finds a triplet (A, B, C)
  such that:

  1) A < B < C
  2) A, B, C are within the golden ratio
  3) Func(B) < Func(A) and Func(B) < Func(C).

  The corresponding function values are returned in Fa, Fb, Fc
  ---------------------------------------------------------------------- }

  begin
    if A > B then
      Swap(A, B);
    Fa := Func(A);
    Fb := Func(B);
    if Fb > Fa then
      begin
        Swap(A, B);
        Swap(Fa, Fb);
      end;
    C := B + GOLD * (B - A);
    Fc := Func(C);
    while Fc < Fb do
      begin
        A := B;
        B := C;
        Fa := Fb;
        Fb := Fc;
        C := B + GOLD * (B - A);
        Fc := Func(C);
      end;
    if A > C then
      begin
        Swap(A, C);
        Swap(Fa, Fc);
      end;
  end;

  function GoldSearch(Func           : TFunc;
                      A, B           : Float;
                      MaxIter        : Integer;
                      Tol            : Float;
                      var Xmin, Ymin : Float) : Integer;
  var
    C, Fa, Fb, Fc, F1, F2, MinTol, X0, X1, X2, X3 : Float;
    Iter                                          : Integer;
  begin
    MinTol := Sqrt(MACHEP);
    if Tol < MinTol then Tol := MinTol;
    MinBrack(Func, A, B, C, Fa, Fb, Fc);
    X0 := A;
    X3 := C;
    if (C - B) > (B - A) then
      begin
        X1 := B;
        X2 := B + CGOLD * (C - B);
        F1 := Fb;
        F2 := Func(X2);
      end
    else
      begin
        X1 := B - CGOLD * (B - A);
        X2 := B;
        F1 := Func(X1);
        F2 := Fb;
      end;
    Iter := 0;
    while (Iter <= MaxIter) and (Abs(X3 - X0) > Tol * (Abs(X1) + Abs(X2))) do
      if F2 < F1 then
        begin
          X0 := X1;
          X1 := X2;
          F1 := F2;
          X2 := X1 + CGOLD * (X3 - X1);
          F2 := Func(X2);
          Inc(Iter);
        end
      else
        begin
          X3 := X2;
          X2 := X1;
          F2 := F1;
          X1 := X2 - CGOLD * (X2 - X0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区二区在线| 日韩片之四级片| 美日韩一级片在线观看| 亚洲视频免费观看| 久久久久国产成人精品亚洲午夜| 欧美一级国产精品| 欧美日韩小视频| 欧美日韩大陆一区二区| 成人国产精品免费网站| 亚洲啪啪综合av一区二区三区| 五月综合激情婷婷六月色窝| 免费观看成人鲁鲁鲁鲁鲁视频| 丁香激情综合国产| 国产精品护士白丝一区av| 91九色最新地址| 免费在线观看精品| 亚洲国产精品二十页| 日本精品一区二区三区四区的功能| 亚洲成人综合在线| 久久色在线观看| 91麻豆高清视频| 免费观看日韩av| 国产精品久久久久久久久动漫| 在线观看日韩电影| 久久激情综合网| 中文字幕一区不卡| 911精品国产一区二区在线| 国产精品综合一区二区| 一区二区三区在线视频观看| 欧美大片日本大片免费观看| www.日韩在线| 日韩av高清在线观看| 国产精品美女久久久久久久久 | 成人午夜激情影院| 亚洲自拍偷拍图区| 精品国产第一区二区三区观看体验| 成人h精品动漫一区二区三区| 亚洲成人第一页| 国产三级三级三级精品8ⅰ区| 欧美性受xxxx黑人xyx性爽| 国产精品资源在线看| 亚洲综合在线观看视频| 久久久久成人黄色影片| 欧美日韩国产成人在线91| 国产成人精品一区二区三区四区| 亚洲一区二区在线免费看| 久久久久免费观看| 欧美日韩精品一区二区天天拍小说| 国产精品77777| 日韩极品在线观看| 综合精品久久久| 亚洲精品在线三区| 欧美日韩一本到| 欧美电影一区二区| 中文字幕亚洲在| 日韩精品在线看片z| 色哟哟一区二区| 国产精品系列在线播放| 欧美a一区二区| 亚洲无人区一区| 国产精品久久久久久久久果冻传媒 | 伊人夜夜躁av伊人久久| 亚洲精品在线观看视频| 欧美日韩免费在线视频| 99久久婷婷国产综合精品电影 | 亚洲在线视频免费观看| 国产精品卡一卡二卡三| 精品国产制服丝袜高跟| 欧美日韩精品专区| 一本到不卡免费一区二区| 成人污视频在线观看| 国内成+人亚洲+欧美+综合在线| 日韩制服丝袜av| 伊人夜夜躁av伊人久久| 中文字幕一区二区三区在线播放| 久久青草欧美一区二区三区| 69av一区二区三区| 欧美少妇性性性| 在线免费观看不卡av| 91影院在线免费观看| 成人国产精品免费观看动漫| 国产在线精品一区二区不卡了 | 亚洲美女屁股眼交3| 欧美激情综合网| 欧美日韩中文一区| 中文字幕一区在线| 国产 欧美在线| 精品成人一区二区| 麻豆国产欧美日韩综合精品二区| 色婷婷精品久久二区二区蜜臀av| 久久久久国产精品麻豆ai换脸 | 26uuu精品一区二区在线观看| 亚洲一区二区免费视频| 成人深夜视频在线观看| 欧美经典一区二区三区| 久久99精品视频| 欧美电影免费观看高清完整版在线 | 午夜av一区二区三区| 91一区二区在线观看| 老司机精品视频导航| 欧美日韩mp4| 国产精品区一区二区三区| 精品影院一区二区久久久| 日韩精品一区二区在线观看| 久久国产夜色精品鲁鲁99| 日韩一区二区不卡| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美精品v国产精品v日韩精品 | 国产成人精品一区二 | 欧美伊人精品成人久久综合97| 色综合色综合色综合色综合色综合| 高清不卡一二三区| 91麻豆精品国产91久久久更新时间| 综合婷婷亚洲小说| 在线视频国产一区| 成人小视频在线观看| 亚洲女性喷水在线观看一区| 国产精品美女久久久久aⅴ| 中文字幕精品一区二区精品绿巨人| 激情综合网最新| 国产精品影视网| 国产成人高清视频| 成人美女在线观看| 国产成人aaa| 91小视频免费观看| 欧美在线一区二区| 欧美久久婷婷综合色| 日韩欧美一级片| 亚洲精品一区二区精华| 久久久99久久| 中文字幕日本乱码精品影院| 亚洲精品免费在线| 香蕉av福利精品导航| 久久国产视频网| 成人一区二区三区在线观看| 色综合久久久久综合体| 欧美人狂配大交3d怪物一区| 欧美va亚洲va| 国产精品美女久久久久久2018| 樱花草国产18久久久久| 日本人妖一区二区| 国产福利精品一区| 一本一道久久a久久精品| 欧美日韩国产三级| 久久午夜电影网| 中文字幕视频一区二区三区久| 亚洲第一搞黄网站| 精品中文av资源站在线观看| 波多野结衣精品在线| 欧美日韩在线精品一区二区三区激情| 欧美一区二区三区在线观看| 久久精品人人做人人爽人人| 亚洲免费在线视频一区 二区| 日韩中文字幕av电影| 国产激情视频一区二区三区欧美 | 久久亚洲精精品中文字幕早川悠里| 国产精品国产成人国产三级| 午夜久久久影院| 国产一区二区久久| 欧美在线观看你懂的| 欧美成人三级在线| 欧美三级中文字幕在线观看| av福利精品导航| 日韩一区二区在线观看视频播放| 成人av在线播放网址| 国产精品伊人色| 高清免费成人av| 丁香婷婷深情五月亚洲| 国产主播一区二区| 极品尤物av久久免费看| 久久国产尿小便嘘嘘尿| 婷婷成人激情在线网| 天堂av在线一区| 日本中文字幕一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲成人av一区二区| 亚洲成人av资源| 日韩高清在线观看| 久久99久国产精品黄毛片色诱| 美女尤物国产一区| 欧洲精品视频在线观看| 欧美疯狂做受xxxx富婆| 亚洲丝袜制服诱惑| 国产 日韩 欧美大片| 91免费视频网址| 99亚偷拍自图区亚洲| 91麻豆国产福利在线观看| 色婷婷久久久亚洲一区二区三区| 欧美系列在线观看| 91精品国产aⅴ一区二区| 日韩午夜三级在线| 国产欧美日本一区视频| 中文字幕在线观看不卡| 亚洲一区在线观看视频| 日本一区中文字幕| 国产一区二区三区观看| 久久精品一区二区| 不卡的av电影| 中文字幕在线一区二区三区| 亚洲黄色免费电影|