青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
PlantAssistant - Translate AVEVA RVM/SP3D VUE to glTF, STEP, etc.
posts - 606, comments - 590, trackbacks - 0, articles - 0

Levmar:Levenberg-Marquardt非線性最小二乘算法

eryar@163.com

Abstract. Levmar is GPL native ANSI C implementations of the Levenberg-Marquardt optimization algorithm.The blog focus on the compilation of levmar on Windows with Visual Studio.

Key Words. Levmar, C, LM least squares

1. levmar簡(jiǎn)介

Gauss-Newton算法是一個(gè)古老的處理非線性最小二乘問(wèn)題的方法。該方法在迭代過(guò)程中要求矩陣J(x)滿秩。為了克服這個(gè)困難,Levenberg(1944)提出了一種新的方法,但未受到重視。后來(lái)Marquardt(1963)又重新提出,并在理論上進(jìn)行了控討,得到Levenberg-Marquardt方法,簡(jiǎn)稱LM方法。在此基礎(chǔ)上,F(xiàn)letcher(1971)對(duì)其實(shí)現(xiàn)策略進(jìn)行了改進(jìn),得到了Levenberg-Marquardt-Fletcher方法(LMF)。再后來(lái),More(1978)將LM方法與信賴域方法結(jié)合,建立了帶信賴域的LM方法。

LM算法的產(chǎn)生主要是解決曲線最小二乘擬合問(wèn)題,現(xiàn)在很多軟件使用LM算法來(lái)解決通用的曲線擬合問(wèn)題。

本文主要介紹GPL開源庫(kù)levmar2.6使用Visual Studio在Windows上進(jìn)行編譯。這個(gè)開源庫(kù)的官方網(wǎng)站是:http://users.ics.forth.gr/~lourakis/levmar/

wps_clip_image-24963

2. 編譯levmar

下載源碼levmar-2.6解壓,在其README.txt中對(duì)levmar的授權(quán)GPL、編譯等進(jìn)行了說(shuō)明。在Windows操作系統(tǒng)中,可以使用nmake /f Makefile.vc來(lái)編譯levmar和一個(gè)示例程序。

從官網(wǎng)介紹可知,levmar有些算法依賴LAPACK庫(kù),一個(gè)線性代數(shù)計(jì)算開源庫(kù)。所以如果要使用那些算法,編譯的時(shí)候必須包含這個(gè)庫(kù)。從示例程序的源文件lmdemo.c中可以看出,有些問(wèn)題的求解是需要LAPACK庫(kù)的,相關(guān)源碼列出如下:

  /* uncomment the appropriate line below to select a minimization problem */
  problem=
          //0; // Rosenbrock function
          //1; // modified Rosenbrock problem
          //2; // Powell's function
      //3; // Wood's function
          4; // Meyer's (reformulated) problem
          //5; // Osborne's problem
      //6; // helical valley function
#ifdef HAVE_LAPACK
      //7; // Boggs & Tolle's problem 3
      //8; // Hock - Schittkowski problem 28
      //9; // Hock - Schittkowski problem 48
      //10; // Hock - Schittkowski problem 51
#else // no LAPACK
#ifdef _MSC_VER
#pragma message("LAPACK not available, some test problems cannot be used")
#else
#warning LAPACK not available, some test problems cannot be used
#endif // _MSC_VER
#endif /* HAVE_LAPACK */
      //11; // Hock - Schittkowski problem 01
      //12; // Hock - Schittkowski modified problem 21
      //13; // hatfldb problem
      //14; // hatfldc problem
      //15; // equilibrium combustion problem
#ifdef HAVE_LAPACK
      //16; // Hock - Schittkowski modified #1 problem 52
      //17; // Schittkowski modified problem 235
      //18; // Boggs & Tolle modified problem #7
      //19; // Hock - Schittkowski modified #2 problem 52
      //20; // Hock - Schittkowski modified problem #76"
