CreateSystemModel[sys]
システムモデル sys からModelica SystemModelを作る.
CreateSystemModel[eqns,t]
独立変数 t を有するシステム方程式 eqns についてのモデルを作る.
CreateSystemModel[…,tspec]
パラメータと変数についての型指定 tspec でモデルを作る.
CreateSystemModel[…,spec]
パラメータ値,初期値,モデル関係についての spec でモデルを作る.
CreateSystemModel
CreateSystemModel[sys]
システムモデル sys からModelica SystemModelを作る.
CreateSystemModel[eqns,t]
独立変数 t を有するシステム方程式 eqns についてのモデルを作る.
CreateSystemModel[…,tspec]
パラメータと変数についての型指定 tspec でモデルを作る.
CreateSystemModel[…,spec]
パラメータ値,初期値,モデル関係についての spec でモデルを作る.
詳細とオプション
- CreateSystemModelはSystemModel[…]を返す.
- CreateSystemModel["NewModel",…]は,作成されたモデルに"NewModel"という名前を与える.
- CreateSystemModel["PackageA.NewModel"]は"PackageA"に"NewModel"を挿入する.
- 使用可能な動的システムモデル sys には,StateSpaceModel,TransferFunctionModel,AffineStateSpaceModel,NonlinearStateSpaceModel,DiscreteInputOutputModelがある. »
- 使用可能な静的モデル sys にはFittedModel,NetChain,NetGraphがある.
- 使用可能な方程式 eqns には,常微分方程式(ODE),微分代数方程式(DAE),初期値方程式,WhenEventで与えられるイベント指定がある. »
- eqns および sys のパラメータは,t に明示的には依存しない変数であると解釈される.
- 変数とパラメータについての型指定 tspecs は{tspec1,…}となる.tspeci は以下の形式でよい.
-
pari∈typei パラメータ型 typei vari∈typei 変数型 typei - 型 typeiは,基本的なReals,Integers,Booleans,あるいは単位を含む任意のModelicaの型でよい. »
- SystemModels["Modelica.Units.*","type"]を使って組込みの標準単位を探すことができる.
- Modelicaのモデルは,一般に,多くのモデルを繋げて大きいシステムを作ることで構築される.モデル間のインタラクションは,「コネクタ(connector)」というModelicaのコンセプトで説明される. »
- コネクタは力変数,流れ変数,ストリーム変数からなる.複数のコネクタを接続するときは,流れ変数の合計は0になるように,力変数は等しくなるように設定される.
- 例えば,しばしばピンと呼ばれる電気回路のコネクタは,電圧変数 v と電流変数 i からなる.
- ピン n とピン p を繋ぐと,流れ変数(この場合は電流 i)の合計が0になり,力変数(この場合は電圧 v)は等しく設定される.
- 流れ変数はすべてコンポーネントに流れ込む方向で正である.
- 以下は,さまざまな領域における力変数と流れ変数である.
-
領域 力変数 流れ変数 電気回路 電圧 電流 磁気回路 磁位 磁束 並進力学 位置 力 回転力学 角度 トルク 3D力学 位置ベクトル,方向オブジェクト 切断力ベクトル,切断トルクベクトル 流量系 圧力,比エンタルピー 質量流量,エンタルピー流量 熱伝導系 温度 熱流量 ブロック図 実数,整数,ブーリアン - - ある領域に使用可能なコネクタ conniは,一般に,Interfacesパッケージ内で定義される.例えば,SystemModels["Modelica.Electrical.Analog.Interfaces.*","connector"]を使って組込みの電気ライブラリ内のコネクタを探すことができる.
- 指定 vari∈conniを使って,変数 variが型 conniのコネクタを参照するように指定することができる.
- コネクタ c 内の変数 viは,eqns 内で c▴viとして参照することができる.▴ という記号は\[UpPointer]で入力できる.
- コネクタ conn で定義された変数はSystemModel[conn,"SystemVariables"]でリストすることができる.
- CreateSystemModel[…,spec]の spec は次のキーのAssociationである.
-
"ParameterValues" {p1val1,…} パラメータ値 "InitialValues" {v1val1,…} 初期値 "ExtendsModels" {partial1,…} 構築する部分モデル "DiscreteVariables" {v1,v2,…} イベントのみで変化する変数 "SimulationSettings" {opt1val1,…} モデルのシミュレーションオプション - ライブラリには,新たなコンポーネントモデルを構築するための「インターフェース(interface)」と呼ばれる部分モデルがしばしば含まれている.これらのインターフェースは,大抵の場合,コネクタとコネクタ間の基本的な関係を説明する方程式からなる.
- CreateSystemModel[…,"ExtendsModels"partial]では,新たなモデルがModelica内で定義されている既存の partial SystemModelと組み合される. »
- モデルは,"ExtendsModels"{"partial1",…}を使って複数のモデルに拡張することができる.
- 上に構築するための部分モデルは,通常は,Interfacesパッケージで定義されている.例えば,SystemModels["Modelica.Electrical.Analog.Interfaces.*","model"|"block"]を使って組込みの電気ライブラリについての部分モデルを探すことができる.
- "InitialValues"はModelicaモデルの start 特性に相当する.
- 次は,"SimulationsSettings"->{opt1val1,…}で使用可能なオプションである.
-
"Method" シミュレーションメソッド "StartTime" シミュレーションの開始時間 "StopTime" シミュレーションの終了時間 - 次は,使用可能な適応的ステップ"Method"の値である.
-
"DASSL" DASSL DAEソルバ "CVODES" CVODES ODEソルバ - 次は,適応的ステップ法のオプションである.
-
"InterpolationPoints" 補間点の数 "Tolerance" 適応的ステップサイズの許容範囲 - 次は,使用可能な固定ステップ"Method"の値である.
-
"Euler" 次数1の明示的なオイラー(Euler)法 "Heun" 次数2のホイン(Heun)法 "RungeKutta" 次数4の明示的なルンゲ・クッタ(Runge–Kutta)法 - 次は,固定ステップ法のオプションである.
-
"StepSize" 固定ステップサイズ - GeneratedAssetLocationloc のオプション設定のときは,生成されたデジタルアセットを loc に保存することができる.
例題
すべて開く すべて閉じる例 (3)
StateSpaceModelに基づくモデルを作る:
CreateSystemModel[StateSpaceModel[{{{0}}, {{1}}, {{1}}, {{0}}}, SamplingPeriod -> None, SystemsModelLabels -> None]]TransferFunctionModelに基づくモデルを作り,それにカスタム名を与える:
CreateSystemModel["MyTF", TransferFunctionModel[{{{1 + 2*s}}, 1 + s}, s]]方程式を使って,既存のインターフェースの周りにモデルを構築する:
model = CreateSystemModel[{v[t] == r i[t]}, t, <|"ExtendsModels" -> "Modelica.Electrical.Analog.Interfaces.OnePort"|>];model["ModelicaDisplay"]スコープ (50)
システムモデル (11)
1入力1出力(SISO)のTransferFunctionModelのモデルを作る:
CreateSystemModel[TransferFunctionModel[{{{1 + 2*s}}, 1 + s}, s]]SISOのStateSpaceModelのモデルを作る:
CreateSystemModel[StateSpaceModel[{{{0}}, {{1}}, {{1}}, {{0}}}, SamplingPeriod -> None, SystemsModelLabels -> None]]CreateSystemModel[TransferFunctionModel[{{{1, 1, 1}, {1, 1, 1}},
{{2 + s, 3 + s, 4 + s},
{3 + s, 4 + s, 5 + s}}}, s]]CreateSystemModel[TransferFunctionModel[{{{p1 + 2*s}}, p2 + s},
s]]CreateSystemModel[StateSpaceModel[{{{a, 0}, {0, b}}, {{1, 0}, {0, 1}}, {{1, 1}}, {{0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> None]]CreateSystemModel[TransferFunctionModel[{{{p1 + 2*s}}, p2 + s},
s], <|"ParameterValues" -> {p1 -> 1, p2 -> 2}|>]CreateSystemModel[StateSpaceModel[{{{a, 0}, {0, b}}, {{1, 0}, {0, 1}}, {{1, 1}}, {{0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> None], <|"ParameterValues" -> {a -> 1, b -> 2}|>]CreateSystemModel[StateSpaceModel[{{{a, 0}, {0, b}}, {{1, 0}, {0, 1}}, {{1, 1}}, {{0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> None], {a∈Reals, b∈"Modelica.Units.SI.Current"}, <|"ParameterValues" -> {a -> 1, b -> 2}|>]CreateSystemModel[TransferFunctionModel[{{{1}}, (-1 + z)*(-0.605 + z)}, z,
SamplingPeriod -> 1]]CreateSystemModel[StateSpaceModel[{{{1, 0, 0}, {0, 2, 0}, {0, 0, 3}}, {{1}, {1}, {1}}, {{1, 1, 1}}, {{0}}},
SamplingPeriod -> 2, SystemsModelLabels -> None]]CreateSystemModel[StateSpaceModel[{{{3, 0}, {0, 4}}, {{5}, {6}}, {{7, 8}}, {{9}}, {{1, 0}, {0, 2}}},
SamplingPeriod -> None, SystemsModelLabels -> None]]CreateSystemModel[AffineStateSpaceModel[{{x2^2, x1 - x2}, {{1}, {1}},
{x1}, {{0}}}, {x1, x2}, Automatic, {Automatic}, Automatic,
SamplingPeriod -> None]]CreateSystemModel[NonlinearStateSpaceModel[{{u1 - x1*x2,
1 + u1*x2}, {x1}}, {x1, x2},
{u1}, {Automatic}, Automatic, SamplingPeriod -> None]]CreateSystemModel[DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u1[0]}, {u1[1]}, {u1[2]}}}, {{0, 2, 1}}, 1, {"Discrete", 1}, {"Discrete", 1}, {1},
{MissingDataMethod -> None, ResamplingMethod -> {"Interpolation", Int ... ime", "LastValue", "OutputCount", "OutputVariables", "Path",
"PathComponent", "PathComponents", "PathFunction", "PathLength", "SamplingPeriod", "StateCount",
"TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues", "Type", "Values"}]]微分方程式 (12)
model = CreateSystemModel[{u[t] == u'[t]}, t];model["ModelicaDisplay"]任意階数の方程式を指定する.高階微分方程式の簡約は自動的に行われる:
model = CreateSystemModel[{x''[t] + 1 / 10x'[t] + Sin[x[t]] == 1 / 2 Cos[t], x[0] == 0, x'[0] == 0}, t];model["ModelicaDisplay"]model = CreateSystemModel[{Subscript[y, 1]'[t] == Subscript[y, 1][t] + Subscript[y, 2][t], Subscript[y, 2]'[t] == Subscript[y, 1][t] + Sin[t]}, t];model["ModelicaDisplay"]model = CreateSystemModel[{x'[t] == y[t] ^ 2 + x[t]y[t], 2x[t] ^ 2 + y[t] ^ 2 == 1, x[0] == 0, y[0] == 1}, t];model["ModelicaDisplay"]混合方程式はWhenEventを使って指定することができる:
model = CreateSystemModel[{y'[x] == -y[x], WhenEvent[y[x] < 0.1, y[x] -> y[x] + 0.1 * x], y[0] == 1}, x];model["ModelicaDisplay"]sim = SystemModelSimulate[model, 10];SystemModelPlot[sim, {"y"}]eqs = {y''[t] == -9.8, WhenEvent[y[t] - a[t] < 0, y'[t] -> -0.75 y'[t]], WhenEvent[Mod[t, 1] == 0, a[t] -> a[t] - 1], y[0] == 14, y'[0] == 5, a[0] == 13};model = CreateSystemModel[eqs, t, <|"DiscreteVariables" -> {a}|>];階段を跳ねるボールのモデルのシミュレーションを行ってプロットする:
sim = SystemModelSimulate[model, 10];SystemModelPlot[sim, {"y", "a"}, Filling -> {2 -> 0}]Wolfram 言語の関数は,そのModelica版に自動的に変換される:
model = CreateSystemModel[{y'[x] == Floor[x], y[0] == 1}, x];model["ModelicaDisplay"]model = CreateSystemModel[{x'[t] == par x[t], x'[0] == 2}, t,
<|"ParameterValues" -> {par -> 10}|>];model["ModelicaDisplay"]model = CreateSystemModel[{x'[t] == par x[t]}, t, <|"InitialValues" -> {x -> 10}|>];model["ModelicaDisplay"]model = CreateSystemModel[{x'[t] == par x[t], x'[0] == 0}, t, {par∈Reals, x∈"Modelica.Units.SI.Position"}];model["ModelicaDisplay"]配列はIndexedを使って表現される:
model = CreateSystemModel[{Indexed[u, 1]'[t] == 1, Indexed[u, 2]'[t] == 2}, t];model["ModelicaDisplay"]model = CreateSystemModel[{Unevaluated[Function[#1 + Sin[#2]]][1, u[t]] == u'[t]}, t];model["ModelicaDisplay"]連想と関数 (4)
Associationは記録に変換される:
model = CreateSystemModel[<|par -> 9.8, x[t] -> None|>, t];model["ModelicaDisplay"]model = CreateSystemModel["particle", <|m -> 1, x[t] -> None, v[t] -> None|>, t, {"m"∈"Modelica.Units.SI.Mass", "x"∈"Modelica.Units.SI.Position", "v"∈"Modelica.Units.SI.Velocity"}];model["ModelicaDisplay"]Functionからの特化関数を使ってクラスを作成する:
model = CreateSystemModel[Function[r, (4/3)π r^3]];model["ModelicaDisplay"]Moduleを使ってプロテクトされた変数を導入する:
model = CreateSystemModel[Function[x, Module[{z = 3}, x + z]]];model["ModelicaDisplay"]領域とGraphics3D (2)
埋込み次元が3の領域は,可視化と動的特性を持つオブジェクトを作成する:
model = CreateSystemModel["MyCylinder", Cylinder[]]RegionMeasure,RegionCentroid,MomentOfInertiaのようなデータは"Modelica.Mechanics.MultiBody"成分を使って保存される:
model["LocalComponents"]Graphics3Dオブジェクトは可視化のためにエキスポートされる:
CreateSystemModel["MyBallCAD", Graphics3D[Ball[]]]DiscretizeGraphicsまたはBoundaryDiscretizeGraphicsでGraphics3Dから領域が生成できるかもしれない:
reg = DiscretizeGraphics[Graphics3D[Ball[]]];CreateSystemModel["ball", reg]フィットモデルとニューラルネットワーク (2)
FittedModelから入出力ブロックを作成する:
data = {{0, 0.5}, {1, 1}, {2, 1.5}, {3, 2}, {4, 2.5}, {5, 3}};nlm = NonlinearModelFit[data, Log[a + b x ^ 2], {a, b}, x]model = CreateSystemModel[nlm]Show[ListPlot[data], SystemModelPlot[model, {"y"}, 5, <|"Inputs" -> {"u" -> Function[t, t]}|>, PlotStyle -> RGBColor[0.880722, 0.611041, 0.142051]]]訓練済みあるいは初期化済みのNetChainまたはNetGraphから入力出力ブロックを作成する:
model = CreateSystemModel[NetInitialize[NetChain[{LinearLayer[2, "Input" -> 1]}]]]SystemModelPlot[model, {"y[1]", "y[2]"}, 5, <|"Inputs" -> {"u[1]" -> Sin}|>]モデルの命名 (3)
model = CreateSystemModel["MySSM", StateSpaceModel[{{{0}}, {{1}}, {{1}}, {{0}}}, SamplingPeriod -> None, SystemsModelLabels -> None]];model["ModelName"]model = CreateSystemModel["MyPackage.MySSM", StateSpaceModel[{{{0}}, {{1}}, {{1}}, {{0}}}, SamplingPeriod -> None, SystemsModelLabels -> None]];model["ModelName"]model = CreateSystemModel[StateSpaceModel[{{{0}}, {{1}}, {{1}}, {{0}}}, SamplingPeriod -> None, SystemsModelLabels -> None]];model["ModelName"]SetSystemModel[model, <|"ModelName" -> "MyModel"|>];model["ModelName"]型とコネクタ (4)
eqs = {y[t] == Sin[t]};conns = {y∈"Modelica.Blocks.Interfaces.RealOutput"};model = CreateSystemModel[eqs, t, conns];model["ModelicaDisplay"]eqs = {y[t] == u'[t]};conns = {u∈"Modelica.Blocks.Interfaces.RealInput", y∈"Modelica.Blocks.Interfaces.RealOutput"};model = CreateSystemModel[eqs, t, conns];model["ModelicaDisplay"]Electricalライブラリからのコネクタを使って抵抗器を作る:
eqs = {v[t] == r i[t], i[t] == QuantityVariable["p.i", "ElectricCurrent"][t], QuantityVariable["n.i", "ElectricCurrent"][t] == -QuantityVariable["p.i", "ElectricCurrent"][t], v[t] == QuantityVariable["p.v", "ElectricPotential"][t] - QuantityVariable["n.v", "ElectricPotential"][t]};model = CreateSystemModel[eqs, t, {p∈"Modelica.Electrical.Analog.Interfaces.PositivePin", n∈"Modelica.Electrical.Analog.Interfaces.NegativePin"}];model["ModelicaDisplay"]conns = {u∈"Interfaces.RealInput", y∈"Interfaces.RealOutput"};model = CreateSystemModel[{y[t] == u'[t]}, t, conns];model["ModelicaDisplay"]初期値とパラメータ値 (6)
model = CreateSystemModel[{x'[t] == par x[t]}, t, <|"InitialValues" -> {x -> 10}|>];model["ModelicaDisplay"]model = CreateSystemModel[{x'[t] == par x[t]}, t, <|"InitialValues" -> {par -> 10}|>];model["ModelicaDisplay"]start 値と初期方程式では,初期方程式の方が優先順位が高い:
model = CreateSystemModel[{x'[t] == -x[t], x[0] == 2}, t, <|"InitialValues" -> {x -> 10}|>];model["ModelicaDisplay"]SystemModelPlot[model, {"x"}, 5]model = CreateSystemModel[{x'[t] == -x[t]}, t, <|"ParameterValues" -> {par -> 5}, "InitialValues" -> {x -> par}|>];model["ModelicaDisplay"]model = CreateSystemModel[{x'[t] == par x[t]}, t, <|"ParameterValues" -> {par -> 10}|>];model["ModelicaDisplay"]model = CreateSystemModel[{x'[t] == p1 x[t], x[0] == p2}, t, <|"ParameterValues" -> {p1 -> -2, p2 -> -p1}|>];model["ModelicaDisplay"]部分的なモデルの上に構築する (3)
eqs = {y[t] == u[t] + 1};model = CreateSystemModel[eqs, t, <|"ExtendsModels" -> "Blocks.Interfaces.SISO"|>];model["ModelicaDisplay"]model = CreateSystemModel[{v[t] == r i[t]}, t, <|"ExtendsModels" -> "Analog.Interfaces.OnePort"|>];model["ModelicaDisplay"]model = CreateSystemModel[{{"a", ""}, {"b", "b case"}}, <|"ExtendsModels" -> "Enumeration"|>];model["ModelicaDisplay"]シミュレーション設定 (3)
model = CreateSystemModel[{u'[t] == Cos[u[t]]}, t, <|"SimulationSettings" -> {"StartTime" -> 1,
"StopTime" -> 5}|>]SystemModelPlot[model, {"u"}]model = CreateSystemModel[StateSpaceModel[{{{0}}, {{1}}, {{1}}, {{0}}}, SamplingPeriod -> None, SystemsModelLabels -> None], <|"SimulationSettings" -> {"Method" -> "RungeKutta"}|>];model["SimulationSettings"]model = CreateSystemModel[StateSpaceModel[{{{0}}, {{1}}, {{1}}, {{0}}}, SamplingPeriod -> None, SystemsModelLabels -> None], <|"SimulationSettings" -> {"SynchronizeWithRealTime" -> True}|>];model["SimulationSettings"]オプション (2)
GeneratedAssetLocation (2)
領域から作られたモデルは,デフォルトで,アセットファイルを$WolframDocumentsDirectoryにエキスポートする:
model = CreateSystemModel[Cylinder[]]GeneratedAssetLocationを使ってアセットの場所を指定する:
model = CreateSystemModel[Cylinder[], GeneratedAssetLocation -> FileNameJoin[{$TemporaryDirectory, "cyl.obj"}]]ニューラルネットワークから作成されたモデルは,デフォルトで,ONNXファイルを$WolframDocumentsDirectoryにエキスポートする:
net = NetInitialize[NetChain[{LinearLayer[3, "Input" -> 2]}]];model = CreateSystemModel[net]GeneratedAssetLocationを使ってアセットの場所を指定する:
model = CreateSystemModel[net, GeneratedAssetLocation -> FileNameJoin[{$TemporaryDirectory, "MyNet.onnx"}]]アプリケーション (7)
eqs = {v[t] == h'[t], v'[t] == -9.81, WhenEvent[h[t] ≤ 0, v[t] -> -k v[t]], h[0] == 1};model = CreateSystemModel[eqs, t];sim = SystemModelSimulate[model, 10, <|"ParameterValues" -> {"k" -> 0.95}|>];SystemModelPlot[sim, "h"]捕食・被食関係をモデル化するロトカ・ヴォルテラ(Lotka–Volterra)方程式を作る:
eqs = {pred'[t] == pred[t](δ prey[t] - γ), prey'[t] == prey[t](α - β pred[t])};ieqs = {prey[0] == 10, pred[0] == 10};pars = {α -> 0.1, β -> 0.02, γ -> 0.4, δ -> 0.02};model = CreateSystemModel[Join[eqs, ieqs], t, <|"ParameterValues" -> pars|>];sim = SystemModelSimulate[model, 100];SystemModelPlot[sim, {"pred", "prey"}]被食者の増加パラメータを大きくすると,この系の中の循環が速くなる:
sims = SystemModelSimulate[model, 100, <|"ParameterValues" -> {"alpha" -> {0.1, 0.2, 0.3, 0.4}}|>];Partition[Map[SystemModelPlot[#, {"prey", "pred"}, PlotLabel -> α == #["alpha"]]&, sims], 2]//Grid2番目のタンクに漏れがある,連結された2つのタンクをモデル化する:
pressureEqns = {p1[t] == ρ g h1[t], p2[t] == ρ g h2[t]};flowRate = (p1[t] - p2[t])(π pipeDia ^ 4) / (128 μ pipeLen);massConservation = {a1 h1'[t] == -flowRate, a2 h2'[t] == flowRate - a2 h2[t] / 10};eqns = Join[pressureEqns, massConservation, {h1[0] == 1, h2[0] == 0}];与えられたパラメータ値の集合をデフォルトとして使ってモデルを作る:
pars = {pipeLen -> 0.1, pipeDia -> 0.2, ρ -> 0.2, μ -> 2 10 ^ -3, g -> 9.81, a1 -> 1, a2 -> 1};model = CreateSystemModel[eqns, t, <|"ParameterValues" -> pars|>];sim = SystemModelSimulate[model, 80];2番目のタンクに漏れがあるので,どちらのタンクも時間が経つと空になる:
SystemModelPlot[sim, {"h1", "h2"}]eqs = {f[t] == If[vrel[t] > 0, d * vrel[t], 0], vrel[t] == s⎵rel'[t]};pvals = {d -> 1};Translational Mechanicsライブラリからの部分的インターフェースを使ってダンパーを作る:
partial = "Translational.Interfaces.PartialCompliant";CreateSystemModel["UniDamper", eqs, t, <|"ParameterValues" -> pvals, "ExtendsModels" -> partial|>];model = SystemModel["DocumentationExamples.Modeling.DamperCompare"]sim = SystemModelSimulate[model, 8]SystemModelPlot[sim, {"massUniDir.s", "massBiDir.s"}, PlotRange -> All]a = LeastSquaresFilterKernel[{"Lowpass", 0.1}, 20];h = ListZTransform[a, z];tf = TransferFunctionModel[h, z, SamplingPeriod -> 0.01]//TransferFunctionCancellowpass = CreateSystemModel[tf];signal = CreateSystemModel["Signal", {y[t] == Abs[Sin[t Cos[2t]]]t}, t, <|"ExtendsModels" -> "Modelica.Blocks.Interfaces.SignalSource"|>];model = ConnectSystemModelComponents["FilteredSignal", {"signal"∈signal, "filter"∈lowpass}, {"signal.y""filter.u"}]信号の出力とフィルタがかかった信号のシミュレーションを行い,プロットする:
sim = SystemModelSimulate[model, 10];
SystemModelPlot[sim, {"signal.y", "filter.y"}]領域をワールド成分と一緒に使用して,体が重力の影響を受ける新しいモデルを作成する:
model = CreateSystemModel["MyCylinder", Cylinder[]];model2 = ConnectSystemModelComponents["FallingCylinder", {"cyl"∈"MyCylinder", "world"∈"Modelica.Mechanics.MultiBody.World"
}, {}]sim = SystemModelSimulate[model2, 10];SystemModelPlot[sim, {"cyl.frame_a.r_0[2]"}]book = Parallelepiped[{0, 0, 0}, {{1, 0, 0}, {0, 1 / 2, 0}, {0, 0, 2 / 100}}];model = CreateSystemModel["Book", book]ワールド成分のパラメータを変更することで重力の影響をオフにして角速度に初期値を与える:
model2 = ConnectSystemModelComponents["RotatingBook", {"book"∈"Book", "world"∈"Modelica.Mechanics.MultiBody.World"}, {}, <|"ParameterValues" -> {"world.gravityType" -> QuantityVariable["Modelica.Mechanics.MultiBody.Types.GravityTypes.NoGravity", IndependentPhysicalQuantity[""]]}, "InitialValues" -> {"book.body.w_a" -> {0.1, 3, 0}}|>]シミュレーションをして体に固定したフレームの回転行列を入手する:
sim = SystemModelSimulate["RotatingBook", 10];ℛ[t_] = {sim[{"book.frame_a.R.T[1,1]", "book.frame_a.R.T[2,1]", "book.frame_a.R.T[3,1]"}, t],
sim[{"book.frame_a.R.T[1,2]", "book.frame_a.R.T[2,2]", "book.frame_a.R.T[3,2]"}, t],
sim[{"book.frame_a.R.T[1,3]", "book.frame_a.R.T[2,3]", "book.frame_a.R.T[3,3]"}, t]};Manipulate[Graphics3D[{EdgeForm[Thick], GeometricTransformation[book, Composition[TranslationTransform[RegionCentroid[book]], LinearFractionalTransform[{ℛ[t]}], TranslationTransform[-RegionCentroid[book]]]]}, PlotRange -> {{-1 / 2, 3 / 2}, {-1 / 2, 3 / 2}, {-1, 1}}, Boxed -> False], {t, 0, 10, 0.1}, SaveDefinitions -> True]特性と関係 (3)
SystemModel特性を使ってモデルから情報を抽出する:
origModel = SystemModel["DocumentationExamples.Basic.DiffEq"];既存のモデルからの方程式をパラメータを変えて使って,新たなモデルを作る:
eqs = origModel["SystemEquations", t];ivals = origModel["InitialValues"];newModel = CreateSystemModel[eqs, t, <|"ParameterValues" -> {"a" -> 2}, "InitialValues" -> ivals|>];newModel["ModelicaDisplay"]origSim = SystemModelSimulate[origModel, 5];newSim = SystemModelSimulate[newModel, 5];SystemModelPlot[{origSim, newSim}, {"y", "z"}]model = CreateSystemModel[{α'[t] == β[t], β'[t] == 0, α[0] == 0, β[0] == 0}, t];model["ModelicaDisplay"]Subscriptは_に変換される:
model = CreateSystemModel[{Subscript[x, 1]'[t] == -Subscript[x, 1][t], Subscript[x, 2][t] == 2Subscript[x, 1][t]}, t];model["ModelicaDisplay"]考えられる問題 (2)
model = CreateSystemModel["NoSave", {x'[t] == par x[t]}, t];Quit[]SystemModel["NoSave", "Summary"]CreateSystemModelはWolfram言語関数の部分集合をサポートする:
CreateSystemModel[{Subscript[x, 1]'[t] == Gamma[Subscript[x, 1][t]]}, t]関連するガイド
関連リンク
テキスト
Wolfram Research (2018), CreateSystemModel, Wolfram言語関数, https://reference.wolfram.com/language/ref/CreateSystemModel.html (2022年に更新).
CMS
Wolfram Language. 2018. "CreateSystemModel." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2022. https://reference.wolfram.com/language/ref/CreateSystemModel.html.
APA
Wolfram Language. (2018). CreateSystemModel. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/CreateSystemModel.html
BibTeX
@misc{reference.wolfram_2026_createsystemmodel, author="Wolfram Research", title="{CreateSystemModel}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/CreateSystemModel.html}", note=[Accessed: 13-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_createsystemmodel, organization={Wolfram Research}, title={CreateSystemModel}, year={2022}, url={https://reference.wolfram.com/language/ref/CreateSystemModel.html}, note=[Accessed: 13-September-2026]}