概要
Fitting関数としてLabVIEWには、非制限カーブフィット法(LM:レーベンバーグマルカート法(微分を使います))がパッケージとして入っています。
このほかに、最適化法の中にダウンヒルシンプレックス法(NM:Simplex法(微分を使いません))とGO:大域的最適化(遺伝的アルゴリズムを使っています)があります。
この3つのViの使い方についてサンプルです。(主にリファレンス関数の使い方。)
詳細
指数関数より作成したData(ノイズも入っています。)を、元の指数関数を使って3つの方法で最適値を求めます。
それぞれの、Fitting関数の特徴は、LabVIEWのHelpを参照してください。(よく書かれています。)
Model関数(タイプ定義Static Vi Reference)の書き方の参考になればと思います。
LM:レーベンバーグマルカート法(微分を使います)
NM:Simplex法(微分を使いません)
(制限・非制限によってModel関数の書き方が変わります。コネクターペーンも変わっています。注意してください)
GO:大域的最適化(遺伝的アルゴリズムを使っています)
(再入実行で並列化処理もできます。)
NM法の使い方ついては、以下のURLを参照しました。
http://forums.ni.com/t5/LabVIEW/complicated-curve-fitting/td-p/1748948/page/2
実装・実行方法
Exponential Fit.lvprojを開いてください。(必ずプロジェクトから開いてください。)
LM,NM,GOのサンプル
(Fit Main using LM&NM&GO.vi)
1. デフォルトのままViを実行してください。右側のグラフに最適化の結果が表示されます。
2. 初期値、制約条件などを変えていくつか試してみてください。
GO再入実行のサンプル
(GO Fit Main.vi)
1. デフォルトのままViを実行してください。右側のグラフに最適化の結果が表示されます。
2. 反復回数などを変えていくつか試してみてください。
(GOのリファレンス関数:simple exponential model Global Optim.viはViプロパティーから再入実行にしています。またこの中で使われているsimple exponential.viも再入実行になっています。)
Viの静的・動的呼び出しのサンプル
(静的・動的呼び出し.vi)
1. デフォルトのままViを実行してください。ブロックダイアグラムを確認してください。
必要なもの
ソフトウェア
・LabVIEW 2013 Developer Suitで作成しています。開発パッケージ以降には最適化やFittingの関数が入っているかと思います。(不確か)
ハードウェア
なし
VIスニペット
添付のVIスペルニットをブロックダイアグラム上に張り付けるとプログラムが再利用できます。
Main
GO Main
LM Model
NM Model
GO Model
Exp. Function
呼び出し
NIコミュニティのサンプルコード交換のサンプルコードは、MIT Licenseによりライセンス供与されています。