サンプルコードとドキュメント

LM Fitting の途中経過表示(Fitting Progress Monitor)

コードとドキュメント

添付

LM Fitting の途中経過表示(Fitting Progress Monitor)

概要

パッケージに入っている非制限カーブフィット法(LM:レーベンバーグマルカート法)では、Fittingの最終結果のみが出力されます。

パラメータの少ないFittingでは、Fittingに時間がかからないために問題にはなりませんが、パラメータの多いFittingでは時間がかかるために途中経過確認したいということが考えられます。また、途中でFittingを中止したいことも考えられます。

これを実現するためには、パッケージとして入っているViに改良を加えました。途中表示に使用したのは、名前付きノーティファイアです。ノーティファイアはキューとは異なり最新値のみを送ります。

詳細

指数関数より作成したData(ノイズも入っています。)を、元の指数関数を使って非線形カーブフィティングを行います。

パッケージにある非線形カーブフィティングViを丸々コピーして、ブロックダイアグラム中にノーティファイアを配置しました。

実装・実行方法

LM Fit Notifireプロジェクトを開いてください。(必ずプロジェクトから開いてください。)

LM Fitting Demo Sample

LM Fit Notifier Test Slow main.viを開いてください。

  1. デフォルトのままViを実行してください。表示用Viが呼び出され途中経過がグラフに表示されます。また、途中で中止したい場合は停止ボタンを押してください。
  2. 初期値、制約条件などを変えていくつか試してみてください。

それぞれのブロックダイアグラムを確認してください。

Slowの名前が入っているViでは途中経過を見やすくするために、Whileループの中に待機関数が置かれています。

LM Fit Notifier Test main.viを開いてください。

このサンプルには待機関数が入っていません。そのためにほとんど途中経過を見ることができないと思います。

待機関数の入っていないViのセットもプロジェクトの中に入っています。

非制限カーブフィティング

送る側:NonLM_Fit_Send

受け取り側:NonLM_Fit_Receive

制限カーブフィティング

送る側:LM_Fit_Send

受け取り側:LM_Fit_Receive

パラメータの多いフィティングのプログラムでは、待機関数の入っていないViを使ってください。

また、パラメータが多く初期値を見つけることが大変な場合は、以前に投稿した大域的最適化Viを使って初期値を見つけた後に、この非線形カーブフィティングを使うとよいと思います。

必要なもの

ソフトウェア

・LabVIEW 2013 Developer Suitで作成しています。開発パッケージ以降には最適化やFittingの関数が入っているかと思います。(不確か)

ハードウェア

なし

VIスニペット

Test Slow Main.pngSend_Slow.pngReceive_Slow.png

NIコミュニティのサンプルコード交換のサンプルコードは、MIT Licenseによりライセンス供与されています。

寄稿者