ConnectSystemModelController[model,controller]
コントローラのデータ controller に従ってシステムモデル model とコントローラを接続する.
ConnectSystemModelController
ConnectSystemModelController[model,controller]
コントローラのデータ controller に従ってシステムモデル model とコントローラを接続する.
詳細
- ConnectSystemModelControllerは,通常,コントローラをSystemModelプラントモデルに接続し,閉ループ系を与えるために使われる.結果のシステムについて,現実世界で使用するためのシミュレーションや分析が行える.
- model は,SystemModelオブジェクト,完全なモデル名の文字列,あるいはSystemModelで使用可能な短縮モデル名でよい.
- ConnectSystemModelController["NewModel",…]は作成されたモデルに名前"NewModel"を与える.
- controller は制御設計関数によって作成されたSystemsModelControllerDataオブジェクトである.
- model からの状態フィードバックを持つ制御設計関数には以下が含まれる.
-
StateFeedbackGains 極配置状態フィードバック LQRegulatorGains 線形二次最適制御 DiscreteLQRegulatorGains 離散時間線形二次最適制御 ModelPredictiveController 制約付きモデルの予測コントローラ - model からの出力フィードバックを持つ制御設計関数には以下が含まれる.
-
EstimatorRegulator 状態フィードバックと状態推定器を組み立てる LQGRegulator 線形二次制御と推定器 PIDTune 自動的に調整されたPIDコントローラ - ConnectSystemModelControllerはSystemModelを返す.
例題
すべて開く すべて閉じる例 (1)
model = [image];ctrl = PIDTune[SystemModelLinearize[model], Automatic, "Data"]csys = ConnectSystemModelController[model, ctrl]SystemModelPlot[csys, {"out"}, 10, <|"Inputs" -> {"ref" -> Function[2], "ctrlDist" -> Cos, "sensNoise" -> Sin}|>, PlotRange -> All]スコープ (16)
StateFeedbackGains (3)
model = [image];lin = SystemModelLinearize[model]ctrl = StateFeedbackGains[<|"InputModel" -> lin, "FeedbackInputs" -> {1}|>, {-2 + I, -2 - I}, "Data"]csys = ConnectSystemModelController[model, ctrl]simModel = SystemModelSimulate[model, 10, <|"Inputs" -> {"f" -> Function[t, 10^8(UnitStep[t] - UnitStep[t - 1])], "deltarho" -> Function[0]}|>]simCsys = SystemModelSimulate[csys, 10, <|"Inputs" -> {"f" -> Function[t, 10^8(UnitStep[t] - UnitStep[t - 1])], "deltarho" -> Function[0]}|>]SystemModelPlot[simModel, {"y"}]SystemModelPlot[simCsys, {"y"}]model = [image];lin = SystemModelLinearize[model]ctrl = StateFeedbackGains[lin, {-0.5, -1.5, -1, -2.5}, "Data"]csys = ConnectSystemModelController[model, ctrl]simModel = SystemModelSimulate[model, 20, <|"InitialValues" -> {"keplerDynamics.vx" -> 0.1}|>]simCsys = SystemModelSimulate[csys, 20, <|"InitialValues" -> {"eSys.sys.keplerDynamics.vx" -> 0.1}|>]Row[Table[SystemModelPlot[simModel, {var}, TargetUnits -> {"Seconds", Automatic}, PlotRange -> All, PlotLabel -> var, ImageSize -> 225], {var, {"dphi", "dr"}}]]Row[Table[SystemModelPlot[simCsys, {var}, TargetUnits -> {"Seconds", Automatic}, PlotRange -> All, PlotLabel -> var, ImageSize -> 225], {var, {"dphi", "dr"}}]]model = \!\(\*GraphicsBox[«8»]\);lin = SystemModelLinearize[model]ctrl = StateFeedbackGains[<|"InputModel" -> lin, "FeedbackInputs" -> {2}|>, {-9 + 9I, -9 - 9I, -10, -10.5}, "Data"]csys = ConnectSystemModelController[model, ctrl]simModel = SystemModelSimulate[model, 5, <|"Inputs" -> {"d" -> Function[t, 0.1(UnitStep[t] - UnitStep[t - 1])], "f" -> Function[0]}|>]simCsys = SystemModelSimulate[csys, 5, <|"Inputs" -> {"d" -> Function[t, 0.1(UnitStep[t] - UnitStep[t - 1])], "f" -> Function[0]}|>]SystemModelPlot[simModel, {"phi"}, PlotRange -> All]SystemModelPlot[simCsys, {"phi"}, PlotRange -> All]LQRegulatorGains (2)
model = [image];lin = SystemModelLinearize[model]ctrl = LQRegulatorGains[lin, {(| | | |
| - | - | - |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |), {{1}}}, "Data"]csys = ConnectSystemModelController[model, ctrl]平衡値からの反応物の濃度の不足を使ってもとのモデルのシミュレーションを行う:
simModel = SystemModelSimulate[model, Quantity[1, "Hours"], <|"InitialValues" -> {"x1" -> -1000}|>]simCsys = SystemModelSimulate[csys, Quantity[1, "Hours"], <|"InitialValues" -> {"eSys.sys.x1" -> -1000}|>]SystemModelPlot[simModel, {"deltaCA"}, PlotRange -> All, TargetUnits -> {"Hours", None}]SystemModelPlot[simCsys, {"deltaCA"}, PlotRange -> All, TargetUnits -> {"Hours", None}]重心の周りを回転できる梁の上に置かれたボールのモデルから始める:
model = SystemModel[[image], <|"ParameterValues" -> {"world.enableAnimation" -> False}|>];lin = SystemModelLinearize[model]ctrl = LQRegulatorGains[lin, {(| | | | |
| - | - | - | - |
| 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 1 |), (1)}, "Data"]csys = ConnectSystemModelController[model, ctrl]もとのモデルで梁の端にボールを置いてシミュレーションを行う:
simModel = SystemModelSimulate[model, 10, <|"InitialValues" -> {"ballAndBeamDynamics.rs" -> 0.4}|>]simCsys = SystemModelSimulate[csys, 10, <|"InitialValues" -> {"eSys.sys.ballAndBeamDynamics.rs" -> 0.4}|>]もとのモデルで梁の中央から計測したボールの位置をプロットする:
SystemModelPlot[simModel, {"ballAndBeamDynamics.rs"}]SystemModelPlot[simCsys, {"eSys.sys.ballAndBeamDynamics.rs"}, PlotRange -> All]DiscreteLQRegulatorGains (2)
model = [image];lin = SystemModelLinearize[model]ctrl = DiscreteLQRegulatorGains[lin, {(| | | |
| - | - | - |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |), {{1}}}, 60, "Data"]csys = ConnectSystemModelController[model, ctrl]平衡値からの反応物の濃度が不足しているもとのモデルのシミュレーションを行う:
simModel = SystemModelSimulate[model, Quantity[4, "Hours"], <|"InitialValues" -> {"x1" -> -1000}|>]simCsys = SystemModelSimulate[csys, Quantity[4, "Hours"], <|"InitialValues" -> {"eSys.sys.x1" -> -1000}|>]SystemModelPlot[simModel, {"deltaCA"}, PlotRange -> All, TargetUnits -> {"Hours", None}]SystemModelPlot[simCsys, {"deltaCA"}, PlotRange -> All, TargetUnits -> {"Hours", None}]重心の周りを回転できる梁の上に置かれたボールのモデルから始める:
model = SystemModel[[image], <|"ParameterValues" -> {"world.enableAnimation" -> False}|>];lin = SystemModelLinearize[model]ctrl = DiscreteLQRegulatorGains[lin, {(| | | | |
| - | - | - | - |
| 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 1 |), (1)}, 0.1, "Data"]csys = ConnectSystemModelController[model, ctrl]もとのモデルで梁の端にボールを置いてシミュレーションを行う:
simModel = SystemModelSimulate[model, 10, <|"InitialValues" -> {"ballAndBeamDynamics.rs" -> 0.4}|>]simCsys = SystemModelSimulate[csys, 10, <|"InitialValues" -> {"eSys.sys.ballAndBeamDynamics.rs" -> 0.4}|>]もとのモデルで梁の中央から計測したボールの位置をプロットする:
SystemModelPlot[simModel, {"ballAndBeamDynamics.rs"}]SystemModelPlot[simCsys, {"eSys.sys.ballAndBeamDynamics.rs"}, PlotRange -> All]EstimatorRegulator (2)
model = [image];lin = SystemModelLinearize[model]コントローラと観測器を設計し,それらをEstimatorRegulatorに入れる:
k = StateFeedbackGains[lin, {-0.5, -1.5, -1, -2.5}];l = EstimatorGains[lin, 3 {-0.5, -1.5, -1, -2.5}];ctrl = EstimatorRegulator[lin, {l, k}, "Data"]csys = ConnectSystemModelController[model, ctrl]simCSys = SystemModelSimulate[csys, 12, <|"InitialValues" -> {"sys.keplerDynamics.vx" -> 0.1}|>]SystemModelPlot[simCSys, {"dr"}, PlotRange -> All]model = \!\(\*GraphicsBox[«8»]\);lin = SystemModelLinearize[model]コントローラと観測器を設計し,それらをEstimatorRegulatorに入れる:
sysSpec = <|"InputModel" -> lin, "FeedbackInputs" -> {2}|>;k = StateFeedbackGains[sysSpec, {-1 + 1.5I, -1 - 1.5I, -5, -5.5}];l = EstimatorGains[lin, {-9 + 9I, -9 - 9I, -10, -10.5}];ctrl = EstimatorRegulator[sysSpec, {l, k}, "Data"]csys = ConnectSystemModelController[model, ctrl]平衡点から離れる初期角度で閉ループ系のシミュレーションを行う:
simCsys = SystemModelSimulate[csys, 10, <|"InitialValues" -> {"sys.pendulumDamper.phi_rel" -> 0.1}|>]SystemModelPlot[simCsys, {"sys.pendulumDamper.phi_rel"}, PlotRange -> All]LQGRegulator (2)
model = [image];lin = SystemModelLinearize[model]ctrl = LQGRegulator[lin, {{{}}, (| | | |
| - | - | - |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |)}, {(| | | |
| - | - | - |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |), (1)}, "Data"]csys = ConnectSystemModelController[model, ctrl]平衡値からの反応物の濃度が不足しているもとのモデルのシミュレーションを行う:
simCsys = SystemModelSimulate[csys, Quantity[8, "Hours"], <|"InitialValues" -> {"sys.x1" -> -1000}|>]SystemModelPlot[simCsys, {"deltaCA"}, PlotRange -> All, TargetUnits -> {"Hours", None}]重心の周りを回転できる梁の上に置かれたボールのモデルから始め,回転減衰を加える:
model = SystemModel[[image], <|"ParameterValues" -> {"b" -> 1, "world.enableAnimation" -> False}|>];lin = SystemModelLinearize[model]ctrl = LQGRegulator[lin, {{{}}, (| | |
| ----- | ----- |
| 10^-6 | 0 |
| 0 | 10^-6 |)}, {(| | | | |
| ---- | ---- | ---- | ---- |
| 10^4 | 0 | 0 | 0 |
| 0 | 10^4 | 0 | 0 |
| 0 | 0 | 10^4 | 0 |
| 0 | 0 | 0 | 10^4 |), (1)}, "Data"]csys = ConnectSystemModelController[model, ctrl]梁の中央からボールを離す閉ループ系のシミュレーションを行う:
simCsys = SystemModelSimulate[csys, 20, <|"InitialValues" -> {"sys.ballAndBeamDynamics.rs" -> 0.4}|>]SystemModelPlot[simCsys, {"sys.ballAndBeamDynamics.rs"}, PlotRange -> All]PIDTune (1)
model = [image];lin = SystemModelLinearize[model]ctrl = PIDTune[lin, Automatic, "Data"]csys = ConnectSystemModelController[model, ctrl]SystemModelPlot[csys, {"out"}, 0.1, <|"Inputs" -> {"ref" -> Function[2], "ctrlDist" -> Cos, "sensNoise" -> Sin}|>, PlotRange -> All]ModelPredictiveController (2)
model = \!\(\*GraphicsBox[«8»]\);SystemModelLinearize[model]sspec = <|"InputModel" -> model, "SamplingPeriod" -> 0.05, "SamplingMethod" -> "ForwardRectangularRule", "FeedbackInputs" -> {"fa"}|>;cost = <|"Horizon" -> 3, "StateWeight" -> (| | | | | | |
| - | ---- | - | - | ---- | - |
| 1 | 0 | 0 | 0 | 0 | 0 |
| 0 | 10^6 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | 0 | 10^6 | 0 |
| 0 | 0 | 0 | 0 | 0 | 1 |), "InputWeight" -> (1)|>;cons = {-0.1 <= "xce" <= 0.1};ctrl = ModelPredictiveController[sspec, cost, cons]csys = ConnectSystemModelController["CLSMPC", model, ctrl]bumpInputs = <|"Inputs" -> {"fa" -> Function[t, 0], "fw" -> Function[t, 2000(UnitStep[t] - UnitStep[t - 0.25])]}|>;simModel = SystemModelSimulate[model, 10, bumpInputs]simCsys = SystemModelSimulate[csys, 10, bumpInputs]SystemModelPlot[simModel, {"xce"}, PlotRange -> {-0.025, 0.025}]SystemModelPlot[simCsys, {"eSys.sys.xce"}, PlotRange -> {-0.025, 0.025}]model = [image];SystemModelLinearize[model]sspec = <|"InputModel" -> model, "SamplingPeriod" -> 60, "SamplingMethod" -> "ForwardRectangularRule"|>;cost = <|"Horizon" -> ∞, "StateWeight" -> (| | | |
| - | - | - |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |), "InputWeight" -> (1)|>;cons = {-50 ≤ "deltaCA" ≤ 50};ctrl = ModelPredictiveController[sspec, cost, cons]csys = ConnectSystemModelController["CLSMPC", model, ctrl]平衡値からの反応物の濃度が不足しているもとのモデルのシミュレーションを行う:
simModel = SystemModelSimulate[model, Quantity[4, "Hours"], <|"InitialValues" -> {"x1" -> -20}|>]simCsys = SystemModelSimulate[csys, Quantity[4, "Hours"], <|"InitialValues" -> {"eSys.sys.x1" -> -20}|>]SystemModelPlot[simModel, {"x1"}, PlotRange -> All, TargetUnits -> {"Hours", Automatic}]SystemModelPlot[simCsys, {"eSys.sys.x1"}, PlotRange -> All, TargetUnits -> {"Hours", Automatic}]Tracking (2)
model = [image];lin = SystemModelLinearize[model]sspec = <|"InputModel" -> lin, "FeedbackInputs" -> {1}, "TrackedOutputs" -> {1}|>;ctrl = StateFeedbackGains[sspec, {-2 + I, -2 - I, -2}, "Data"]csys = ConnectSystemModelController[model, ctrl]深度とノイズの参照信号を与える閉ループ系のシミュレーションを行う:
sim = SystemModelSimulate[csys, 100, <|"Inputs" -> {"refY" -> Function[t, -10Tanh[t / 10]], "f" -> RandomFunction[WienerProcess[0, 10^6], {0, 100, 0.1}]}|>]SystemModelPlot[sim, {"refY", "y"}, PlotRange -> All]SystemModelPlot[sim, {"eSys.sys.deltarho"}, PlotRange -> All]重心の周りを回転できるビームの上に置かれたボールのモデルから始める:
model = SystemModel[[image], <|"ParameterValues" -> {"world.enableAnimation" -> False}|>];lin = SystemModelLinearize[model]sspec = <|"InputModel" -> lin, "TrackedOutputs" -> {1}|>;ctrl = LQGRegulator[sspec, {{{}}, (| | |
| ----- | ----- |
| 10^-5 | 0 |
| 0 | 10^-5 |)}, {10^4(| | | | | |
| - | - | - | - | - |
| 1 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 0 | 1 |), (1)}, "Data"]csys = ConnectSystemModelController[model, ctrl]位置とノイズの参照を与える閉ループ系のシミュレーションを行う:
sim = Quiet[SystemModelSimulate[csys, 100, <|"Inputs" -> {"refRs" -> Function[t, 1 / 2 E ^ (-(1 / 8) (-10 + t) ^ 2)], "noiseRs" -> RandomFunction[WienerProcess[0, 0.0001], {0, 100, 0.01}], "noiseThetab" -> RandomFunction[WienerProcess[0, 0.00001], {0, 100, 0.01}]}|>], {General::munfl}]SystemModelPlot[sim, {"rs", "refRs"}, PlotRange -> All]SystemModelPlot[sim, {"sys.T"}, PlotRange -> All]関連するガイド
関連リンク
テキスト
Wolfram Research (2021), ConnectSystemModelController, Wolfram言語関数, https://reference.wolfram.com/language/ref/ConnectSystemModelController.html (2022年に更新).
CMS
Wolfram Language. 2021. "ConnectSystemModelController." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2022. https://reference.wolfram.com/language/ref/ConnectSystemModelController.html.
APA
Wolfram Language. (2021). ConnectSystemModelController. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ConnectSystemModelController.html
BibTeX
@misc{reference.wolfram_2026_connectsystemmodelcontroller, author="Wolfram Research", title="{ConnectSystemModelController}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/ConnectSystemModelController.html}", note=[Accessed: 12-October-2026]}
BibLaTeX
@online{reference.wolfram_2026_connectsystemmodelcontroller, organization={Wolfram Research}, title={ConnectSystemModelController}, year={2022}, url={https://reference.wolfram.com/language/ref/ConnectSystemModelController.html}, note=[Accessed: 12-October-2026]}