EstimatorGains[ssm,{p1,p2,…,pn}]
推定器の極が pi になるようなStateSpaceModel ssm の推定器ゲイン行列を与える.
EstimatorGains[{ssm,{out1,…}},…]
使用するための計測された出力 outi を指定する.
EstimatorGains
EstimatorGains[ssm,{p1,p2,…,pn}]
推定器の極が pi になるようなStateSpaceModel ssm の推定器ゲイン行列を与える.
EstimatorGains[{ssm,{out1,…}},…]
使用するための計測された出力 outi を指定する.
詳細とオプション
- EstimatorGainsは観測器ゲインあるいは観測器極配置としても知られている.
- 状態空間モデル ssm はStateSpaceModel[{a,b,c,d}]で与えられる.ただし,a,b,c,d は連続時間系あるいは離散時間系のいずれかにおける状態,入力,出力,伝送の各行列を表す.
-

連続時間系 
離散時間系 - ssm が可観測である場合,
の固有値は{p1,p2,…,pn}である.ただし,
は計算された推定器ゲイン行列である. - ディスクリプタ系StateSpaceModel[{a,b,c,d,e}]の場合,指定できる極の数は e の階数と系の可観測性によって決定される. »
- EstimatorGainsは,AffineStateSpaceModelおよびNonlinearStateSpaceModelによって指定される非線形系もまた許容する.
- 非線形系については,状態変数および入力変数の操作値が考慮され,ゲインは近似テイラー線形化に基づいて計算される.
- EstimatorGains[{ssm,{out1,…}},…]はEstimatorGains[ssm1,…]と等価である.ただし,ssm1SystemsModelExtract[ssm,All,{out1,…}]である.
- 観測器の力学は以下で与えられる.
-