#endif /* HAVE_LAPACK */
  switch(problem){
  default: fprintf(stderr, "unknown problem specified (#%d)! Note that some minimization problems require LAPACK.\n", problem);
           exit(1);
    break;

從上述源碼可知,如果LAPACK庫(kù)不可用的時(shí)候,示例程序中的問(wèn)題

l 7 Boggs & Tolle’s problem 3

l 8 Hock - Schittkowski problem 28

l 9 Hock - Schittkowski problem 48

l 10 Hock - Schittkowski problem 51

l 16 Hock - Schittkowskit modified #1 problem 52

l 17 Schittkowski modified problem 235

l 18 Boggs & Tolle modified problem #7

l 19 Hock - Schittkowski modified #2 problem 52

l 20 Hock - Schittkowski modified probem #76

這些問(wèn)題的求解功能是不能使用的。從頭文件levmar.h中要以看出,

#ifdef LM_DBL_PREC
/* double precision LM, with & without Jacobian */
/* unconstrained minimization */
extern int dlevmar_der(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      void (*jacf)(double *p, double *j, int m, int n, void *adata),
      double *p, double *x, int m, int n, int itmax, double *opts,
      double *info, double *work, double *covar, void *adata);
extern int dlevmar_dif(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      double *p, double *x, int m, int n, int itmax, double *opts,
      double *info, double *work, double *covar, void *adata);
/* box-constrained minimization */
extern int dlevmar_bc_der(
       void (*func)(double *p, double *hx, int m, int n, void *adata),
       void (*jacf)(double *p, double *j, int m, int n, void *adata),  
       double *p, double *x, int m, int n, double *lb, double *ub, double *dscl,
       int itmax, double *opts, double *info, double *work, double *covar, void *adata);
extern int dlevmar_bc_dif(
       void (*func)(double *p, double *hx, int m, int n, void *adata),
       double *p, double *x, int m, int n, double *lb, double *ub, double *dscl,
       int itmax, double *opts, double *info, double *work, double *covar, void *adata);
#ifdef HAVE_LAPACK
/* linear equation constrained minimization */
extern int dlevmar_lec_der(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      void (*jacf)(double *p, double *j, int m, int n, void *adata),
      double *p, double *x, int m, int n, double *A, double *b, int k,
      int itmax, double *opts, double *info, double *work, double *covar, void *adata);
extern int dlevmar_lec_dif(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      double *p, double *x, int m, int n, double *A, double *b, int k,
      int itmax, double *opts, double *info, double *work, double *covar, void *adata);
/* box & linear equation constrained minimization */
extern int dlevmar_blec_der(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      void (*jacf)(double *p, double *j, int m, int n, void *adata),
      double *p, double *x, int m, int n, double *lb, double *ub, double *A, double *b, int k, double *wghts,
      int itmax, double *opts, double *info, double *work, double *covar, void *adata);
extern int dlevmar_blec_dif(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      double *p, double *x, int m, int n, double *lb, double *ub, double *A, double *b, int k, double *wghts,
      int itmax, double *opts, double *info, double *work, double *covar, void *adata);
/* box, linear equations & inequalities constrained minimization */
extern int dlevmar_bleic_der(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      void (*jacf)(double *p, double *j, int m, int n, void *adata),
      double *p, double *x, int m, int n, double *lb, double *ub,
      double *A, double *b, int k1, double *C, double *d, int k2,
      int itmax, double *opts, double *info, double *work, double *covar, void *adata);
extern int dlevmar_bleic_dif(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      double *p, double *x, int m, int n, double *lb, double *ub, 
      double *A, double *b, int k1, double *C, double *d, int k2,
      int itmax, double *opts, double *info, double *work, double *covar, void *adata);
/* box & linear inequality constraints */
extern int dlevmar_blic_der(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      void (*jacf)(double *p, double *j, int m, int n, void *adata),
      double *p, double *x, int m, int n, double *lb, double *ub, double *C, double *d, int k2,
      int itmax, double opts[4], double info[LM_INFO_SZ], double *work, double *covar, void *adata);
extern int dlevmar_blic_dif(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      double *p, double *x, int m, int n, double *lb, double *ub, double *C, double *d, int k2,
      int itmax, double opts[5], double info[LM_INFO_SZ], double *work, double *covar, void *adata);
/* linear equation & inequality constraints */
extern int dlevmar_leic_der(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      void (*jacf)(double *p, double *j, int m, int n, void *adata),
      double *p, double *x, int m, int n, double *A, double *b, int k1, double *C, double *d, int k2,
      int itmax, double opts[4], double info[LM_INFO_SZ], double *work, double *covar, void *adata);
extern int dlevmar_leic_dif(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      double *p, double *x, int m, int n, double *A, double *b, int k1, double *C, double *d, int k2,
      int itmax, double opts[5], double info[LM_INFO_SZ], double *work, double *covar, void *adata);
/* linear inequality constraints */
extern int dlevmar_lic_der(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      void (*jacf)(double *p, double *j, int m, int n, void *adata),
      double *p, double *x, int m, int n, double *C, double *d, int k2,
      int itmax, double opts[4], double info[LM_INFO_SZ], double *work, double *covar, void *adata);
extern int dlevmar_lic_dif(
      void (*func)(double *p, double *hx, int m, int n, void *adata),
      double *p, double *x, int m, int n, double *C, double *d, int k2,
      int itmax, double opts[5], double info[LM_INFO_SZ], double *work, double *covar, void *adata);
#endif /* HAVE_LAPACK */
#endif /* LM_DBL_PREC */

從頭文件levmar.h中的代碼可以看出,在#ifdef HAVE_LAPACK和#endif /* HAVE_LAPACK */之間的函數(shù)都是不可用的。除此之外的函數(shù)是可用的,如基本的dlevmar_der和dlevmar_dif等函數(shù)是不依賴LAPACK庫(kù)的。如果只使用這幾個(gè)函數(shù),則可以不用配置LAPACK庫(kù),編譯levmar就很簡(jiǎn)單了。

如果不使用LAPACK庫(kù),可以先在頭文件levmar.h中把#define HAVE_LAPACK 這一行注釋掉:

wps_clip_image-1378

然后再修改Makefile.vc文件,在Makefile.vc中可以看到如下圖所示一句注釋,即當(dāng)不使用LAPACK庫(kù)是,把那一行注釋掉(前面加#):

wps_clip_image-511

這時(shí)就可以啟動(dòng)Visual Studio的編譯器CL來(lái)編譯levmar庫(kù)了。配置好編譯環(huán)境的命令工具從Visual Studio的菜單來(lái)啟動(dòng):

wps_clip_image-31275

要編譯32位的levmar庫(kù),可以使用x86的命令工具,要編譯64位的levmar,可以使用x64的命令工具。啟動(dòng)命令工具后,切換到levmar源碼文件夾,并輸入命令

nmake /f Makefile.vc

如下圖所示:

wps_clip_image-5008

編譯成功生成levmar.lib和lmdemo.exe說(shuō)明編譯成功了。

wps_clip_image-7636

接著在命令窗口中運(yùn)行l(wèi)mdemo.exe,測(cè)試levmar例子程序。如果lmdemo正常運(yùn)行,說(shuō)明levmar已經(jīng)成功編譯。

自己的程序如果要使用levmar,就可以像使用其他開源庫(kù)一樣,設(shè)置頭文件路徑及庫(kù)levmar.lib的路徑,就可以使用了。

wps_clip_image-10013


為了方便大家在移動(dòng)端也能看到我的博文和討論交流,現(xiàn)已注冊(cè)微信公眾號(hào),歡迎大家掃描下方二維碼關(guān)注。
Shing Liu(eryar@163.com)


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线免费观看成人网| 欧美性色综合| 亚洲欧美精品在线| 亚洲国产精品一区二区尤物区| 亚洲男同1069视频| 亚洲国产日韩欧美在线图片| 国产精品一区视频| 欧美精品福利| 久久一区二区三区av| 亚洲性夜色噜噜噜7777| 亚洲啪啪91| 欧美暴力喷水在线| 久久久国产视频91| 亚洲欧美综合一区| 99精品视频网| 亚洲全黄一级网站| 一区二区三区在线免费观看| 国产欧美日韩亚州综合| 欧美三级乱人伦电影| 欧美区二区三区| 欧美国产日产韩国视频| 免费视频最近日韩| 久久婷婷色综合| 久久久www成人免费精品| 欧美亚洲免费在线| 亚洲欧美成人网| 午夜精品久久久久久99热| 亚洲网站视频福利| 一区二区三区欧美| 亚洲精品影院| 日韩视频一区| 一区二区三区四区精品| av成人国产| 中国女人久久久| 亚洲一区中文| 欧美一级成年大片在线观看| 欧美有码在线观看视频| 欧美在线电影| 两个人的视频www国产精品| 久久精品亚洲| 美脚丝袜一区二区三区在线观看 | 欧美一级理论片| 欧美一区国产二区| 久久久久久**毛片大全| 两个人的视频www国产精品| 免费成人在线观看视频| 欧美成人国产| 欧美午夜国产| 国产热re99久久6国产精品| 国产精品影片在线观看| 国产一区999| 亚洲国产成人不卡| 亚洲精品之草原avav久久| 日韩一区二区高清| 亚洲女同同性videoxma| 欧美一区二区三区在线免费观看| 久久天天躁狠狠躁夜夜爽蜜月| 欧美a级一区| 亚洲精品一区二| 亚洲免费在线电影| 欧美在线视频免费观看| 久久最新视频| 国产精品xxxav免费视频| 国产欧美日韩亚洲一区二区三区| 尤物九九久久国产精品的分类| 亚洲最黄网站| 久久国产黑丝| 亚洲国产日韩一区二区| 亚洲一区二区精品| 亚洲精品久久久久久久久| 日韩午夜av在线| 久久国产精品第一页| 免费在线国产精品| 日韩一本二本av| 久久久精彩视频| 欧美揉bbbbb揉bbbbb| 国产一区二区观看| 99视频精品全部免费在线| 欧美在线你懂的| 亚洲精品国产视频| 香蕉成人伊视频在线观看| 欧美成人四级电影| 国产免费一区二区三区香蕉精| 亚洲国产成人精品女人久久久 | 亚洲一区制服诱惑| 另类综合日韩欧美亚洲| 国产精品免费aⅴ片在线观看| 亚洲国产精品久久久久婷婷老年| 亚洲欧美另类在线| 欧美激情一区二区三区全黄 | 一区免费观看| 亚洲一区二区av电影| 免播放器亚洲一区| 亚洲免费在线视频| 欧美老女人xx| 亚洲国产精品嫩草影院| 欧美一区二区三区免费观看| 亚洲精品一区中文| 久久夜色精品| 国产一区二区视频在线观看| 亚洲一区图片| 91久久久亚洲精品| 久久乐国产精品| 国产麻豆精品theporn| 一区二区三区**美女毛片| 免费成人网www| 欧美在线视频播放| 国产精品国产精品| 亚洲精品视频免费在线观看| 久久在线精品| 性做久久久久久久久| 欧美调教视频| 一区二区三区.www| 91久久精品www人人做人人爽| 久久综合狠狠综合久久激情| 极品尤物av久久免费看| 欧美一区二区在线免费播放| 一区二区三区欧美在线| 欧美日韩精品综合| 日韩视频一区| 亚洲国产黄色| 欧美激情视频一区二区三区免费| 亚洲国产一区二区视频| 欧美gay视频| 另类av导航| 最新成人av在线| 亚洲电影免费观看高清完整版在线观看 | 久久高清国产| 亚洲欧美欧美一区二区三区| 国产精品女主播| 亚洲欧美在线网| 亚洲午夜精品久久| 国产精品夜色7777狼人| 欧美一级专区免费大片| 亚洲一区二区视频在线| 国产精品一区久久久| 久久gogo国模啪啪人体图| 午夜欧美电影在线观看| 国产亚洲视频在线| 久久婷婷国产综合国色天香| 久久免费视频这里只有精品| 亚洲国产精品第一区二区| 亚洲国产精品999| 欧美精品久久一区二区| 亚洲午夜小视频| 亚洲综合日本| 海角社区69精品视频| 欧美jizzhd精品欧美巨大免费| 欧美电影在线观看完整版| 一区二区电影免费观看| 亚洲视频中文| 国产亚洲人成网站在线观看| 免费中文字幕日韩欧美| 欧美精品精品一区| 午夜精品视频在线观看| 欧美有码视频| 亚洲美女免费精品视频在线观看| 亚洲日本成人网| 国产精品福利在线| 久久全球大尺度高清视频| 免费视频一区| 日韩一区二区高清| 亚洲欧美韩国| 亚洲激情视频在线观看| 一区二区精品| 精品成人在线视频| 亚洲欧洲精品一区二区三区波多野1战4| 欧美日韩精品综合| 久久精品亚洲精品| 免费成人在线视频网站| 亚洲女女女同性video| 久久av资源网站| 老司机精品视频网站| 亚洲视频在线播放| 久久国产夜色精品鲁鲁99| 一本大道久久a久久综合婷婷| 亚洲欧美成人| 亚洲伦理精品| 久久国产黑丝| 亚洲永久精品大片| 久久麻豆一区二区| 亚洲视频一区在线观看| 久久理论片午夜琪琪电影网| 亚洲在线观看视频网站| 久久天堂成人| 欧美在线中文字幕| 欧美国产先锋| 美女视频网站黄色亚洲| 国产精品久久午夜夜伦鲁鲁| 亚洲国产高清自拍| 国产一区二区三区观看 | 一区二区免费在线视频| 久久不射中文字幕| 亚洲性人人天天夜夜摸| 美女啪啪无遮挡免费久久网站| 久久国产一区二区| 欧美久久婷婷综合色| 欧美成人免费播放| 国产一区深夜福利| 一区二区三区国产在线观看|