亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美精品久久99久久在免费线| www.亚洲免费av| 一区二区三区成人| 亚洲免费av观看| 亚洲影院免费观看| 亚洲成人黄色影院| 奇米影视在线99精品| 美腿丝袜一区二区三区| 久久精品久久久精品美女| 久久精品国产**网站演员| 久久成人麻豆午夜电影| 国产99精品国产| 91猫先生在线| 3d动漫精品啪啪1区2区免费| 欧美日本一道本| 欧美不卡123| 中文字幕不卡在线观看| 一区二区三区成人| 国产在线视视频有精品| 99久久久国产精品免费蜜臀| 91丨九色丨黑人外教| 欧美午夜精品电影| 日韩欧美在线综合网| 久久精品网站免费观看| 一区二区三区在线观看欧美| 日韩黄色在线观看| 成人午夜激情在线| 欧美日韩一区二区不卡| 久久香蕉国产线看观看99| 国产精品乱码妇女bbbb| 亚洲国产精品影院| 粉嫩av一区二区三区在线播放| 99精品久久久久久| 欧美成人一区二区三区| 综合久久国产九一剧情麻豆| 日本欧美加勒比视频| 99久久久无码国产精品| 欧美一区二区三区免费大片 | 久久久久99精品国产片| 亚洲免费视频中文字幕| 国产一区91精品张津瑜| 欧美午夜精品久久久| 国产精品萝li| 激情成人午夜视频| 在线播放欧美女士性生活| 亚洲人吸女人奶水| 国产精品1区二区.| 日韩欧美一级在线播放| 亚洲综合图片区| 国产成人av一区二区| 69堂国产成人免费视频| 亚洲精品成人a在线观看| 丰满少妇在线播放bd日韩电影| 日韩欧美成人一区二区| 亚洲在线一区二区三区| 91浏览器在线视频| 国产精品色眯眯| 懂色av噜噜一区二区三区av| 精品国产乱码久久久久久闺蜜 | 国产欧美综合在线观看第十页| 日韩经典一区二区| 欧美日韩国产一级二级| 亚洲在线免费播放| 91黄视频在线| 亚洲一区自拍偷拍| 欧美三级日本三级少妇99| 亚洲免费在线电影| 91看片淫黄大片一级| 亚洲婷婷综合久久一本伊一区| 国产不卡在线视频| 国产日韩欧美亚洲| 成人免费黄色大片| 国产人伦精品一区二区| 国产成人综合在线播放| 国产人成亚洲第一网站在线播放| 国产在线精品一区二区三区不卡| 欧美大片一区二区三区| 激情伊人五月天久久综合| 日韩欧美激情一区| 国产成人综合视频| 国产精品欧美一区喷水| 不卡区在线中文字幕| 国产精品成人一区二区艾草| 成人在线综合网| 亚洲男人的天堂在线aⅴ视频| 91丨九色丨蝌蚪富婆spa| 亚洲制服丝袜av| 91精品国产91久久综合桃花 | 91麻豆视频网站| 亚洲一区二区三区不卡国产欧美| 欧美日韩国产高清一区二区 | 亚洲精品视频一区二区| 色婷婷精品久久二区二区蜜臂av| 樱桃国产成人精品视频| 欧美人xxxx| 黄一区二区三区| 亚洲色图视频免费播放| 欧美三区免费完整视频在线观看| 免费在线欧美视频| 国产视频视频一区| 欧美自拍偷拍一区| 理论片日本一区| 日韩美女久久久| 日韩欧美国产精品| 99re免费视频精品全部| 日韩和的一区二区| 中文字幕不卡一区| 欧美四级电影在线观看| 久久99精品久久久久久动态图 | 五月激情丁香一区二区三区| 日韩色视频在线观看| 91丨九色丨蝌蚪丨老版| 狠狠色狠狠色合久久伊人| 亚洲免费色视频| 亚洲精品一区二区三区福利| 91福利区一区二区三区| 国产成人激情av| 三级不卡在线观看| 一区二区在线观看视频在线观看| 欧美日韩国产不卡| 成人毛片视频在线观看| 蜜臀av一区二区| 亚洲精品国产精华液| 国产清纯在线一区二区www| 欧美二区乱c少妇| av一区二区不卡| 国产精品一区二区视频| 日韩一区精品视频| 一区二区三区免费网站| 中文字幕中文字幕一区二区| 69成人精品免费视频| 91福利社在线观看| 99久久er热在这里只有精品15 | 亚洲一区二区影院| 亚洲三级免费电影| 国产精品毛片久久久久久| 精品成人a区在线观看| 欧美一区2区视频在线观看| 91蜜桃在线观看| 91在线无精精品入口| 成人sese在线| 国产福利一区二区三区视频在线 | 欧美日韩国产首页| 色综合天天视频在线观看| 丰满岳乱妇一区二区三区| 国产一区二区三区黄视频 | 夜夜嗨av一区二区三区四季av| 欧美激情一区二区三区蜜桃视频| 26uuuu精品一区二区| 91精品国产手机| 日韩亚洲欧美成人一区| 日韩欧美国产一区二区三区 | 五月天婷婷综合| 日韩和的一区二区| 久久99日本精品| 国产精品亚洲第一区在线暖暖韩国 | 福利一区二区在线| 成人午夜看片网址| 99久久国产综合精品麻豆| 91视频91自| 欧美精品三级日韩久久| 欧美一区中文字幕| 亚洲精品在线电影| 国产精品视频看| 亚洲自拍偷拍九九九| 日本怡春院一区二区| 久久丁香综合五月国产三级网站| 国产在线不卡一卡二卡三卡四卡| 国产成人在线视频播放| 91老师国产黑色丝袜在线| 精品视频一区二区不卡| 日韩视频一区二区在线观看| 国产亚洲精品久| 亚洲视频中文字幕| 日av在线不卡| 成人国产精品免费| 欧美日韩亚洲高清一区二区| 日韩精品一区二区三区三区免费| 久久久久久亚洲综合| 亚洲摸摸操操av| 久久电影国产免费久久电影 | 久久福利资源站| 99热在这里有精品免费| 欧美精品v国产精品v日韩精品| 欧美精品一区二区久久婷婷| 亚洲男人电影天堂| 国产一区二区三区四区五区美女| 不卡免费追剧大全电视剧网站| 欧美群妇大交群的观看方式| 国产亚洲精久久久久久| 视频一区在线视频| 成人ar影院免费观看视频| 欧美精品日韩综合在线| 一区在线播放视频| 理论电影国产精品| 欧美精品日韩精品| 亚洲三级理论片| 青青草91视频| 欧美专区在线观看一区| 亚洲不卡av一区二区三区|