Matlabユザコミュニティ

MATLAB & 万博1manbetxSimulinkユザコミュニティ向け日本語ブログ

MATLAB + 万博1manbetxSimulinkで複数のシミュレションを一気に実行!

皆さんこんには。トレニングエンジニアの遠藤です。
このブログでは”仿万博1manbetx真软件MATLABとをつなぐ”をコンセプトとして,主に技術的な内容について書いております。

さて,先日いにR2022aがリリ!注目の新機能が盛り沢山で私も楽しくリリスノトを読んでいます。今回の記事で早速それらの機能の紹介!……と行きたいところなのですが,例のごとくリリース直後ということもあって自分でも色々と機能を調査中のため,新機能の紹介はまた別の機会にできればと思います。

ということで,今回はS万博1manbetximulinkとMATLABを繋ぐ大きな理由の一”複数シミュレションの実行にいて解説記事を書いていこうかと思います。いろんなパラメータをスイープさせてシミュレーションを行い結果を比較したい,異なる入力データでシミュレーションを行いモデルの検証をしたいなどなど,複数のシミュレーションを一度に実行したい場面は少なくありません。もちろん手動でモデルを編集して逐次的に実行することもできますが,プログラムで自動化すると非常に効率的にシミュレーションを実行できます。

しかし,複数シミュレーション用の関数は少々使い方に癖があり,MATLABに慣れていない人にとっては少し手を出しづらい部分もあります。そこで,この記事では”パラメータのスイープ”と”異なる入力データの使用“の2つに焦点を当て,複数シミュレーション実行の方法について解説していきたいと思います。

こんな方にオススメ!

  • 最適なパラメタの調査のために,パラメ
  • 色々な入力デタを使ってシミュレションを実行したい
  • 複数コアを用いてシミュレションを並列実行したい

※複、数コアを使ってシミュレーションを並列実行する場合は并行计算工具箱が必要です。この記事で紹介している機能は并行计算工具箱なしでも使用できますが,その場合シミュレーションは逐次実行となります。

1.Parsim関数を用いた複数シミュレション

プログラムで複数シミュレションというと为ルプ+sim卡関数を思い浮かべる方もいらっしゃるかもしれませんが,実はMATLAB R2017aから複数シミュレーション実行用の関数であるparsimが導入されています。この関数を使用すると,より効率的に複数シミュレションを実行できます。

まずはparsim関数の使い方を確認するために,1回のシミュレションを行ってみましょう。parsim関数は sim 関数とは違い、単純にモデル名を指定してシミュレーションを行うということはできず、SimulationInput というオブジェクトを渡してあげる必要があります。SimulationInput オブジェクトは、万博1manbetx仿真软件。SimulationInput関数にモデル名を指定することで作ることができます。

>> in = 万博1manbetxSimulink。SimulationInput (“vdp”);

作ったSimulationInputオブジェクトをparsim関数に渡せばシミュレーションを実行することができます。

>> out = parsim(in)
了=
万博1manbetx仿真软件。SimulationOutput
SimulationMetadata: [1×1 万博1manbetxSimulink.]SimulationMetadata]
ErrorMessage: [0x0 char]

これだけだと面倒くさいだけのsim関数に見えるかもしれませんが,parsim関数の最大の特徴は,Sim万博1manbetxulinkInputオブジェクトの配列を渡してあげることで,その配列分のシミュレーションを行ってくれる点です。

i = 10:-1:1 in(i) = 万博1manbetxSimulink.SimulationInput("vdp");结束

对于ループでSimulationInput配列を作成しました(10から1に減らす方向に为ループしているのは,最初に10個分のメモリを確保するためです。特にメモリを気にしない方は1から10のループでも問題なく動作します)このようにして作った配列をparsimに渡せば,

>> out = parsim(in)
了=
1×10仿万博1manbetx真软件。SimulationOutput配列

10回シミュレションが行われました。ただ,もろん何も設定していないので10回とも同じシミュレションが行われています。この配列の各要素の設定を変更することで,異なるパラメータや入力データを使ったシミュレーションを一気に行うことができますので,早速やり方を確認していきましょう。

2.パラメタのスプ

SimulationInputオブジェクトのsetVariable関数を使用することで,シミュレションに使用されるパラメタを変更することができます。

>> in = in. setvariable (“K”10);

モデル内で使用されているパラメタ名と値をセットで指定します。注意点として,setVariable関数はパラメータの値を変更したSimulationInputオブジェクトを出力引数として返すので,同じ名前の変数(今回は)に入れ直す必要があります。

これを利用して,SimulationInputオブジェクトの配列を作成し,各オブジェクトにそれぞれ異なるパラメータを指定してあげることで,様々なパラメータを用いた並列シミュレーションを行うことができます。

例として,以下のような超簡単なモデルで挙動を確認してみます。

シミュレション結果を確認しやすいように,デト設定も変更しておきます。

このモデルのKを1から10までスparsim関数で実行してみましょう。まずはスプさせる値を配列で作成します。
Ksweep = 1:10;
次にSimulationInputオブジェクトの配列を作成しながら,各要素にKsweepの対応する値をsetVariableでパラメータKに設定します。

i = 10:-1:1 in(i) = 万博1manbetxSimulink。SimulationInput (“myModel”);in(i) = in(i).setVariable(“K”Ksweep(我));结束Out = parsim(in)

对于ループを10から1に減らす方向にしているのは,先に10個分のメモリーを確保するためです。シミュレション結果を確認してみると......

> > (1) .yout (1)
ans =
1
> > (2) .yout (2)
ans =
2

ゃんと各シミュレションごとにゲンが変化していますね。注意点として,对应ルプ内にparsim関数を入れてしまわないように気を。勢いでやってしまいがちですが,それをしてしまうと10 * 10 = 100回シミュレーションしてしまうことになります。

これでパラメ。次は入力デタを複数使用する方法を見ていきましょう。

3.外部入力の変更

SimulationInputオブジェクトのsetExternalInput関数を使用することで,シミュレションの外部入力を各シミュレションごとに変更することもできます。また超簡単なモデルで試してみましょう。

まずは各シミュレションの入力デタを用意します。

T = (0:0.1:10)';U1 = t;U2 = sin(t);U3 = -cos(t);U = {u1,u2,u3};

入力デタはベクトルになることが多いので,セル配列や行列でまとめておくとルプで使いやすくなります。あとはパラメ。

i = 10:-1:1 in(i) = 万博1manbetxSimulink。SimulationInput (“myModel2”);in(i) = in(i).setExternalInput([t,u{i}]);结束Out = parsim(in)

シミュレション結果を確認してみると......

しっかり別々の入力デタが使用されていますね!

4.複数のシミュレションの状況·結果を可視化する

複数の大規模シミュレーションを並列実行している場合,各シミュレーションの進捗状況をリアルタイムに確認できると便利ですよね。シミュレーションマネージャーを使うと,複数シミュレーションの状況を確認したり,シミュレーション結果を簡単に可視化することができます。

使い方は超簡単です。parsim関数でシミュレーションを実行する際に ShowSimulationManager オプションを on にするだけです。

Out = parsim(in,“ShowSimulationManager”“上”

これでシミュレーション実行時にシミュレーションマネージャーが起動し,各シミュレーションの状況を確認できます。

結果ペインの散射や冲浪を使えば特定のパラメータとシミュレーション結果の関係を可視化することも可能です。他にも様々な機能が用意されていますので,詳しく知りたい方はシミュレションマネジャのドキュメントをご確認ください。

5.終わりに

今回はparsim関数を用いた複数シミュレションに。以前の万博1manbetxSimulink APIの記事と同様,MATLAB側で模型万博1manbetx用の関数を使うことで効率化できるタスクはたくさんあります。普段仿万博1manbetx真软件だけを使って業務を行っている方は,MATLABで楽できないか考えてみるのも意外と面白いですよ!

|

댓글

댓글을남기려면링크를클릭하여MathWorks계정에로그하거나계정을새로만드십시오。