Javaからの金宝appシミュレーションの実行
シミュレーションを実行するMATLABコマンド
Java®用の MATLAB®エンジン API を使用して Simulink®シミュレーションを実行することができます。プログラムによりシミュレーションを実行するための基本的な手順は以下のとおりです。
MATLAB エンジン オブジェクトを作成して MATLAB セッションを開始します。
MATLAB に Simulink モデルを読み込みます (
load_system
(Simulink))。特定のシミュレーション パラメーターを設定してシミュレーションを実行します (
sim
(Simulink))。返された
Simulink.SimulationOuput
(Simulink)オブジェクトのメソッドを使用して、シミュレーションの結果にアクセスします。
MATLAB からプログラムによりシミュレーションを実行する方法の詳細については、個々のシミュレーションの実行(Simulink)を参照してください。
Javaからの vdp モデルの実行
Simulink のvdp
ブロック線図は、ファン デル ポールの方程式をシミュレートします。これは 2 階微分方程式です。このモデルは、モデルによって定義された初期条件と構成パラメーターを使用して方程式を解きます。
シミュレーションを実行するためのMATLABコード
次の MATLAB コードは、シミュレーションをプログラムによって実行するためのコマンドを示しています。Simulink.SimulationOuput
オブジェクトのget
メソッドは、結果と時間ベクトルを返します。
mdl ='vdp'; load_system(mdl); simOut = sim(mdl,'SaveOutput','on',...'OutputSaveName','yOut',...'SaveTime','on',...'TimeSaveName','tOut'); y = simOut.get('yOut'); t = simOut.get('tOut');
データのグラフ化
次の MATLAB コードはシミュレーション出力のグラフを作成し、そのグラフを JPEG イメージ ファイルにエクスポートします。
plot(t,y) print('vdpPlot','-djpeg')
シミュレーションを実行するためのJavaコード
次の Java コードは Simulinkvdp
モデルのシミュレーションを実行し、結果を Java に返します。この実装により、以下の処理が実行されます。
MATLAB エンジン オブジェクトを作成して MATLAB セッションを開始します。
MATLAB
load_system
コマンドを呼び出して Simulink を起動し、vdp
モデルを非同期的に読み込みます。Future
が返されるまでタスクをポーリングします。MATLAB
sim
コマンドを呼び出してシミュレーション パラメーターを設定し、シミュレーションを実行します。Future
が返されるまでタスクをポーリングします。シミュレーションの結果を取得します。関数
sim
の出力は MATLABSimulink.SimulationOuput
(Simulink)オブジェクトであり、これは MATLAB ベース ワークスペースで作成されます。エンジン API はこのタイプのオブジェクトをサポートしていません。そのため、この例ではオブジェクトの
get
メソッドを使用して MATLAB ワークスペースのシミュレーション データにアクセスしています。シミュレーション データのグラフィックスを作成して、このグラフを JPEG ファイルにエクスポートします。
シミュレーション結果と時間ベクトルを
double
配列として Java に返します。
import com.mathworks.engine.*; import java.util.concurrent.Future; import java.util.Arrays; public class RunSimulation { public static void main(String[] args) throws Exception { MatlabEngine eng = MatlabEngine.startMatlab(); FuturefLoad = eng.evalAsync("load_system('vdp')"); while (!fLoad.isDone()){ System.out.println("Loading Simulink model..."); Thread.sleep(10000); } Future fSim = eng.evalAsync("simOut = sim('vdp','SaveOutput'," + "'on','OutputSaveName','yOut'," + "'SaveTime','on','TimeSaveName','tOut');"); while (!fSim.isDone()) { System.out.println("Running Simulation..."); Thread.sleep(10000); } // Get simulation data eng.eval("y = simOut.get('yOut');"); eng.eval("t = simOut.get('tOut');"); // Graph results and create image file eng.eval("plot(t,y)"); eng.eval("print('vdpPlot','-djpeg')"); // Return results to Java double[][] y = eng.getVariable("y"); double[] t = eng.getVariable("t"); // Display results System.out.println("Simulation result " + Arrays.deepToString(y)); System.out.println("Time vector " + Arrays.toString(t)); eng.close(); } }