Matlabユザコミュニティ

MATLAB & 金宝appSimulinkユ,ザ,コミュニティ,向け日本語ブログ

MATLAB + 金宝appSimulinkで複数のシミュレ,ションを一気に実行!

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

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

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

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

こんな方にオススメ!

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

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

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

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

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

>> in = 金宝appSimulink。SimulationInput (“vdp”);

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

>> out = parsim(in)
了=
金宝app仿真软件。SimulationOutput
SimulationMetadata: [1×1 金宝appSimulink.]SimulationMetadata]
ErrorMessage: [0x0 char]

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

i = 10:-1:1 in(i) = 金宝appSimulink.SimulationInput("vdp");结束

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

>> out = parsim(in)
了=
1×10仿金宝app真软件。SimulationOutput配列

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

2.パラメタのスプ

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

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

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

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

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

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

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

i = 10:-1:1 in(i) = 金宝appSimulink。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 = sint;U3 = -cos(t);U = {u1,u2,u3};

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

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

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

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

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

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

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

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

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

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

5.終わりに

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

|

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。