このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,入力値とパラメーター値の範囲で並列シミュレーションの実行を必要とするアプリケーションでラピッドアクセラレータを使用する方法を示します。
エンジンのアイドル回転数のモデルを使用して,エンジンのアイドル回転数をシミュレーションします。このモデルの入力はバイパスエアバルブの電圧、出力はアイドル回転数です。
2セットのバルブ電圧とともにparsim
を使用し2つの値の範囲で伝達関数の3つのゲインパラメーターのうち2つを独立して変化させることによって,並列シミュレーションを実行します。8次の表に,実行するつのシミュレーションをパラメーター値と共に示します。inpSets
はこの後の手順2で作成する外部入力で,gain2
とgain3
は2つのゲインパラメーターに対応する変数です。
実行 | ExternalInput | gain2 | gain3 |
---|---|---|---|
1 | inpSets (1) | 25 | 20. |
2 | inpSets (1) | 25 | 30. |
3. | inpSets (1) | 35 | 20. |
4 | inpSets (1) | 35 | 30. |
5 | inpSets (2) | 25 | 20. |
6 | inpSets (2) | 25 | 30. |
7 | inpSets (2) | 35 | 20. |
8 | inpSets (2) | 35 | 30. |
この例の作成に使用されたスクリプトファイルを変更することにより,この例を簡単に独自のアプリケーション用にカスタマイズできます。スクリプトファイルを編集するには,このページの左上隅のリンクをクリックします。MATLAB®からこの例を実行するには,右上隅のリンクをクリックしてください。
まず,シミュレーションモードがラピッドアクセラレータに設定されているモデルを開きます。既定の入力データと必須パラメーターは,ベースワークスペースに事前に読み込まれています。
次のようにしてモデルを開きます。
mdl =“sldemo_raccel_engine_idle_speed”;open_system (mdl);
ここでは,既定の入力値ベクトルに摂動を与え,新しい入力値ベクトルを取得します。
inpSets(1) = timeseries(inpData, time);rndPertb = 0.5 + rand(length(time), 1); / /时间长度inpSets (2) = timeseries (inpData。* rndPertb、时间);numInpSets =长度(inpSets);
パラメーターgain2
およびgain3
のさまざまな値に対してアイドル回転数がどのように変化するか調べます。金宝app仿真软件。SimulationInput
オブジェクトの配列を作成し,各シミュレーションに異なるパラメーター値と外部入力を指定します。SimulationInputオブジェクトの配列は、パフォーマンスを改善するために事前割り当てされます。また、外部入力は、モデル パラメーターを使用するのではなく、SimulationInput オブジェクトに直接指定できる点に注目してください。
gain2_vals = 25:10:35;gain3_vals = 20:10:30;num_gain2_vals =长度(gain2_vals);num_gain3_vals =长度(gain3_vals);numSims = num_gain2_vals * num_gain3_vals * numInpSets;(1: numSims) = S金宝appimulink.SimulationInput (mdl);idx = 1;为iG2 = 1: num_gain2_vals为iG3 = 1: num_gain3_vals为numinpset in(idx) = in(idx).setModelParameter(“SimulationMode”,“快速”,...“RapidAcceleratorUpToDateCheck”,“关闭”,...“SaveTime”,“上”,...“SaveOutput”,“上”);%使用setVariable为变量指定一个新值%的模拟在(idx) = (idx) .setVariable (“gain2”gain2_vals (iG2));在(idx) = (idx) .setVariable (“gain3”gain3_vals (iG3));在(idx)。ExternalInput = inpSets (inpSetsIdx);Idx = Idx + 1;结束结束结束
ラピッドアクセラレータモードでシミュレーションを実行してログを有効にするように,SimulationInput
オブジェクトのsetModelParameter
メソッドを使用してモデルパラメーターの設定も行っている点に注目してください。ラピッドアクセラレータターゲットのビルドにはSetupFcn
を使用しています。ラピッドアクセラレータターゲットを1回ビルドし,モデルのコンパイルにかかる時間を短縮するために以降のすべてのシミュレーションで使用します。SetupFcnのコードは次のとおりです。
函数sldemo_parallel_rapid_accel_sims_script_setup (mdl)暂时将workers上的当前文件夹更改为空%文件夹,以便客户端上任何现有的SLPRJ文件夹都不存在%干涉构建过程。currentFolder = pwd;tempDir = tempname;mkdir (tempDir);cd (tempDir);c = onCleanup(@() cd (currentFolder));金宝appSimulink.BlockDiagram.buildRapidAcceleratorTarget (mdl);结束
関数parsim
を使用してシミュレーションを並列実行します。最後の手順で作成されたSimulationInput
オブジェクトの配列在
は,最初の引数として関数parsim
に渡されます。シミュレーション出力データを,値が金宝app仿真软件。SimulationOutput
オブジェクトの配列である変数出
に保存します。各SimulationOutput
オブジェクトには,ログ信号に加え,SimulationMetadata
が含まれています。parsim
を使用して複数のシミュレーションを実行すると,後続のシミュレーションを継続して実行できるようにエラーがキャプチャされます。エラーがあればSimulationOutput
オブジェクトのErrorMessage
プロパティに表示されます。
= parsim (,“ShowProgress”,“上”,...“SetupFcn”@ () sldemo_parallel_rapid_accel_sims_script_setup (mdl));
[16-Oct-2018 15:54:39]检查并行池的可用性…使用“local”配置文件启动并行池(parpool)…[16-Oct-2018 15:55:37] Starting Simulink on parallel workers…金宝app分析和传送文件给工人…完成。[16-Oct-2018 15:55:38]配置并行工作器上的模拟缓存文件夹…[16-Oct-2018 15:55:38] Running SetupFcn on parallel workers…[16-Oct-2018 15:56:28] Loading model on parallel workers…[16-Oct-2018 15:56:29]运行模拟…[16-Oct-2018 15:56:34] 8次仿真运行中完成1次[16-Oct-2018 15:56:34] 8次仿真运行中完成2次[16-Oct-2018 15:56:34] 8次仿真运行中完成3次[16-Oct-2018 15:56:34] 8次仿真运行中完成4次[16-Oct-2018 15:56:34] 8次仿真运行中完成5次[16-Oct-2018 15:56:34] 8次仿真运行中完成6次[16-Oct-2018 15:56:38] [16-Oct-2018 15:56:38]
さまざまなパラメーター値と入力で,時間に対するエンジンのアイドル回転数をプロットします。出力は配列形式に記録され,SimulationOuputオブジェクトからアクセスできます。
为i = 1:numSims simOut = out(i);t = simOut.tout;y = simOut.yout;情节(t, y)所有结束
删除(gcp (“nocreate”))
使用“本地”配置文件的并行池正在关闭。