連続時間系 
離散時間系 - 正方非特異行列
の場合,状態ベクトルは
で計算できる. - EstimatorGainsは,次の設定で与えられるMethodオプションを取る.
-
Automatic 自動メソッド選択 "Ackermann" Ackermannメソッド "KNVD" Kautsky–Nichols–Van Doorenメソッド - 推定器ゲインは双対系の状態フィードバックゲインとして計算される.
例題
すべて開く すべて閉じる例 (3)
EstimatorGains[StateSpaceModel[{{{2, 3}, {-1, 4}}, {{0}, {1}}, {{1, 0}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None], {-8 - 6 I, -8 + 6I}]EstimatorGains[StateSpaceModel[{{{0.9641, 0.2462, 0.0303}, {-0.2462, 0.9641, 0.1934}, {0, 0, 0.6065}},
{{0.0503}, {0.0296}, {0.0887}}, {{1, 0, 0}}, {{0}}}, SamplingPeriod -> 0.1,
SystemsModelLabels -> None], {0.3, 0.6, 0.7}]EstimatorGains[{StateSpaceModel[{{{3, 0, -1}, {0, 2, 1}, {1, -1, 2}}, {{1, 1}, {0, 3}, {1, -1}},
{{1, -1, 0}, {0, 1, -1}}, {{0, 0}, {0, 0}}}, SamplingPeriod -> None, SystemsModelLabels -> None], 2}, {-1 + 1.5I, -1 - 1.5I, -0.3}]スコープ (6)
{a, b, c} = {(| | |
| -- | - |
| -1 | 0 |
| 1 | 2 |), (| |
| - |
| 0 |
| 1 |), (0 1)};EstimatorGains[StateSpaceModel[{a, b, c}], {-5 + 2I, -5 - 2I}]Eigenvalues[a - %.c]EstimatorGains[StateSpaceModel[{{{-21, 0, 0, 0}, {0.1, -5, 0, 0}, {0, -1.5, 0, 0}, {0, -4, 0, 0}},
{{6000, 0}, {0, 0}, {0, 2.3}, {0, 0.1}}, {{0, 0, 1, 0}, {0, 0, 0, 1}}, {{0, 0}, {0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> None], {-3, -4.7, -8, -12}]EstimatorGains[{StateSpaceModel[{{{-16, 0, 4, 0}, {0, -10, 0, 1}, {0, -6.6, 1.5, 0}, {0, 0, 2, 0}},
{{11, 0}, {0, -4}, {0, 1.8}, {5, 0}}, {{0, 0, 1, 0}, {0, 0, 0, 1}, {1, -0.1, 3, 1}},
{{0, 0}, {0, 0}, {0, 0}}}, SamplingPeriod -> None, SystemsModelLabels -> None], {1, 3}}, {-12, -6.1, -8 + I, -8 - I}]//MatrixForm多項式の根として指定された極を使って推定器ゲインを計算する:
ssm = StateSpaceModel[{{{0, 1}, {-2, -3}}, {{0}, {1}}, {{1, 0}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];poly = λ^2 + 2 0.5 10λ + 100;EstimatorGains[ssm, λ /. Solve[poly == 0, λ]]l = EstimatorGains[StateSpaceModel[
{{{0, 1, 0, 0}, {0, 0, -3*g*(m/(4*m + 7*M)),
0}, {0, 0, 0, 1}, {0, 0, 6*g*((m + M)/
(4*L*m + 7*L*M)), 0}},
{{0}, {7/(4*m + 7*M)}, {0},
{-6/(4*L*m + 7*L*M)}}, {{1, 0, 0, 0}},
{{0}}}, SamplingPeriod -> None, SystemsModelLabels -> None], {Subscript[p, 1], Subscript[p, 2], Subscript[p, 3], Subscript[p, 4]}];Simplify[MatrixForm[l]]AffineStateSpaceModelについてのゲインを計算する:
asys = AffineStateSpaceModel[{{-Sin[0.5 - Subscript[x, 1]],
Subscript[x, 1] - Subscript[x, 2]}, {{1}, {0}},
{Subscript[x, 1]}, {{0}}}, {{Subscript[x, 1], 0.5},
{Subscript[x, 2], 0}}, {u}, {Automatic}, Automatic,
SamplingPeriod -> None];ℓ = EstimatorGains[asys, {-1, -2}]estim = StateOutputEstimator[asys, ℓ]Eigenvalues[First[Normal[StateSpaceModel[estim]]]]オプション (6)
Method (6)
状態より出力が多い系では,AutomaticはLinearSolveを使ってゲインを求める:
EstimatorGains[StateSpaceModel[{{{a}}, {{b}}, {{Subscript[c, 1]},
{Subscript[c, 2]}}, {{0}, {0}}}, SamplingPeriod -> None, SystemsModelLabels -> None], {p}, Method -> Automatic]LinearSolve[{{Subscript[c, 1]}, {Subscript[c, 2]}}, {{a - p}}]デフォルトで厳密値の系にはAckermannメソッドが使われる:
ssm = StateSpaceModel[{{{-1, 1, 1}, {0, -3, 2}, {0, 1, 1}}, {{1}, {2}, {1}}, {{1, 0, 0}, {0, 1, 0}},
{{0}, {0}}}, SamplingPeriod -> None, SystemsModelLabels -> None];EstimatorGains[ssm, {-7, -9, -11}]EstimatorGains[ssm, {-7, -9, -11}, Method -> "Ackermann"] == %ssm = StateSpaceModel[{{{0, 1}, {-c, -b}}, {{0}, {1}},
{{Subscript[k, 1], Subscript[k, 2]}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];EstimatorGains[ssm, {Subscript[p, 1], Subscript[p, 2]}]EstimatorGains[ssm, {Subscript[p, 1], Subscript[p, 2]}, Method -> "Ackermann"] == %数値を持つ系の場合,Automaticでは"KNVD"法が使われる:
ssm = StateSpaceModel[{{{-1.2, 1.}, {0.2, -4.1}}, {{1.}, {1.1}}, {{2., 0.}, {0, 1.}}, {{0}, {0}}},
SamplingPeriod -> None, SystemsModelLabels -> None];
EstimatorGains[ssm, {-1., -2.}, Method -> Automatic]EstimatorGains[ssm, {-1., -2.}, Method -> "KNVD"] === %厳密ではない,多出力状態空間モデルと望ましい推定器の極の位置:
ssm = StateSpaceModel[{{{-20, 0, -20, 0}, {0, -0.79, 9.5, 0}, {0, -1.5, -0.79, 0}, {1, 0, 0, 0}},
{{20, 2.8}, {0, -3.13}, {0, 0}, {0, 0}}, {{2.7, 1, 0, -4.3}, {0, -6.1, -7.7, 0.345}},
{{0, 0}, {0, 0}}}, SamplingPeriod -> None, SystemsModelLabels -> None];
poles = {-40 + 10I, -40 - 10I, -40, -40};ObservabilityMatrix[SystemsModelExtract[ssm, All, 1]];
SingularValueList[%, Tolerance -> 0];
(%[[1]]/%[[-1]])ObservabilityMatrix[SystemsModelExtract[ssm, All, 2]];
SingularValueList[%, Tolerance -> 0];
(%[[1]]/%[[-1]])EstimatorGains[ssm, poles, Method -> "Ackermann"]EstimatorGains[{ssm, 1}, poles, Method -> "Ackermann"]EstimatorGains[StateSpaceModel[{{{1.38, -0.2077, 6.715, -5.676}, {-0.5814, -4.29, 0, 0.675},
{1.067, 4.273, -6.654, 5.893}, {0.048, 4.273, 1.342, -2.104}},
{{0, 1}, {2, 0}, {1.2, -3.7}, {2.1, 0}}, {{0, 5.679, 1.136, 1.136}, {0, 0, -3.146, 0}},
{{0, 0}, {0, 0}}}, SamplingPeriod -> None, SystemsModelLabels -> None], {-0.2, -0.5, -5, -8.67}]アプリケーション (2)
ssm = StateSpaceModel[{{{-3, -2, 2}, {1, -1, 0}, {-2, -1, 0}}, {{1}, {0}, {-1}},
{{1, 0, 0}, {0.5, 0.5, -1}}, {{1}, {0}}}, SamplingPeriod -> None, SystemsModelLabels -> None];l = EstimatorGains[ssm, {-5 + 2I , -5 - 2I , -8}];ssmobsv = SystemsModelExtract[StateOutputEstimator[ssm, l], All, {1, 2, 3}]ランダムな初期条件から入力がSin[t]の系のシミュレーションを行う:
ic = RandomReal[2, 3];stateResp = StateResponse[{ssm, ic}, Sin[t], {t, 2}];y = OutputResponse[{ssm, ic}, Sin[t], {t, 2}];obsvResp = OutputResponse[ssmobsv, Join[{Sin[t]}, y], {t, 2}];MapIndexed[Plot[#, {t, 0, 2}, PlotLabel -> "State " <> ToString[First[#2]], PlotRange -> All, PlotStyle -> {Automatic, Dashed}]&, Thread[{stateResp, obsvResp}]]ssm = StateSpaceModel[{{{0.81, -0.23, -0.045}, {0.09, 0.98, -0.0023}, {0.005, 0.1, 1}},
{{0.09}, {0.0047}, {0.00016}}, {{1, 3.5, 3}}, {{0}}}, SamplingPeriod -> 0.1,
SystemsModelLabels -> None];l = EstimatorGains[ssm, {0.5, 0.6, 0.75}];ssobsv = SystemsModelExtract[StateOutputEstimator[{ssm, All, None}, l, Method -> "PredictionEstimator"], All, {1, 2, 3}]初期状態{1,–0.75,0.5}で初期観測器状態が{0,0,0}の場合の実際の状態と推定される状態を計算する:
stateResp = StateResponse[{ssm, {1, -0.75, 0.5}}, {0}, {t, 6}];y = OutputResponse[{ssm, {1, -0.75, 0.5}}, {0}, {t, 6}];obsvResp = OutputResponse[ssobsv, y];tspan = Range[0, 6, 0.1];ListLinePlot[Replace[Riffle[stateResp, obsvResp], pts : {__} :> Thread[{tspan, pts}], {1}], PlotRange -> All, ImageSize -> Medium, PlotMarkers -> Automatic,
PlotLegends -> {"SubscriptBox[x, 1]", "SubscriptBox[x, 1 obs]", "SubscriptBox[x, 2]", "SubscriptBox[x, 2 obs]", "SubscriptBox[x, 3]", "SubscriptBox[x, 3 obs]"}]特性と関係 (7)
a = (| | |
| -- | -- |
| -1 | 2 |
| 1 | -4 |);
c = (1 0);l = EstimatorGains[StateSpaceModel[{a, Array[Subscript[b, ##]&, {2, 1}], c}], {-7 + I, -7 - I}];StateSpaceModel[{a - l.c, ConstantArray[0, {2, 1}], IdentityMatrix[2]}]StateOutputEstimatorは状態と出力の両方を推定する観測器を組み立てる:
ssm = StateSpaceModel[{{{0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}, {-35.52, -54.32, -34.56, -9.8}},
{{0}, {0}, {0}, {1}}, {{1, 1, 1, 0}}, {{0}}}, SamplingPeriod -> None, SystemsModelLabels -> None];l = EstimatorGains[ssm, {-8 + 4 I, -8 - 4I, -12, -14}];StateOutputEstimator[ssm, l]Subscript[ssm, d] = StateSpaceModel[{{{0, 1, 0}, {0, 0, 1}, {-0.234, 0.64, 0.01}}, {{0}, {0}, {1}}, {{-0.3, 1, 0}},
{{0}}}, SamplingPeriod -> 0.25, SystemsModelLabels -> None];l = EstimatorGains[Subscript[ssm, d], {-0.3, -0.2, 0}];StateOutputEstimator[Subscript[ssm, d], l, Method -> "PredictionEstimator"]推定器ゲインは双対系の状態フィードバックゲインの共役転置である:
ssm = StateSpaceModel[{{{0, 1, 0, 0}, {0, 0, -1, 0}, {0, 0, 0, 1}, {0, 0, 11, 0}}, {{0}, {1}, {0}, {1}},
{{1, 2, 3, 4}}, {{0}}}, SamplingPeriod -> None, SystemsModelLabels -> None];poles = {-1, -2, -1 + I, -1 - I};EstimatorGains[ssm, poles] == ConjugateTranspose[StateFeedbackGains[DualSystemsModel[ssm], poles]]StateFeedbackGains[ssm, poles] == ConjugateTranspose[EstimatorGains[DualSystemsModel[ssm], poles]]可観測の特異ではないディスクリプタ系では,推定器のすべての極を置くことができる:
nonsingularSS = StateSpaceModel[{{{1, 0, 0, 2}, {-1, -1, 0, 0}, {0, -1, 1, 1}, {11, 11, 0, 0}},
{{0}, {1}, {0}, {1}}, {{5, 0, 3, 8}}, {{0}}, {{0, 1, -1, 0}, {1, 0, 0, 2}, {1, 1, 0, 0},
{0, -1, 1, 1}}}, SamplingPeriod -> None, SystemsModelLabels -> None];
ObservableModelQ[nonsingularSS]EstimatorGains[nonsingularSS, {-1., -2., -3., -4.}]可観測の特異系については,MatrixRank[e]極のみを置くことができる:
singularSS = StateSpaceModel[{{{0, 1, 0}, {0, 0, 1}, {0, 0, -1}}, {{0, 0}, {1, 0}, {0, 1}},
{{0, 1, 0}, {1, 0, 1}, {0, 0, -1}}, {{0, 0}, {1, 0}, {0, 1}}, {{1, 0, 0}, {0, 1, 0}, {0, 0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> None];
ObservableModelQ[singularSS]EstimatorGains[singularSS, {-1., -2.}]impulseSS = StateSpaceModel[{{{-5, 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}, {0}, {0}, {0}, {-1}}, {{8, 0, 0, 1, -1}}, {{0}},
{{1, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 1, 0}, {0, 0, 0, 0, 1}, {0, 0, 0, 0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> None];
{ObservableModelQ[impulseSS], ControllableModelQ[{impulseSS, "Slow"}]}EstimatorGains[impulseSS, {-1.}]考えられる問題 (4)
KNVDメソッドは出力数が状態数より少ない厳密な系は扱わない:
ssm = StateSpaceModel[{{{-11, 0, 0, 0}, {1, -5, 0, 0}, {0, -3, 0, 0}, {0, -4, 0, 0}},
{{80, 0}, {0, 0}, {0, 20}, {0, 1}}, {{0, 0, 1, 0}, {0, 2, 0, 1}}, {{0, 0}, {0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> None];EstimatorGains[ssm, {-3, -4, -8, -12}, Method -> "KNVD"]
EstimatorGains[ssm, {-3, -4, -8, -12}//N, Method -> "KNVD"]KNVDメソッドは極の多重度が出力数を上回るケースは扱えない:
ssm = StateSpaceModel[{{{9, 5.7, 0, 2}, {0, 0, -1, 0}, {-4, 0, 1, 0}, {0, 1, 12, 0}},
{{0}, {-1}, {0}, {1.6}}, {{1, 2, 3, 4}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];EstimatorGains[ssm, {-1, -7, -2.5, -2.5}]EstimatorGains[ssm, {-1, -7, -2.5, -2.5}, Method -> "Ackermann"]KNVDメソッドはコンピュータシステムによっては異なるゲイン集合を与えることがある:
ssm = StateSpaceModel[{{{0, 1, 0, 0, 2, 0}, {2, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 0, -1}, {0, 0, 0, 3, 1, 0},
{-2, 0, 0, 0, 0, 1}, {0, -1, 0, 0, 0, 0}}, {{1, 0}, {0, 0}, {1, 0}, {0, 1}, {0, 0}, {0, -1}},
{{1, 0, 0, 0, 0, 0}, {2, 0, 1, -1, 1, 0}}, {{0, 0}, {0, 0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];poles = {-1, -2, -3, -4, -5, -7};{$SystemID, Subscript[l, 1] = EstimatorGains[ssm//N, poles, Method -> "KNVD"]}{$SystemID, Subscript[l, 2] = EstimatorGains[ssm//N, poles, Method -> "KNVD"]}{$SystemID, With[{ssN = Normal[ssm]}, Eigenvalues[ssN[[1]] - Subscript[l, 1].ssN[[3]]]]}{$SystemID, With[{ssN = Normal[ssm]}, Eigenvalues[ssN[[1]] - Subscript[l, 2].ssN[[3]]]]}ssm = StateSpaceModel[{{{0, -1}, {-1, 0}}, {{1}, {-1}}, {{1, -1}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];EstimatorGains[ssm, {-2, -3}]ObservableModelQ[ssm]関連するガイド
テキスト
Wolfram Research (2010), EstimatorGains, Wolfram言語関数, https://reference.wolfram.com/language/ref/EstimatorGains.html (2014年に更新).
CMS
Wolfram Language. 2010. "EstimatorGains." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2014. https://reference.wolfram.com/language/ref/EstimatorGains.html.
APA
Wolfram Language. (2010). EstimatorGains. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/EstimatorGains.html
BibTeX
@misc{reference.wolfram_2026_estimatorgains, author="Wolfram Research", title="{EstimatorGains}", year="2014", howpublished="\url{https://reference.wolfram.com/language/ref/EstimatorGains.html}", note=[Accessed: 09-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_estimatorgains, organization={Wolfram Research}, title={EstimatorGains}, year={2014}, url={https://reference.wolfram.com/language/ref/EstimatorGains.html}, note=[Accessed: 09-September-2026]}