EstimatorRegulator[sspec,{l,κ}]
系の指定 sspec について,推定器ゲイン l と調整器ゲイン κ を持つ出力フィードバックコントローラを与える.
EstimatorRegulator[…,"prop"]
特性"prop"の値を与える.
EstimatorRegulator
EstimatorRegulator[sspec,{l,κ}]
系の指定 sspec について,推定器ゲイン l と調整器ゲイン κ を持つ出力フィードバックコントローラを与える.
EstimatorRegulator[…,"prop"]
特性"prop"の値を与える.
詳細とオプション
- EstimatorRegulatorは,観測器コントローラ,あるいは推定器コントローラとしても知られている.
- EstimatorRegulatorは,推定器と調整コントローラまたは追跡コントローラからなる制御系の組立てに使われる.
- 調整コントローラは系を乱そうとする外乱
があっても系を平衡状態に保とうとする.典型的な例として,直立した倒立振子や水平飛行中の航空機等が挙げられる. - 調整コントローラは
の形の制御規則で与えられる.ただし,
は計算されたゲイン行列である. - 追跡コントローラは,それを妨害する外乱
があっても参照信号を追跡しようとする.典型的な例として,自動車のクルーズコントロールシステムやロボットの経路追跡が挙げられる. - 追跡コントローラは
の形の制御規則で与えられる.ただし,
は系 sys と
のダイナミクスを含む拡張系のための計算されたゲイン行列である. - 系の指定 sspec は,系 sys と uf,ue,yt,yrefの指定である.
- 系の指定 sspec は以下の形でよい.
-
StateSpaceModel[…] 線形制御入力と線形状態 AffineStateSpaceModel[…] 線形制御入力と非線形状態 NonlinearStateSpaceModel[…] 非線形制御入力と非線形状態 SystemModel[…] 一般的な系のモデル <|…|> Associationとして与えられる詳細な系の指定 - 系の指定の詳細は次のキーを持つことができる.
-
"InputModel" sys モデルの任意のもの "FeedbackInputs" All フィードバック入力 uf "ExogenousInputs" None 外因性入力 ue "MeasuredOutputs" All 測定された出力 ym "TrackedOutputs" None 追跡された出力 yt - 入力と出力は以下の形でよい.
-
{num1,…,numn} StateSpaceModel,AffineStateSpaceModel,NonlinearStateSpaceModelで使われる番号付きの入力または出力 numi {name1,…,namen} SystemModelで使われる名前付きの入力または出力 namei All すべての入力または出力を使う None 入力または出力は使わない - 推定器ゲイン l は,EstimatorGains,LQEstimatorGains,DiscreteLQEstimatorGainsを使って計算できる.
- フィードバックゲイン κ は,StateFeedbackGains,LQRegulatorGains,LQOutputRegulatorGains,DiscreteLQRegulatorGainsを使って計算できる.
- EstimatorRegulator[…,"Data"]は,cd["prop"]の形で追加的な特性の抽出に使えるSystemsModelControllerDataオブジェクト cd を返す.
- EstimatorRegulator[…,"prop"]を使って cd["prop"]の値を直接得ることができる.
- 次は,特性"prop"の可能な値である.
-
"BlockDiagram" csys のブロック図 {"BlockDiagram",<|"SampledData"True|>} csys のサンプルデータブロック図を作成する "ClosedLoopPoles" "ClosedLoopSystem"の極 "ClosedLoopSystem" 系 csys {"ClosedLoopSystem",cspec} 閉ループ系の形に対する詳細な制御 "ControllerModel"
, ue, ymを入力として,ufを出力として持つモデル cm"Design" コントローラ設計のタイプ "DesignModel" 設計に使われるモデル "EstimatorGains" ゲイン行列 ℓ "EstimatorRegulatorModel" モデル erm "ExogenousInputs" sys の決定論的入力と非フィードバック入力 ue "FeedbackGains" ゲイン行列 κ またはそれに相当するもの "FeedbackGainsModel" モデル gm または{gm1,gm2} "FeedbackInputs" フィードバックに使われる sys の入力 uf "InputCount" sys の入力 u の数 "InputModel" 入力モデル sys "MeasuredOutputs" sys の測定された出力 ym "OpenLoopPoles" テイラー(Taylor)線形化 sys の極 "OutputCount" sys の出力 y の数 "SamplingPeriod" sys のサンプリング周期 "StateCount" sys の状態 x の数 "StateEstimatorModel" モデル sem "StateOutputEstimatorModel" モデル soem "TrackedOutputs" 追跡された sys の出力 yt - 次は,cspec の可能なキーである.
-
"InputModel" icsys の入力モデル "Merge" csys をマージするかどうか "ModelName" csys の名前 "NoisyOutputs" ノイズがある ymの部分集合 "SamplingPeriod" サンプルデータ csys を作成する - 次は,調整器のレイアウトの線図である.
- 次は,追跡器のレイアウトの線図である.
例題
すべて開く すべて閉じる例 (6)
EstimatorRegulatorを構築する:
EstimatorRegulator[StateSpaceModel[{{{a}}, {{b}}, {{c}}, {{d}}},
SamplingPeriod -> None, SystemsModelLabels -> None], {(ℓ), (κ)}]ssm = StateSpaceModel[{{{3, 2}, {1, -1}}, {{-1}, {0}}, {{1, 0}}, {{0.1}}}, SamplingPeriod -> 0.1,
SystemsModelLabels -> None];{ℓ, κ} = {(| |
| ---- |
| 1 |
| -0.5 |), (-2.6 -2.7)};EstimatorRegulator[ssm, {ℓ, κ}]nssm = NonlinearStateSpaceModel[{{-2 + 3*Subscript[x, 2],
u + 3*Subscript[x, 1] - Subscript[x, 2]},
{Subscript[x, 1] + 4*Subscript[x, 2]}},
{{Subscript[x, 1], 1}, {Subscript[x, 2], 1}}, {{u, 1}},
{Automatic}, Automatic, SamplingPeriod -> None];{ℓ, κ} = {(| |
| - |
| 3 |
| 2 |), (4 1)};EstimatorRegulator[nssm, {ℓ, κ}]sspec = <|"InputModel" -> StateSpaceModel[{{{-1, 2}, {0, -3.}}, {{0, 1}, {1, 0}}, {{1, 0}, {0, 2}}, {{0, 0}, {0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> None], "MeasuredOutputs" -> 1, "FeedbackInputs" -> 1|>;{ℓ, κ} = {(| |
| --- |
| 9 |
| 0.5 |), (7 3)};EstimatorRegulator[sspec, {ℓ, κ}]ssm = StateSpaceModel[{{{2, 1}, {-5, -3}}, {{0}, {1}}, {{5, 0}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];κ = LQRegulatorGains[ssm, {{{10, 0}, {0, 10}}, {{0.1}}}]ℓ = LQEstimatorGains[{ssm, 1, 1}, {{{}}, (0.1)}]EstimatorRegulator[ssm, {ℓ, κ}]ℯ𝓇 = EstimatorRegulator[StateSpaceModel[{{{2, 1}, {-3, 1.5}}, {{1}, {1}}, {{1, 0}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None], {(| |
| - |
| 2 |
| 5 |), (1 4)}, "Data"]ℯ𝓇[{"ClosedLoopSystem", "EstimatorModel", "InputCount"}]スコープ (31)
基本的な用法 (8)
StateSpaceModel[{{{1}}, {{1}}, {{1}}}, SystemsModelLabels -> {"uf", "ym"}]EstimatorRegulator[%, {(7), (4)}]sspec = <|"InputModel" -> StateSpaceModel[{{{2}}, {{2.5, 0.1}}, {{1}}, {{0, 0}}}, SamplingPeriod -> None,
SystemsModelLabels -> {{"uf", "uw"}, "ym", None}], "FeedbackInputs" -> 1|>;EstimatorRegulator[sspec, {(8), (2.4)}]sspec = <|"InputModel" -> StateSpaceModel[{{{2}}, {{2.5, 0.1}}, {{1}}, {{0, 0}}}, SamplingPeriod -> None,
SystemsModelLabels -> {{uf, ue}, ym, None}], "FeedbackInputs" -> 1, "ExogenousInputs" -> 2|>;EstimatorRegulator[sspec, {(8), (2.4)}]sspec = <|"InputModel" -> StateSpaceModel[{{{0, 1}, {-1, -1}}, {{0}, {1}}, {{1, 0}, {0, 1}}, {{0}, {0}}},
SamplingPeriod -> None, SystemsModelLabels -> {{uf},
{xm, vm}}], "MeasuredOutputs" -> 1|>;フィードバック入力と測定された出力だけが推定器調整器にフィードされる:
EstimatorRegulator[sspec, {(| |
| -- |
| 12 |
| 29 |), (9 5)}]ssm = StateSpaceModel[{{{1, 1}, {1, 0}}, {{0}, {-1}}, {{2, 1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];κ = StateFeedbackGains[ssm, {-2 + 0.7I, -2 - 0.7I}]ℓ = EstimatorGains[ssm, {-5, -6}]EstimatorRegulator[ssm, {ℓ, κ}]ssm = StateSpaceModel[{{{1, 1}, {1, 0}}, {{0}, {-1}}, {{2, 1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];κ = LQRegulatorGains[ssm, {(| | |
| --- | --- |
| 0.5 | 0 |
| 0 | 0.1 |), (0.01)}]ℓ = LQEstimatorGains[{ssm, 1, 1}, {{{}}, {{1.0}}}]EstimatorRegulator[ssm, {ℓ, κ}]ssm = StateSpaceModel[{{{1, 1}, {1, 0}}, {{0}, {-1}}, {{2, 1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];κ = LQRegulatorGains[ssm, {(| | |
| --- | --- |
| 0.5 | 0 |
| 0 | 0.1 |), (0.01)}]ℓ = EstimatorGains[ssm, {-5 + 1.5 I, -5 - 1.5 I}]EstimatorRegulator[ssm, {ℓ, κ}]ssm = StateSpaceModel[{{{1, 1}, {1, 0}}, {{0}, {-1}}, {{2, 1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];𝒸𝒹 = LQRegulatorGains[ssm, {(| | |
| --- | --- |
| 0.5 | 0 |
| 0 | 0.1 |), (0.01)}, "Data"]ℓ = EstimatorGains[ssm, {-5 + 1.5 I, -5 - 1.5 I}]EstimatorRegulator[ssm, {ℓ, 𝒸𝒹}]工場モデル (5)
連続時間StateSpaceModel:
ssm = StateSpaceModel[{{{a}}, {{b}}, {{c}}, {{d}}},
SamplingPeriod -> None, SystemsModelLabels -> None];er = EstimatorRegulator[ssm, {(ℓ), (κ)}]SystemsConnectionsModel[{ssm, er, StateSpaceModel[{{}, {}, {}, {{1, -1}}}, SamplingPeriod -> None, SystemsModelLabels -> None]}, {{3, 1} -> {1, 1}, {3, 1} -> {2, 1}, {1, 1} -> {2, 2}, {2, 1} -> {3, 2}}, {{3, 1}}, {{1, 1}} ]//SystemsModelMergecsys = EstimatorRegulator[ssm, {(ℓ), (κ)}, "ClosedLoopSystem"]//SimplifyTransferFunctionPoles[TransferFunctionModel[csys, s]][[1]]離散時間StateSpaceModel:
ssm = StateSpaceModel[{{{a}}, {{b}}, {{c}}, {{d}}},
SamplingPeriod -> τ, SystemsModelLabels -> None] ;er = EstimatorRegulator[ssm, {(ℓ), (κ)}]csys = EstimatorRegulator[ssm, {(ℓ), (κ)}, "ClosedLoopSystem"]//SimplifyTransferFunctionPoles[TransferFunctionModel[csys]]//FlattenディスクリプタStateSpaceModel:
ssm = StateSpaceModel[{{{a}}, {{b}}, {{c}}, {{d}},
{{e}}}, SamplingPeriod -> None, SystemsModelLabels -> None];er = EstimatorRegulator[ssm, {(ℓ), (κ)}]csys = EstimatorRegulator[ssm, {(ℓ), (κ)}, "ClosedLoopSystem"]//SimplifyTransferFunctionPoles[TransferFunctionModel[csys]]//Flattenゲイン集合のあるAffineStateSpaceModel:
assm = AffineStateSpaceModel[{{a[x]}, {{b[x]}},
{c[x]}, {{d[x]}}},
{{x, Subscript[𝓍, 0]}},
{{u, Subscript[𝓊, 0]}}, {Automatic}, Automatic, SamplingPeriod -> None];
gains = {ℓ, {-Subscript[𝓊, 0] + κ(x - Subscript[𝓍, 0])}};er = EstimatorRegulator[assm, gains]csys = EstimatorRegulator[assm, gains, "ClosedLoopSystem"]poles = TransferFunctionPoles @* TransferFunctionModel;
poles[csys]poles[EstimatorRegulator[StateSpaceModel@assm, {(ℓ), (κ)}, "ClosedLoopSystem"]]% - %%//Flatten集合またはゲインがあるNonlinearStateSpaceModel:
nssm = NonlinearStateSpaceModel[{{f[x, u]},
{g[x, u]}},
{{x, Subscript[𝓍, 0]}},
{{u, Subscript[𝓊, 0]}}, {y}, Automatic,
SamplingPeriod -> None];
gains = {(ℓ), {-Subscript[𝓊, 0] + κ(x - Subscript[𝓍, 0])}};EstimatorRegulator[nssm, gains]csys = EstimatorRegulator[nssm, gains, "ClosedLoopSystem"]poles = TransferFunctionPoles @* TransferFunctionModel;
poles[csys]poles[EstimatorRegulator[StateSpaceModel@nssm, {(ℓ), (κ)}, "ClosedLoopSystem"]]% - %%//Flatten特性 (10)
デフォルトで,EstimatorRegulatorは推定器と調整器からなるコントローラを返す:
ssm = StateSpaceModel[{{{-0.1}}, {{1.}}, {{0.1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];
gains = {(49), (1.9)};EstimatorRegulator[ssm, gains]EstimatorRegulator[ssm, gains, "EstimatorRegulatorModel"]EstimatorRegulator[StateSpaceModel[{{{-0.1}}, {{1.}}, {{0.1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None], {(49), (1.9)}, "StateEstimatorModel"]EstimatorRegulator[StateSpaceModel[{{{-0.1}}, {{1.}}, {{0.1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None], {(49), (1.9)}, "FeedbackGainsModel"]EstimatorRegulator[StateSpaceModel[{{{-0.1}}, {{1.}}, {{0.1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None], {(49), (1.9)}, "ClosedLoopSystem"]EstimatorRegulator[StateSpaceModel[{{{-0.1}}, {{1.}}, {{0.1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None], {(49), (1.9)}, "BlockDiagram"]EstimatorRegulator[StateSpaceModel[{{{-0.1}}, {{1.}}, {{0.1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None], {(49), (1.9)}, "ClosedLoopPoles"]sspec = <|"InputModel" -> StateSpaceModel[{{{0, -4}, {1, -5}}, {{2, -4}, {1, -1}}, {{0, 1}}, {{0, 1}}},
SamplingPeriod -> None, SystemsModelLabels -> None], "FeedbackInputs" -> 1|>;
gains = {{{16}, {4}}, {{1, -4}}};erf = EstimatorRegulator[sspec, gains, "EstimatorRegulatorFeedbackModel"]このモデルでは,フィードバック入力は直接フィードバックされる:
{estim, reg} = EstimatorRegulator[sspec, gains, {"StateEstimatorModel", "FeedbackGainsModel"}]SystemsModelFeedbackConnect[SystemsModelSeriesConnect@@{estim , reg}, {{1, 1}}]推定器と調整器をフィードバックで組み立てて前と同じ結果を得る:
SystemsModelFeedbackConnect[SystemsModelSeriesConnect@@{estim , reg}, {{1, 1}}]{SystemsModelFeedbackConnect[sspec["InputModel"], erf, {1}, {1}], EstimatorRegulator[sspec, gains, "ClosedLoopSystem"]}EstimatorRegulator[StateSpaceModel[{{{-0.1}}, {{1.}}, {{0.1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None], {(49), (1.9)}, "Design"]Dataset[Table[{prop, EstimatorRegulator[IconizedObject[«sspec»], IconizedObject[«gains»], prop]}, {prop, IconizedObject[«props»]}]]𝒸𝒹 = EstimatorRegulator[IconizedObject[«sspec»], IconizedObject[«gains»], "Data"]𝒸𝒹["Properties"]𝒸𝒹["EstimatorGains"]追跡 (5)
sspec = <|"InputModel" -> StateSpaceModel[{{{0, 1}, {-5, -3}}, {{0}, {1}}, {{5, 0}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None], "TrackedOutputs" -> 1|>;{ℓ, 𝒸𝒹} = {EstimatorGains[sspec, {-8 + I, -8 - I}], StateFeedbackGains[sspec, {-4 + 2I, -4 - 2I, -2}, "Data"]}ℯ𝓇 = EstimatorRegulator[sspec, {ℓ, 𝒸𝒹}, "Data"]OutputResponse[ℯ𝓇["ClosedLoopSystem"], 1, {t, 0, 5}];
Plot[{1, %}, {t, 0, 5}, IconizedObject[«plotOpts»]]ℯ𝓇["BlockDiagram"]sspec = <|"InputModel" -> StateSpaceModel[{{{0, 1.}, {0.5, -2.3}}, {{0}, {1.}}, {{1., 0}}, {{0}}}, SamplingPeriod -> 0.1,
SystemsModelLabels -> None], "TrackedOutputs" -> 1|>;{ℓ, κ} = {EstimatorGains[sspec, {0.1 + 0.1I, 0.1 - 0.1I}], StateFeedbackGains[sspec, {0.2 + 0.1I, 0.2 - 0.1I, 0.3}, "Data"]}ℯ𝓇 = EstimatorRegulator[sspec, {ℓ, κ}, "Data"]ref = Table[1, 15];
OutputResponse[ℯ𝓇["ClosedLoopSystem"], ref];
ListStepPlot[{ref, %[[1]]}, IconizedObject[«plotOpts»]]sspec = <|"InputModel" -> StateSpaceModel[{{{2., 0}, {0, -2}}, {{1., 0}, {0, 1}}, {{1, 0}, {3., 1}}, {{0, 0}, {0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> None], "TrackedOutputs" -> {1, 2}|>;𝒸𝒹 = LQRegulatorGains[sspec, {(| | | | |
| - | - | -- | -- |
| 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 0 | 50 | 0 |
| 0 | 0 | 0 | 30 |), (| | |
| - | - |
| 1 | 0 |
| 0 | 1 |)}, "Data"]ℓ = EstimatorGains[sspec, {-2, -3}]ℯ𝓇 = EstimatorRegulator[sspec, {ℓ, 𝒸𝒹}, "Data"]refs = RandomInteger[{-15, -5}, 2];
or = OutputResponse[ℯ𝓇["ClosedLoopSystem"], refs, {t, 0, 10}];Plot[Evaluate[Riffle[refs, or]], {t, 0, 10}, IconizedObject[«plotOpts»]]sspec = <|"InputModel" -> StateSpaceModel[{{{0, 1}, {-5, -3}}, {{0}, {1}}, {{5, 0}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None], "TrackedOutputs" -> 1|>;𝒸𝒹 = LQRegulatorGains[sspec, {(| | | |
| -- | - | -- |
| 10 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 10 |), {{0.1}}}, "Data"]ℓ = EstimatorGains[sspec, {-2, -2.5}]ℯ𝓇 = EstimatorRegulator[sspec, {ℓ, 𝒸𝒹}, "Data"]cm = ℯ𝓇["ControllerModel"]ref = {1};
csys = 𝒸𝒹["ClosedLoopSystem"];
n = SystemsModelOrder[sspec["InputModel"]];cinps = Join[ref, OutputResponse[csys, ref, {t, 0, 5}], StateResponse[csys, ref, {t, 0, 5}][[1 ;; n]]]OutputResponse[cm, cinps, {t, 0, 5}];
Plot[%, {t, 0, 5}, PlotRange -> All]tSig = Function[{r, t}, r''[t] + r[t]]m = Max[Join[Cases[tSig[r, t], Derivative[n_][r][t] :> n], {0}]]ref1 = r[t] /. DSolve[Join[{tSig[r, t] == 0}, {r[0] == 1, r'[0] == 0}], r[t], t]
ref2 = r[t] /. DSolve[Join[{tSig[r, t] == 0}, {r[0] == 0, r'[0] == 1}], r[t], t]ref = RandomReal[{1, 5}] ref1 + RandomReal[{1, 5}] ref2sspec = <|"InputModel" -> StateSpaceModel[{{{-1}}, {{1}}, {{1}}, {{0}}}, SamplingPeriod -> None, SystemsModelLabels -> None], "TrackedOutputs" -> {1}, "TrackedSignal" -> tSig|>;{q, k} = {Length[sspec["TrackedOutputs"]], SystemsModelOrder[sspec["InputModel"]]}{qq, rr} = {(| | | |
| - | - | - |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |), {{0.1}}};
Join[Dimensions[qq], {k + m q}]𝒸𝒹 = LQRegulatorGains[sspec, {qq, rr}, "Data"]ℯ𝓇 = EstimatorRegulator[sspec, {{{-3}}, 𝒸𝒹}, "Data"]OutputResponse[ℯ𝓇["ClosedLoopSystem"], ref, {t, 0, 15}];
Plot[{ref, %}, {t, 0, 15}, IconizedObject[«plotOpts»]]閉ループ系 (3)
assm = AffineStateSpaceModel[{{Subscript[x, 2], -Subscript[x, 2] -
Subscript[x, 1]*(1 + Subscript[x, 2])},
{{0}, {-1 - Subscript[x, 1] - Subscript[x, 2]}},
{Subscript[x, 1]}, {{0}}}, {Subscript[x, 1],
Subscript[x, 2]}, {u}, {Automatic}, Automatic, SamplingPeriod -> None];{ℓ, κ} = {{{10}, {19}}, {{-3.01, -3}}};csysNL = EstimatorRegulator[assm, {ℓ, κ}, "ClosedLoopSystem"]//ExpandAllssm = StateSpaceModel[assm];
csysL = EstimatorRegulator[ssm, {ℓ, κ}, "ClosedLoopSystem"]Table[OutputResponse[{sys, {7}}, {0, 0}, {t, 0, 10}], {sys, {csysL, csysNL}}];
Plot[%, {t, 0, 10}, IconizedObject[«plotOpts»]]工場の閉ループ系をEstimatorRegulatorで組み立てる:
ssm = StateSpaceModel[{{{0, -2.02}, {1, -10.2}}, {{1}, {0}}, {{0, 1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];{ℓ, κ} = {{{6}, {-4}}, {{-7.2, 73.42}}};EstimatorRegulator[ssm, {ℓ, κ}, "ClosedLoopSystem"]erUm = EstimatorRegulator[ssm, {ℓ, κ}, {"ClosedLoopSystem", <|"Merge" -> False|>}]SystemsModelMerge[erUm]EstimatorRegulator[ssm, {ℓ, κ}, {"ClosedLoopSystem", <|"Merge" -> True|>}]sm = CreateSystemModel["UnstableSystem", {x''[t] == x[t] + u[t], y[t] == x[t]}, t, {"u"∈"Modelica.Blocks.Interfaces.RealInput", "y"∈"Modelica.Blocks.Interfaces.RealOutput"}];csysName = "StabilizedSystem";csys = EstimatorRegulator[sm, {EstimatorGains[sm, {-3, -4}], StateFeedbackGains[sm, {-2 + 0.7I, -2 - 0.7I}]}, {"ClosedLoopSystem", <|"ModelName" -> csysName|>}]csys["ModelName"]この名前を直接使って他の関数で閉ループ系を指定することができる:
SystemModelSimulate[csysName, {"y"}, 7, <|"InitialValues" -> {"sys.x" -> 0.1}|>]SystemModelPlot[%, All, PlotRange -> All]アプリケーション (11)
力学系 (3)
ssm = StateSpaceModel[{{{0, 1, 0, 0, 0, 0},
{-(Subscript[k, 1] + α*Subscript[k, 2])/
Subscript[m, 1], 0, α*(Subscript[k, 2]/
Subscript[m, 1]), 0, 0, 0}, {0, 0, 0, 1, 0, 0},
{α*(Subscript[k, 2]/Subscript[m, 2]), 0,
(-α)*(Subscript[k, 2]/Subscript[m, 2]), 0, 0, 0},
{0, 0, 0, 0, 0, 1}, {0, 0, 0, 0, -Subscript[k, 2]/Subscript[m, 2],
0}}, {{0}, {Subscript[m, 1]^(-1)}, {0}, {0}, {0}, {0}},
{{1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0}}, {{0}, {0}}},
{{Subscript[x, 1][t], 0}, Subscript[, 1],
{Subscript[x, 2][t], 0}, Subscript[, 2],
{Subscript[y, 2][t], 0}, Subscript[, 3]},
{{F[t], 0}}, Automatic, t, SamplingPeriod -> None,
SystemsModelLabels -> None] /. α -> (Δl/Subscript[l, 0] + Δl) /. IconizedObject[«pars»];ControllableModelQ[ssm]ctrsys = ControllableDecomposition[ssm][[2]]//ChopStateResponse[{ssm, {0.2, 0, 0.5, 0, -0.3, 0}}, 0, {t, 0, 5}][[{1, 3, 5}]];
Table[Plot[𝓈𝓇[[1]], {t, 0, 5}, IconizedObject[«plotOpts»]], {𝓈𝓇, ({%, {Subscript[x, 1], Subscript[x, 2], Subscript[y, 2]}})}]𝒸𝒹 = LQRegulatorGains[ctrsys, {DiagonalMatrix[{10^3, 1, 10^3, 1}], {{1}}}, "Data"]ℓ = EstimatorGains[ctrsys, {-8, -7.5, -6.5, -6}]ℯ𝓇 = EstimatorRegulator[ctrsys, {ℓ, 𝒸𝒹}, "Data"]csys = ℯ𝓇[{"ClosedLoopSystem", <|"InputModel" -> ssm, "Merged" -> True|>}]sr = StateResponse[{csys, {0.2, 0, 0.5, 0, -0.3, 0}}, 0, {t, 0, 10}][[{1, 3, 5}]];
Table[Plot[𝓈𝓇[[1]], {t, 0, 10}, IconizedObject[«plotOpts»]], {𝓈𝓇, ({sr[[1 ;; 2]], {Subscript[x, 1], Subscript[x, 2]}})}]Plot[sr[[3]], {t, 0, 10}, PlotRange -> All, ImageSize -> Small, PlotLabel -> Subscript[y, 2]]cm = ℯ𝓇["ControllerModel"]OutputResponse[cm, Join[{0}, sr[[1 ;; 2]]], {t, 0, 10}];
Plot[%, {t, 0, 10}, PlotRange -> All]
ssm = StateSpaceModel[IconizedObject[«eqns»] /. IconizedObject[«pars»], {Subscript[x, 1][t], Subscript[x, 2][t], Subscript[x, 3][t]}, f[t], {Subscript[x, 1][t], Subscript[x, 2][t], Subscript[x, 3][t]}, t, IconizedObject[«labels»]]OutputResponse[ssm, UnitBox[t - 1 / 2], {t, 0, 120}];
Plot[%, {t, 0, 120}, PlotRange -> All, PlotLegends -> {Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]}]κ = LQRegulatorGains[ssm, {DiagonalMatrix[{10^2, 10^4, 10^2, 10^4, 10^2, 10^4}], {{10}}}]p = {-8.58, -2.08, -0.16 + 1.58 I, -0.16 - 1.58 I, -0.24 + 0.84 I, -0.24 - 0.84 I};
MatrixForm[ℓ = EstimatorGains[ssm, p]]ℯ𝓇 = EstimatorRegulator[ssm, {ℓ, κ}, "Data"]csys = ℯ𝓇["ClosedLoopSystem"]//SystemsModelMergesr = StateResponse[csys, UnitBox[t - 1 / 2], {t, 0, 60}];
Plot[Evaluate[sr[[{1, 3, 5}]]], {t, 0, 60}, IconizedObject[«plotOpts»]]cm = ℯ𝓇["ControllerModel"]//SystemsModelMergeOutputResponse[cm, Join[{0}, sr], {t, 0, 60}];
Plot[%, {t, 0, 60}, PlotRange -> All]
cpend = NonlinearStateSpaceModel[IconizedObject[«eqns»] /. IconizedObject[«pars»], {Subscript[θ, 1][t], Subscript[θ, 2][t]}, 𝒯[t], {Subscript[θ, 1][t], Subscript[θ, 2][t]}, t]cpend = NonlinearStateSpaceModel[cpend, Automatic, Automatic, Automatic, None];
OutputResponse[{cpend, {π, 0, -π, 0} / 12}, 0, {t, 0, 10}];
Plot[%, {t, 0, 10}, PlotRange -> All, PlotLegends -> {Subscript[θ, 1], Subscript[θ, 2]}]ℓ = EstimatorGains[cpend, {-7 + 2I, -7 - 2I, -6, -5}];
MatrixForm[%]κ = LQRegulatorGains[cpend, {DiagonalMatrix[{10^4, 10^-1, 10^4, 10^-1}], {{0.01}}}]ℯ𝓇 = EstimatorRegulator[cpend, {ℓ, κ}, "Data"]csys = ℯ𝓇["ClosedLoopSystem"]sr = StateResponse[{csys, PadRight[{π, 0, -π} / 12, 8]}, 0, {t, 0, 10}];
Plot[Evaluate@sr[[{1, 3}]], {t, 0, 10}, PlotRange -> All, PlotLegends -> {Subscript[θ, 1], Subscript[θ, 2]}]cm = ℯ𝓇["ControllerModel"]OutputResponse[cm, Join[{0}, sr[[1 ;; 4]]], {t, 0, 10}];
Plot[%, {t, 0, 10}, PlotRange -> All]航空宇宙系 (3)
sat = StateSpaceModel[IconizedObject[«eqns»], {x[t], x'[t], y[t], y'[t]}, {Subscript[f, x][t], Subscript[f, y][t]}, {x[t], y[t]}, t, IconizedObject[«labels»]] /. ω -> 0.0011dSat = ToDiscreteTimeModel[sat, τ = 0.05]//ChopOutputResponse[{dSat, {0, 0.2, 0, 0.3}}, Table[{0, 0}, 100]];
ListStepPlot[%, DataRange -> {0, 99 τ}, IconizedObject[«plotOpts»]]MatrixForm[κ = StateFeedbackGains[dSat, {-0.2, -0.15, -0.3, -0.25}]]MatrixForm[ℓ = EstimatorGains[dSat, 2 {-0.2, -0.15, -0.3, -0.25}]]ℯ𝓇 = EstimatorRegulator[dSat, {ℓ, κ}, "Data"]csys = SystemsModelMerge@ℯ𝓇["ClosedLoopSystem"]//Chopor = OutputResponse[{csys, {0.25, 15, -0.25, 15, 0, 0, 0, 0}}, Table[{0, 0}, 15]];
ListStepPlot[or, DataRange -> {0, 14 τ}, PlotRange -> All, PlotLegends -> {"x", "y"}]cm = SystemsModelMerge@ℯ𝓇["ControllerModel"]OutputResponse[cm, Join[Table[{0, 0}, 15], or]];
ListStepPlot[%, DataRange -> {0, 14 τ}, PlotRange -> All, PlotLegends -> {Subscript[f, x], Subscript[f, y]}]ℯ𝓇[{"ClosedLoopSystem", <|"Merged" -> False|>}]
ssm = StateSpaceModel[IconizedObject[«eqns»] /. IconizedObject[«pars»], {θ[t], θ'[t], x'[t]}, δ[t], θ[t], t, IconizedObject[«labels»]]PoleZeroPlot[ssm]κ = StateFeedbackGains[ssm, {-1.5 + 0.5I, -1.5 - 0.5 I, -2}]ℓ = EstimatorGains[ssm, {-3 + 0.5 I , -3 - 0.5I, -5}]ℯ𝓇 = EstimatorRegulator[ssm, {ℓ, κ}, "Data"]csys = SystemsModelMerge[ℯ𝓇["ClosedLoopSystem"]]sr = StateResponse[{csys, PadRight[{0.1°, 0, 0.1}, 6]}, 0, {t, 0, 10}];
Table[Plot[𝓈𝓇[[1]], {t, 0, 10}, IconizedObject[«plotOpts»]], {𝓈𝓇, ({sr[[1 ;; 3]], {θ, θ', x}})}]Plot[-κ.sr[[4 ;; 6]], {t, 0, 10}, PlotRange -> All]
drone = NonlinearStateSpaceModel[IconizedObject[«eqns»], IconizedObject[«states»], IconizedObject[«ins»], IconizedObject[«outs»], t] /. IconizedObject[«pars»]
drone = NonlinearStateSpaceModel[drone, Automatic, Automatic, Automatic, None];OutputResponse[{drone, {0, 0, 0, 0, 0, 0, 100, 0}}, {0, 0, 0, 0}, {t, 0, 4}];
Plot[%[[1]], {t, 0, 4}, PlotRange -> All]wts = {(| | | | | | | | | |
| - | -- | - | -- | - | -- | - | -- | -- |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 10 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 10 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 10 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 10 |), (1/9^2)IdentityMatrix[4]};sspec = <|"InputModel" -> drone, "TrackedOutputs" -> 1|>;𝒸𝒹 = LQRegulatorGains[sspec, wts, "Data"]p = {-15, -2 + I, -2 - I, -1.5 + I, -1.5 - I, -1 + 0.8I, -1 - 0.8I, -2};
MatrixForm[ℓ = EstimatorGains[sspec, p]]ℯ𝓇 = EstimatorRegulator[sspec, {ℓ, 𝒸𝒹}, "Data"]Style[csys = ℯ𝓇["ClosedLoopSystem"]//Simplify//Chop, Small]ref = {10};
sr = StateResponse[csys, {ref}, {t, 0, 100}];
Plot[{%[[7]], ref}, {t, 0, 10}, IconizedObject[«plotOpts»]]cm = ℯ𝓇["ControllerModel"]//N//Simplify//ChopShort[cinps = Join[{ref}, OutputResponse[csys, ref, {t, 0, 100}], sr[[1 ;; 8]]]]OutputResponse[cm, cinps, {t, 0, 10}][[1]];
Plot[%, {t, 0, 10}, PlotRange -> All]生物系 (1)
nssm = NonlinearStateSpaceModel[IconizedObject[«eqns»] /. IconizedObject[«pars»], {𝒢[t], 𝒳[t], 𝒴[t]}, {{𝒾[t], 16.6667}, h[t]}, 𝒢[t], t]olp = TransferFunctionPoles[TransferFunctionModel[nssm]]したがって,開ループ系のグルコースレベルが落ち着くまでには時間がかかる:
OutputResponse[nssm, {0, UnitStep[t]}, {t, 0, 360}];
Plot[%, {t, 0, 360}, PlotRange -> All]外因性インスリン注入速度をフィードバック入力として設定し,一連の最適ゲインを計算する:
sspec = <|"InputModel" -> NonlinearStateSpaceModel[nssm, Automatic, Automatic, Automatic, None], "FeedbackInputs" -> 1|>;κ = LQRegulatorGains[sspec, {DiagonalMatrix[{1000, 0.5, 0.5}], {{0.1}}}]ℓ = EstimatorGains[sspec, {-3, -5, -6}]ℯ𝓇 = EstimatorRegulator[sspec, {ℓ, κ}, "Data"]csys = ℯ𝓇["ClosedLoopSystem"]sr = StateResponse[csys, {0, UnitStep[t]}, {t, 0, 60}];
Plot[%[[1]], {t, 0, 60}, PlotRange -> All]cm = ℯ𝓇["ControllerModel"]OutputResponse[cm, Join[{0}, sr], {t, 0, 60}];
Plot[%, {t, 0, 60}, PlotRange -> All]化学系 (2)
ferm = NonlinearStateSpaceModel[IconizedObject[«eqns»], {{𝒳[t], x0}, {𝒮[t], s0}}, {{ℱ[t], f0}}, 𝒳[t], t] /. IconizedObject[«pars»]OutputResponse[{ferm, {0.1, 0.3}}, 0, {t, 0, 10}];
Plot[%, {t, 0, 10}, PlotRange -> All]ferm = NonlinearStateSpaceModel[ferm, Automatic, Automatic, Automatic, None];
κ = LQRegulatorGains[ferm, {{{10, 0}, {0, 10}}, {{0.1}}}]ℓ = EstimatorGains[ferm, {-1 + 2I, -1 - 2I}]ℯ𝓇 = EstimatorRegulator[ferm, {ℓ, κ}, "Data"]csys = ℯ𝓇["ClosedLoopSystem"]//Simplifysr = StateResponse[{csys, {5.1, 0.3, 0, 0}}, 0, {t, 0, 20}];
Plot[sr[[1]], {t, 0, 20}, PlotRange -> All]Plot[-κ /. Thread[{𝒳, 𝒮} -> sr[[1 ;; 2]]], {t, 0, 20}, PlotRange -> All]
tank = StateSpaceModel[IconizedObject[«eqns»], IconizedObject[«vars»], {{Subscript[q, 1][t], Subscript[q, 10]}, {Subscript[q, 2][t], Subscript[q, 20]}}, {q[t], c[t]}, t, DescriptorStateSpace -> True, IconizedObject[«labels»]] /. IconizedObject[«pars»]OutputResponse[tank, {UnitBox[t], UnitBox[t]}, {t, 0, 300}];
Plot[%, {t, 0, 300}, PlotRange -> All, PlotLegends -> {"SubscriptBox[c, 1]", "SubscriptBox[c, 2]"}]Table[ControllableModelQ[{tank, i}], {i, {"Fast", "Slow"}}]𝒸𝒹 = StateFeedbackGains[tank, {-1.5, -2}, "Data"]ℓ = EstimatorGains[tank, {-3, -5}]ℯ𝓇 = EstimatorRegulator[tank, {ℓ, 𝒸𝒹}, "Data"]csys = ℯ𝓇["ClosedLoopSystem"]or = OutputResponse[csys, {UnitBox[t], UnitBox[t]}, {t, 0, 4}];
Plot[%, {t, 0, 4}, PlotRange -> All, PlotLegends -> {"q", "c"}]cm = ℯ𝓇["ControllerModel"]OutputResponse[cm, Join[{0, 0}, or], {t, 0, 4}];
Plot[%, {t, 0, 4}, PlotRange -> All, PlotLegends -> {"SubscriptBox[q, 1]", "SubscriptBox[q, 2]"}]電気系 (2)
降圧コンバータによって駆動されているDCモーターを調整する:
dcm = StateSpaceModel[IconizedObject[«eqns»], {Subscript[i, l][t], Subscript[u, c][t], Subscript[i, a][t], ω[t]}, δ[t], ω[t], t, IconizedObject[«labels»]] /. IconizedObject[«pars»]p = Eigenvalues[First@Normal@dcm]OutputResponse[{dcm, {0, 0, 0, 10}}, 0, {t, 0, 100}];
Plot[%, {t, 0, 100}, PlotRange -> All]κ = StateFeedbackGains[dcm, {-5088, -2270, -124, -1}]ℓ = LQEstimatorGains[{dcm, All}, {{{10}}, {{10^3}}}]ℯ𝓇 = EstimatorRegulator[dcm, {ℓ, κ}, "Data"]csys = ℯ𝓇["ClosedLoopSystem"]sr = StateResponse[{csys, {0, 0, 0, 10, 0, 0, 0, 0}}, 0, {t, 0, 20}];
Plot[%[[4]], {t, 0, 10}, PlotRange -> All]cm = ℯ𝓇["ControllerModel"]OutputResponse[cm, Join[{0}, sr], {t, 0, 14}];
Plot[%, {t, 0, 14}, PlotRange -> All]
psys = StateSpaceModel[{{{0, 377, 0, 0, 0, 0, 0}, {-0.246, -0.156, -0.137, -0.123, -0.0124, -0.0546, 0},
{0.109, 0.262, -2.17, 2.3, -0.0171, -0.0753, 1.27}, {-4.58, 0, 30, -34.3, 0, 0, 0},
{-0.161, 0, 0, 0, -8.44, 6.33, 0}, {-1.7, 0, 0, 0, 15.2, -21.5, 0},
{-33.9, -23.1, 6.86, -59.5, 1.5, 6.63, -114}}, {{0}, {0}, {0}, {0}, {0}, {0}, {17.6}},
{{-0.123, 1.05, 0.23, 0.207, -0.105, -0.46, 0}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> {{Subscript[v, f]},
{Subscript[v, term]}, {θ, ω,
Subscript[v, q], Subscript[ϕ, d],
Subscript[v, d], Subscript[ϕ, q],
Subscript[v, ext]}}];Cases[Chop[Eigenvalues[First[Normal[psys]]]], _Complex]OutputResponse[{psys, {0.175, 0, 0, 0, 0, 0, 0}}, 0, {t, 0, 10}];
Plot[%, {t, 0, 10}, PlotRange -> All]p = {-60, -25, -20, -7.5 + 0.5 I, -7.5 - 0.5 I, -5, -4};
MatrixForm[κ = StateFeedbackGains[psys, p]]MatrixForm[ℓ = EstimatorGains[psys, 2 p]]ℯ𝓇 = EstimatorRegulator[psys, {ℓ, κ}, "Data"]csys = ℯ𝓇["ClosedLoopSystem"]同期マシンにおける摂動に対する閉ループ応答は減衰されており,速い:
or = OutputResponse[{csys, PadRight[{0.175}, 14]}, 0, {t, 0, 2}];
Plot[or, {t, 0, 2}, PlotRange -> All]cm = ℯ𝓇["ControllerModel"]OutputResponse[cm, or, {t, 0, 2}];
Plot[%, {t, 0, 2}, PlotRange -> All]特性と関係 (7)
閉ループ極は,推定器および状態フィードバック設計のものである:
ssm = StateSpaceModel[{{{a}}, {{b}}, {{c}}, {{0}}},
SamplingPeriod -> None, SystemsModelLabels -> None];EstimatorRegulator[ssm, {(ℓ), (κ)}, "ClosedLoopPoles"]StateOutputEstimator[ssm, (ℓ)];
Eigenvalues[First[Normal[%]]]SystemsModelStateFeedbackConnect[ssm, (κ)];
Eigenvalues[First[Normal[%]]]StateFeedbackGainsおよびEstimatorGainsからのゲインを使って組み立てられた推定器調整器:
ssm = StateSpaceModel[{{{0, 1}, {-3, -0.5}}, {{0}, {1}}, {{1, 0}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];
p = {-2 + 3I, -2 - 3I};ℓ = EstimatorGains[ssm, 2p]𝒸𝒹 = StateFeedbackGains[ssm, p, "Data"];
κ = 𝒸𝒹["FeedbackGainsModel"]推定器調整器はゲインまたはコントローラデータオブジェクトを使って組み立てられる:
Table[EstimatorRegulator[ssm, {ℓ, sf}], {sf, {κ, 𝒸𝒹}}]LQRegulatorGainsおよびEstimatorGainsからのゲインを使って組み立てられた推定器調整器:
ssm = StateSpaceModel[{{{0, 1}, {-2, -1.5}}, {{0}, {1}}, {{1, 0}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];
p = {-1 + 2I, -1 - 2I};ℓ = EstimatorGains[ssm, p]𝒸𝒹 = LQRegulatorGains[ssm, {(| | |
| -- | -- |
| 10 | 0 |
| 0 | 10 |), {{1}}}, "Data"];
κ = 𝒸𝒹["FeedbackGains"]推定器調整器はゲインまたはコントローラデータオブジェクトを使って組み立てられる:
Table[EstimatorRegulator[ssm, {ℓ, k}], {k, {κ, 𝒸𝒹}}]DiscreteLQRegulatorGainsおよびDiscreteLQEstimatorGainsからのゲインを使って組み立てられた推定器調整器:
ssm = StateSpaceModel[{{{0, 1}, {-3, -0.5}}, {{0, 1}, {1, 0}}, {{1, 0}}, {{0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> None];
τ = 0.1;ℓ = DiscreteLQEstimatorGains[ssm, {(| | |
| --- | -- |
| 100 | 0 |
| 0 | 10 |), {{1}}}, τ]κ = DiscreteLQRegulatorGains[ssm, {(| | |
| - | - |
| 1 | 0 |
| 0 | 1 |), (| | |
| - | - |
| 1 | 0 |
| 0 | 1 |)}, τ]StateSpaceModel[EstimatorRegulator[ssm, {ℓ, κ}], SamplingPeriod -> τ]LQGRegulatorはEstimatorRegulatorを使って組み立てられる:
ssm = StateSpaceModel[{{{-2.9, 5}, {0.8, -1.3}}, {{-1.1}, {0}}, {{1, 0}}, {{0.1}}}, SamplingPeriod -> 1,
SystemsModelLabels -> None];{cvs, wts} = {{{{}}, (0.1)}, {(| | |
| ---- | ---- |
| 10^4 | 0 |
| 0 | 10^2 |), (10^2)}};lqg = LQGRegulator[ssm, cvs, wts]κ = LQRegulatorGains[ssm, wts]ℓ = LQEstimatorGains[{ssm, 1, 1}, cvs]er = EstimatorRegulator[ssm, {ℓ, κ}]Normal[lqg] - Normal[er]安定化可能な系の制御不可能な極は推定器調整器の影響を受けない:
ssm = StateSpaceModel[{{{0, 0, 6}, {1, 0, -1}, {0, 1, -4}}, {{2}, {1}, {0}}, {{0, 0, 1}}, {{0}}},
SamplingPeriod -> None, SystemsModelLabels -> None];p = Eigenvalues[First[Normal[ssm]]];Table[{i, ControllableModelQ[{ssm, {i}}]}, {i, p}]Subscript[p, est] = {-10, -6, -3};
ℓ = EstimatorGains[ssm, Subscript[p, est]]κ = LQRegulatorGains[ssm, {DiagonalMatrix[{10, 10, 1000}], {{1.}}}]Subscript[p, csys] = EstimatorRegulator[ssm, {ℓ, κ}, "ClosedLoopPoles"]//ChopSubscript[p, reg] = Complement[Subscript[p, csys], Subscript[p, est], SameTest -> (Chop[#1 - #2] == 0.&)]Intersection[p, Subscript[p, reg], SameTest -> (Chop[#1 - #2] == 0.&)]推定器ゲインの結果がより大きいと,応答は速くなるがノイズが多くなる:
sspec = <|"InputModel" -> StateSpaceModel[{{{0, -1.5}, {1., -2.}}, {{1, 0.1}, {0, 0}}, {{0, 1.}}, {{0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> {{uf, uw},
ym, None}], "FeedbackInputs" -> 1|>;κ = StateFeedbackGains[sspec, p = {-2, -3}]ℓ = Table[EstimatorGains[sspec["InputModel"], i p], {i, {2, 6, 18}}];
gnorm = Norm /@ ℓcsys = Table[EstimatorRegulator[sspec, {i, κ},
{"ClosedLoopSystem", <|"NoisyOutputs" -> 1|>}], {i, ℓ}]u𝓋 = Interpolation[Thread[{Range[0, 9.9, 0.1],
RandomReal[ NormalDistribution[0, 0.05], {100}]}], t];
Plot[%, {t, 0, 9.9}]or = Table[OutputResponse[{i, {1, 0}}, {0, 0, u𝓋}, {t, 0, 6}][[1]], {i, csys}]推定器ゲインが増加するにつれて応答は速くなるがノイズの影響も顕著になる:
orNorm = NIntegrate[Abs[or], {t, 0, 6}, MaxRecursion -> 20];
Table[Plot[i[[2]], {t, 0, 6}, IconizedObject[«plotOpts»]], {i, IconizedObject[«list»]}]ListLinePlot[Thread[{gnorm, orNorm}], IconizedObject[«plotOpts»]]関連するガイド
-
▪
- 状態空間モデルを使った設計 ▪
- 非線形制御系
テキスト
Wolfram Research (2010), EstimatorRegulator, Wolfram言語関数, https://reference.wolfram.com/language/ref/EstimatorRegulator.html (2021年に更新).
CMS
Wolfram Language. 2010. "EstimatorRegulator." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2021. https://reference.wolfram.com/language/ref/EstimatorRegulator.html.
APA
Wolfram Language. (2010). EstimatorRegulator. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/EstimatorRegulator.html
BibTeX
@misc{reference.wolfram_2026_estimatorregulator, author="Wolfram Research", title="{EstimatorRegulator}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/EstimatorRegulator.html}", note=[Accessed: 08-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_estimatorregulator, organization={Wolfram Research}, title={EstimatorRegulator}, year={2021}, url={https://reference.wolfram.com/language/ref/EstimatorRegulator.html}, note=[Accessed: 08-September-2026]}