モデルのシミュレーションと解析を始める
モデルのシミュレーションと解析を始める
完全な製品としてのWolfram SystemModelerにも,モデルの生成,探究,シミュレーション,解析のための,専用のグラフィカルユーザインターフェースが含まれている.
SystemModelerにはさまざまな複雑性を持つ多様な分野の例題が含まれている.これらの例題はすべてSystemModelExamplesコマンドを使って調べたりシミュレーションを実行したりすることができる.以下のセルを評価すると,インタラクティブな例題ブラウザが生成される.
SystemModelExamples[]SystemModelExamples["Models"]//ShallowWolfram言語のシステムモデルはSystemModelで表すことができる.モデルは,上記のSystemModelExamples等の関数から利用することも,その名前を文字列として参照することで利用することもできる.
SystemModel["DocumentationExamples.Modeling.ControlledMotorGearPendulum"][image]["Diagram"]SystemModelSimulateはModel Centerで作成されたモデルのシミュレーションを実行し,SystemModelSimulationDataオブジェクトを返す.そのシミュレーションからの結果を可視化するためには,SystemModelPlot使う.
| SystemModelSimulate[model] | model のシミュレーションを実行する |
| SystemModelSimulationData[…] | シミュレーションの結果を含むオブジェクト |
| SystemModelPlot[sd,"MyPlot"] | SystemModelSimulationData sd の保存されたプロット"MyPlot"を表示する |
| SystemModelPlot[sd,{"v1",…}] | プロット変数 vi |
基本的なシミュレーションとプロット
モデルのシミュレーションを実行するためには,モデルを引数として,コマンドSystemModelSimulateを使う.
sim1 = SystemModelSimulate[[image]]SystemModelSimulateの出力はSystemModelSimulationDataオブジェクトである.このオブジェクトは,シミュレーションの変数をプロットするためにSystemModelPlotで使うことができる.多くの例題モデルでは,モデルの作成者によって定義されたプロットが保存されている.これらはシミュレーションの結果の"PlotNames"特性を使ってリストすることができる.
pNames = sim1["PlotNames"]このようなプロットはSystemModelPlotで簡単に表示することができる.
SystemModelPlot[sim1, First[pNames]]シミュレーションデータ
sim1["Properties"]sim1["VariableNames"]//ShortSystemModelPlotを使って,2つの変数をプロットする.
SystemModelPlot[sim1, {"syse.sys.resistor.i", "syse.sys.resistor.v"}, PlotRange -> All]sim1[{"syse.sys.resistor.i", "syse.sys.resistor.v"}, 2]パラメータの変化
parSettings = {"syse.sys.R" -> 5.2, "syse.sys.L" -> 0.002};sim2 = SystemModelSimulate["DocumentationExamples.Modeling.ControlledMotorGearPendulum", <|"ParameterValues" -> parSettings|>];SystemModelPlot[{sim1, sim2}, {"phi"}]パラメータスイープ
simball = SystemModelSimulate["DocumentationExamples.Simulation.BouncingBall", 4, <|"ParameterValues" -> {"e" -> {0.6, 0.7, 0.8, 0.9}}|>]SystemModelPlot[simball, {"h"}]カスタムプロット
シミュレーションの結果をデータとして取り込むことにより,多くの方法で結果を可視化し解析することができる.例えば,Chua回路の結果をParametricPlotでプロットする.
mchua = "Modelica.Electrical.Analog.Examples.ChuaCircuit";simchua = SystemModelSimulate[mchua, 50000];{c1v, c2v} = simchua[{"C1.v", "C2.v"}, t];ParametricPlot[{c1v, c2v}, {t, 0, 50000}]ParametricPlot3Dでローレンツアトラクタ(Lorenz attractor)でを使うことで美しいシミュレーションの結果が生成される.
mlorenz = "DocumentationExamples.Simulation.LorenzAttractor";simlorenz = SystemModelSimulate[mlorenz, 100, Method -> {"DASSL", "InterpolationPoints" -> 15000}];ParametricPlot3D[Evaluate[simlorenz[{"x", "y", "z"}, t]], {t, 0, 100}, ColorFunction -> ColorData["SunsetColors"], PlotPoints -> 120]Wolfram言語からモデルのシミュレーションを実行するだけではなく,より直接的にモデルを操作することもできる.モデルについての情報を取り出すためにはSystemModelを,平衡点を得るためにはFindSystemModelEquilibriumを,線形の状態空間表現を得るためにはSystemModelLinearizeを使う.
| SystemModel[model,…] | model についての情報を取り出す |
| FindSystemModelEquilibrium[model] | model の平衡点を見付ける |
| SystemModelLinearize[model] | model の線形状態空間表現を得る |
モデルの方程式
SystemModelを使ってモデルに関する情報を取り出す.まず,モデル情報の概要を得る.
model = [image];model["Summary"]eqns = model["SystemEquations", t]vars = model["SystemVariables"];
Solve[eqns /. Derivative[1][_][t] -> 0, Through[vars[t]]]モデルについての情報を得るために使うことのできるSystemModelの特性が多数ある,
model["Properties"]平衡点と線形表現
FindSystemModelEquilibriumを使って,攪拌層のモデルの平衡点を見付ける.
mtank = [image];FindSystemModelEquilibrium[mtank]lin = SystemModelLinearize[mtank]ctrl = StateFeedbackGains[lin, {-0.251, -0.222, -0.222}, "Data"]csys = ConnectSystemModelController["CLS", mtank, ctrl]SystemModelPlot[csys, {"y1", "y2"}, 25, <|"Inputs" -> {"u1" -> UnitStep, "u2" -> UnitStep}|>]