Nigelコード生成【数学的処理】

Tips

スポンサーリンク

この記事では、LabVIEW2026Q3バージョンから可能になった、Nigelによるコード生成機能について、アルゴリズム絡みファイル添付機能を活用した使用例を紹介しています。

なお、Nigelによるコード生成の基本的な使い方については以下の記事を参考にしてみてください。

また、今回の記事で扱っている内容の実際の操作の様子は以下のビデオでも紹介しています。

スポンサーリンク

この記事で紹介している数学的処理とは

今回の記事では、数学的処理が絡んだプログラムを生成した例を紹介しています。

計測器を制御するのに強いLabVIEWは、計測器で取得したデータを解析するのにも使えます。

そのため、様々な数学的な解析処理のための関数も数多くそろっているのですが、どこにどのような関数があるか、関数が見つかったとしてどのように使えばいいのかわからない、という場合もあります。

Nigelに対して、特定の処理を行いたいことを伝えてそれが実現できるようなコードの生成をお願いすることにより、普段使い慣れていないような関数を使ったコードが生成されたり、あるいは複雑な関数を使わなくてもこんな風に実装できる、というプログラム開発のヒントになります。

今回試すのは、比較的わかりやすい処理ばかりだと思いますが、より複雑な(専門的な)コード生成も試せるとは思うので、まずはこの記事で紹介しているようなシンプルな処理内容をテーマに「どうプロンプトを与えると目的の処理を実装したコードを作ってくれるか」を試行錯誤してみてください。

数学的処理絡みのコード生成指示例

では、数学的処理絡みのコード生成の指示の例を紹介していきます。

最適なフィッティングを求めるコードの生成

最初は、指定したファイルに入っているデータをフィッティングする際に、どのフィッティングモデルが最適化を求めるプログラムの生成です。

フィッティングの候補は、線形、指数関数、ガウシアンの3つにしぼり、ファイルからデータを読み取ってフィッティングをかけ、どれが最もデータを良く再現できるかを調べさせます。

またフィッティングの式も表してもらうようにしました。

使ったプロンプトの例を挙げます。

CSVの測定データを読み込み、線形・指数・ガウシアンでフィットし、最も誤差の小さいモデルを表示するVIを作成してください。

指定したcsvファイルの1列目に対象の測定データが保存されているものとします。

各フィッティングを行った際の数式も表示してください。

生成後、csvファイルにそのまま貼れる、テスト用の測定データ例も示してください。

試すデータもNigelが生成してくれたので、それをcsvファイルに貼りつけ(csvファイルを用意するところは手動)ました。

結果、最終的には以下のようなプログラムを生成してくれました。

ブロックダイアグラムは大きいですが、やっていることは、各フィッティングに対する関数を使用してその適合度を調べ、最も適合度が高いフィッティング形式を選ぶ、という処理をしているだけです。

フィットの適合度関数(Goodness of Fit)は今まで使ったことがなく、フィッティングの良し悪しを決めるために使える関数だと初めて知りました。

こんな風に、Nigelによるコード生成で、それまで使ったことのなかった関数を知れるというのも、今後に活かせる知識となる点で有用だと思います。

2変数関数の最小値を求めるコードの生成

次の例は、2つの変数を持つ関数を対象に、その関数の最小値を求めるプログラムの生成です。

2つの変数を持つ関数とは、例えば

f(x, y) = (x + 1) ^ 2 + (y – 2) ^ 2

のようなものをさし、xとyを変更したときに、このf(x, y)がとる最小値を求めるということになります(この式で言えば、x = -1、y = 2の時に最小値0となる)。

以下のようなプロンプトを試しました。

2変数の目的関数の最小値を探索し、探索結果をグラフ表示するVIを作成してください。

生成後、VIの性能を確かめるために、VIの制御器に入力するべき値の例を示してください。生成時に制御器にあらかじめ値の例をデフォルト値として入力しておけるのであれば入力しておいてください。

結果、以下のようなコードが生成されました。

自分が知らない、専用の関数があってそれを使って実装するのかと思いきや、計算としては、xとyをある範囲で決めたステップ数毎に変えて最小値を求めるという、泥臭い計算処理を行うプログラムが生成されました。

欠損データの補間を行うコードの生成

続いては、欠損のあるデータ群に対して補間処理を行うコードの生成です。

欠損データがあることの判断はフィッティングに依るため、既に紹介したフィッティングの例と似ているかと思いきや、補間のための関数が存在するので、そちらを使ったプログラムが生成されるかを試しました。

プロンプトとしては以下のようにしています。

欠損のある測定データを補間し、線形、スプライン、多項式の結果を比較表示するVIを作成してください。

生成後、VIの性能を確かめるための測定データの例を示してください。

結果、以下のようなコードが生成されました。

ブロックダイアグラムではそれぞれの補間形式に対して補間の関数が使われ期待したとおりの結果となりました。

シミュレーションを行うコードの生成

最後は、ある動作を行う系のシミュレーションを行うプログラムの生成です。

プロンプトとして以下のようなものをNigelに渡しました。

2次の質量ばねダンパ系を常微分方程式でシミュレートし、時間応答を表示するviを作成してください。時間応答の様子については必要に応じてグラフで表示できるようにしてください。

最初に渡したプロンプトは上記の通りですが、系の様子をピクチャでアニメーションとして表示するような指示も出したところ、以下のようなviが生成されました。

実行後にはグラフに時間応答の様子を描画できるようになっています。

ピクチャ表示があるためブロックダイアグラムはどうしても大きくなりがちですが、数値演算処理の部分だけを見るとそこまで複雑ではありません。

(常微分方程式を解いているというよりは、ひたすら時間刻み幅ごとに値を算出しているだけではありますが)

本記事では、Nigelによるコード生成について特にアルゴリズムが絡んだ例をいくつか紹介しました。

LabVIEWには数学的な処理を行うための関数が揃っている一方で、どれをつかったらいいかわからない、どう使ったらいいかわからない、というケースも多々あります。

Nigelにコード生成させることでそれぞれの関数の使い方や、その関数をテストするのに入れるべき値の例を示してもらうことで、自分自身の学びにもなるので、何かの処理の仕方に迷った時には試しにNigelにコードを作ってもらって参考にする、という使い方の参考になればと思います。

ここまで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました