MATLABユーザーコミュニティー

MATLAB& Simulink ユーザーコミュニティー向け日本語ブログ

MATLAB+ Simulink で複数のシミュレーションを一気に実行!

皆さんこんはトレーニングエンジニアの远藤。。
simulink 万博1manbetxsimulinkとmatlabををををとして,,に技术技术的な内容について书い书いててて

r2022aが,ががリリースさたね!新机能新机能がが盛り盛り盛り沢山沢山で私も楽しくリリーススノートノートノートを読んででいいますますます今回今回今回记事でででででででででで早速例の直后いうこともあっでもと机能机能を调查调查中中ののためため新机能新机能绍介绍介绍介はははまたまたまた

simulink si万博1manbetxmulinkとmatlabををを系ぐ大きな理由一つ「「「复数シミュレーションの実行」解说书いていこうか思い思い。いろんなパラメータをせせててシミュレーションシミュレーションをを行いをを比较ししたいたい异なる异なる入力データでで行い行い行い検证検证検证検证検证検证検证をををはあり。もちろん手动でモデル编集し逐次に実行するすることこともももできできますががプログラムで自动自动化化するするとと非常

,复数用关数は少々使い方に癖がありありありありありににに惯れ惯れてていい人にとっては少し少し手手ををづらいづらいももあり。そこそこ,,,,,,,のつにをて,シミュレーション実行方法についてしていきたいとと。。。

こんな方に!

  • 最適なパラメータの調査のために、パラメータをしながらを実行したい
  • 色々なデータ使ってを実行したい
  • 复数コアをてシミュレーションを并列したい

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

1. Parsim关数をたシミュレーションシミュレーションシミュレーション

プログラムループシミュレーションとととループSIMMatlab R2017Aから复数复数シミュレーションシミュレーションシミュレーション実行実行用用用关数关数关数关数关数であるParsimが导入います。关数使用するとより效率的的に复数复数シミュレーションをを実行。

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

>> in = 万博1manbetxsimulink.simulationInput(“ VDP”);

simulationInputオブジェクトparsim关数关数にばシミュレーション実行することができ。。。

>> out = parsim(in)
out =
万博1manbetxsimulink.simulationOutput
SimulationMetadata: [1×1 Simulink.SimulationMetadata]
ErrorMessage: [0x0 char]

parsim parsim关数关数关数关数关数关数关数关数关数关数关数の特徴はははは,,,,,,,,,万博1manbetx,,,,,,,,,,,オブジェクトオブジェクトオブジェクト

为了i = 10:-1:1 in(i)= s万博1manbetximulink.simulationInput(“ vdp”);结尾

for simulationInput配列配列作成しまし10から11にににににににに方向方向方向しててているのはは最初最初最初最初ににににに个分个分个分个分个分のメモリを确保确保确保するするする。。。特に特に特にメモリ((((())

>> out = parsim(in)
out =
1×10 万博1manbetxsimulink.simulationOutput配列

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

2.パラメータのスイープ

仿真inputsetVaria关数をこと,シミュレーションに使用パラメータを変更することができ。

>> in = in.setVariable(“ K”,10);

内でれているパラメータ名と値セットセットでで指定します。。。注意注意点点としとしとしててててててて,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,入れ直すがあります。

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

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

シミュレーション结果しやすいに,データエクスポートも変更しておきます。

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

为了i = 10:-1:1 in(i)= s万博1manbetximulink.simulationInput("myModel");in(i) = in(i).setVariable(“ K”,ksweep(i));结尾out = parsim(in)

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

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

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

これでパラメータをスイープして複数シミュレーションを行うことができるようになりました。次は入力データを複数使用する方法を見ていきましょう。

3.外部入力の変更

仿真inputsetExternalInput关数をこと,シミュレーション外部外部シミュレーションに変更変更することももできます。また超超简単简単なななモデル

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

t = (0:0.1:10)'; u1 = t; u2 = sin(t); u3 = -cos(t); u = {u1,u2,u3};

入力データベクトルなることが多い,,セル配列や行列でまとめておくとループで使いやすくなります。あとはパラメータスイープと同様に for ループで各要素に入力データを設定するだけです。

为了i = 10:-1:1 in(i)= s万博1manbetximulink.simulationInput("myModel2");in(i)= in(i).setExternalInput([t,u {i}]);结尾out = parsim(in)

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

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

4.复数の状况・を可视化する

の大を実行している场合,各シミュレーション状况状况ををリアルリアルタイムタイムタイムにに确认とと便利便利ですですよよね。。シミュレーションマネージャーマネージャーををををと,,,,シミュレーションシミュレーションシミュレーションのののののことができます。

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

out = parsim(在“显示模仿者”,,,,“在”

これで时シミュレーションマネージャーが起动,シミュレーションの状况をできます。

scattersctactやsprofをを使え特定のと结果の可视可视化化することことも可能です。他他にもな机能机能がが用意用意さシミュレーションマネージャーのドキュメントをご确认。

5.终わりに

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

|

Comments

要发表评论,请单击here登录您的数学帐户或创建一个新帐户。