ControllableDecomposition[sys]
状態空間モデル sys の可制御部分系を与える.
ControllableDecomposition[sys,{z1,…}]
新たな状態変数 ziを指定する.
ControllableDecomposition
ControllableDecomposition[sys]
状態空間モデル sys の可制御部分系を与える.
ControllableDecomposition[sys,{z1,…}]
新たな状態変数 ziを指定する.
詳細とオプション
- ControllableDecompositionは{p,csys}を与える.ただし,p は変換であり csys は可制御部分系である.
- 系 sys は,標準あるいはディスクリプタのStateSpaceModelあるいはAffineStateSpaceModelでよい.
- 可制御部分系はStateSpaceTransform[sys,p]で与えられる.
- ControllableDecompositionはMethodオプションを取る.次は指定可能な設定である.
-
Automatic 自動的にメソッドを選ぶ "Matrix" 可観測行列を使う "Distribution" 可観測分布を使う
例題
すべて開く すべて閉じる例 (1)
ControllableDecomposition[StateSpaceModel[{{{Subscript[a, 1], 0, 0}, {0, Subscript[a, 2], 0},
{0, 0, Subscript[a, 3]}}, {{0}, {Subscript[b, 1]},
{Subscript[b, 2]}}, {{Subscript[c, 1], Subscript[c, 2],
Subscript[c, 3]}}, {{Subscript[d, 11]}}}, SamplingPeriod -> None,
SystemsModelLabels -> None]]スコープ (4)
ControllableDecomposition[StateSpaceModel[{{{-1, -2}, {3, -4}}, {{1}, {-1}}, {{1, 0}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None]]ControllableDecomposition[StateSpaceModel[{{{-3, 0, 0}, {0, -4, 0}, {0, 0, -7}}, {{1}, {-1}, {0}}, {{1, 0, 0}}, {{0}}},
SamplingPeriod -> None, SystemsModelLabels -> None]]ControllableDecomposition[StateSpaceModel[{{{Subscript[a, 1], 0, 0}, {0, Subscript[a, 2], 0},
{0, 0, Subscript[a, 3]}}, {{0, 0}, {Subscript[b, 1], 0},
{0, Subscript[b, 2]}}, {{0, Subscript[c, 1], 0},
{0, 0, Subscript[c, 3]}},
{{Subscript[d, 11], Subscript[d, 12]},
{Subscript[d, 21], Subscript[d, 22]}},
{{Subscript[e, 1], 0, 0}, {0, Subscript[e, 2], 0}, {0, 0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> None]]asys = AffineStateSpaceModel[{{Subscript[x, 1], Subscript[x, 1],
Subscript[x, 1]}, {{1}, {1 + Subscript[x, 1]}, {1}},
{Subscript[x, 1]}, {{0}}}, {Subscript[x, 1],
Subscript[x, 2], Subscript[x, 3]}, {{Subscript[, 1], 0}},
{Automatic}, Automatic, SamplingPeriod -> None];ControllableDecomposition[asys]ControllableDecomposition[asys, {Subscript[z, 1], Subscript[z, 2], Subscript[z, 3]}]アプリケーション (7)
線形系 (4)
ssm = StateSpaceModel[{{{Subscript[a, 1], 0, 0}, {0, Subscript[a, 2], 0},
{0, 0, Subscript[a, 3]}}, {{0, 0}, {Subscript[b, 1], 0},
{0, Subscript[b, 2]}}, {{Subscript[c, 1], 0, 0},
{0, 0, Subscript[c, 3]}},
{{Subscript[d, 11], Subscript[d, 12]},
{Subscript[d, 21], Subscript[d, 22]}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];ControllableDecompositionは可制御部分系のみを取り出す:
{p, cssm} = ControllableDecomposition[ssm];cssmKalman可制御分解は,最初に可制御部分系を置き,残りはそのままにする:
po = NullSpace[p];
StateSpaceTransform[ssm, ArrayFlatten[{{p, po}}]]{p, cssm} = ControllableDecomposition[StateSpaceModel[{{{Subscript[a, 1], 0, 0}, {0, Subscript[a, 2], 0},
{0, 0, Subscript[a, 3]}}, {{0, 0}, {Subscript[b, 1], 0},
{0, Subscript[b, 2]}}, {{Subscript[c, 1], 0, 0},
{0, 0, Subscript[c, 3]}},
{{Subscript[d, 11], Subscript[d, 12]},
{Subscript[d, 21], Subscript[d, 22]}}}, SamplingPeriod -> None,
SystemsModelLabels -> None]];Dimensions[p]//Last以下の系についての可制御部分空間を求め,この系で起り得る可能な状態軌道について説明する:
ssm = StateSpaceModel[{{{1, -1, -3}, {-3, -1, 3}, {5, -1, -7}}, {{0}, {0}, {-1}}, {{1, -1, -1}}, {{0}}},
SamplingPeriod -> None, SystemsModelLabels -> None];ControllableModelQ[ssm]{p, csys} = ControllableDecomposition[ssm];cspace = ParametricPlot3D[p.{u, v}, {u, -1.25, 1.25}, {v, -1, 1}, Mesh -> None, PlotStyle -> Opacity[0.3]]x0 = Flatten[Table[p.{u, v}, {u, -0.8, 0.8, 0.3}, {v, -0.8, 0.8, 0.3}], 1];
sr = Table[StateResponse[{ssm, x}, Sin[2t], {t, 0, 10}], {x, x0}];Show[ParametricPlot3D[Evaluate[sr], {t, 0, 10}], cspace]しかし,可制御部分空間の平行コピー間のドリフトを制御することはできない:
w = First@NullSpace[p]; (* Orthogonal direction to cspace *)
x0 = Flatten[Table[p.{u, v} - w, {u, -0.8, 0.8, 0.3}, {v, -0.8, 0.8, 0.3}], 1];
sr = Table[StateResponse[{ssm, x}, Sin[2t], {t, 0, 10}], {x, x0}];Show[ParametricPlot3D[Evaluate[sr], {t, 0, 10}], cspace]可制御部分系の制御器を構築することで,完全に可制御ではない系の制御器を設計する:
力は最初の質量
のみに適用されるので,2番目の質量
は制御することができない:
pars = {Subscript[k, 1] -> 75, Subscript[k, 2] -> 100, Subscript[m, 1] -> 1, Subscript[m, 2] -> 0.5};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[y, 2][t], 0}, Subscript[, 1],
{Subscript[x, 1][t], 0}, Subscript[, 2],
{Subscript[x, 2][t], 0}, Subscript[, 3]},
{{F[t], 0}}, {Subscript[x, 1][t],
Subscript[x, 2][t]}, t, SamplingPeriod -> None,
SystemsModelLabels -> None] /. pars;ControllableModelQ[ssm]{p, csys} = ControllableDecomposition[ssm];κc = StateFeedbackGains[csys, {-1, -2, -3 + I, -3 - I}]κ = κc.p次のシミュレーションは,閉ループ系内の制御されたモードと摂動モードを示している:
clsys = SystemsModelStateFeedbackConnect[ssm, κ];Plot[Evaluate[StateResponse[{clsys, {0, 0, 0.1, 0, 0.1, 0}}, 0, {t, 0, 7}]], {t, 0, 7}]Eigenvalues[First[Normal[clsys]]]Select[Eigenvalues[First[Normal[ssm]]], !ControllableModelQ[{ssm, #}]&]アフィン系 (3)
assm = AffineStateSpaceModel[{{1, 0, Subscript[x, 2]}, {{1}, {Subscript[x, 2]},
{Subscript[x, 1]}}, {Subscript[x, 1]}, {{0}}},
{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]},
{Subscript[, 1]}, {Automatic}, Automatic, SamplingPeriod -> None];ControllableDecompositionは可制御の部分系のみを取り出す:
{{p1, p2}, csys} = ControllableDecomposition[assm];csys三角形可制御分解は,可制御な部分系を最初に置き,次に残りを置く:
StateSpaceTransform[assm, {p1, Flatten[p2]}]assm = AffineStateSpaceModel[{{Subscript[x, 1], Subscript[x, 1],
Subscript[x, 1]}, {{1}, {1 + Subscript[x, 1]}, {1}},
{Subscript[x, 1]}, {{0}}}, {Subscript[x, 1],
Subscript[x, 2], Subscript[x, 3]}, {{Subscript[, 1], 0}},
{Automatic}, Automatic, SamplingPeriod -> None];ControllableModelQ[assm]{{Subscript[p, 1], Subscript[p, 2]}, cssm} = ControllableDecomposition[assm];cssmLength[First[Subscript[p, 2]]]可制御分解は到達可能な部分空間と部分系を与える.これを使って,ある部分系から別の部分系への系の動きを可視化することができる:
asys = AffineStateSpaceModel[{{1, 0, Subscript[x, 2]}, {{1}, {Subscript[x, 2]},
{Subscript[x, 1]}}, {Subscript[x, 1]}, {{0}}},
{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]},
{Subscript[, 1]}, {Automatic}, Automatic, SamplingPeriod -> None];{{Subscript[p, 1], {Subscript[p, 21], Subscript[p, 22]}}, csys} = ControllableDecomposition[asys];rspace[{x1_, x2_, x3_}] := Last /@ Subscript[p, 22] /. {Subscript[x, 1] -> x1, Subscript[x, 2] -> x2, Subscript[x, 3] -> x3}rspace[{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]}]c = 0.2;rspace0 = ContourPlot3D[Evaluate[rspace[{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]}] == c], {Subscript[x, 1], 1, 5}, {Subscript[x, 2], 0, 5.5}, {Subscript[x, 3], -7, 7}, Mesh -> None, ContourStyle -> Opacity[0.3]]Subscript[x, 10] = Range[1.5, 3, 0.05];Flatten[Subscript[x, 2] /. Solve[Thread[Last /@ Subscript[p, 22] == c], Subscript[x, 2]] /. Subscript[x, 1] -> Subscript[x, 10]];Subscript[x, 0] = Thread[{Subscript[x, 10], %, RandomReal[{-1.5, 6.5}, Length@Subscript[x, 10]]}];Short[Subscript[x, 0], 2]これらの初期点はすべて,その動きが可制御ではないので,厳密に同じ最終曲面上に残る:
sr = Table[StateResponse[{asys, x}, 0, {t, 0, 1}], {x, Subscript[x, 0]}];Subscript[x, f] = rspace /@ sr /. t -> 1;Differences[%]//Choprspace1 = ContourPlot3D[Evaluate[rspace[{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]}] == Subscript[x, f][[1, 1]]], {Subscript[x, 1], 1, 5}, {Subscript[x, 2], 0.5, 5}, {Subscript[x, 3], -10, 10}, Mesh -> None, ContourStyle -> Opacity[0.3]];Show[rspace0, ParametricPlot3D[Evaluate[sr], {t, 0, 1}], rspace1, PlotRange -> All]特性と関係 (2)
変換行列 p はStateSpaceTransformを使って可制御部分系を選ぶ:
ssm = StateSpaceModel[{{{Subscript[a, 1], 0, 0}, {0, Subscript[a, 2], 0},
{0, 0, Subscript[a, 3]}}, {{0, 0}, {Subscript[b, 1], 0},
{0, Subscript[b, 2]}}, {{Subscript[c, 1], 0, 0},
{0, 0, Subscript[c, 3]}},
{{Subscript[d, 11], Subscript[d, 12]},
{Subscript[d, 21], Subscript[d, 22]}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];{p, csys} = ControllableDecomposition[ssm];
tsys = StateSpaceTransform[ssm, {p, p}];{csys, tsys}assm = AffineStateSpaceModel[{{-Subscript[x, 4], 0, -Subscript[x, 1],
Subscript[x, 2]}, {{1}, {0}, {1 + Subscript[x, 2]}, {0}},
{Subscript[x, 1], Subscript[x, 2]}, {{0}, {0}}},
{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3],
Subscript[x, 4]}, {Subscript[, 1]}, {Automatic, Automatic}, Automatic,
SamplingPeriod -> None];{p, csys} = ControllableDecomposition[assm];
tsys = StateSpaceTransform[assm, p];{csys, tsys}関連するガイド
-
▪
- 非線形制御系 ▪
- 状態空間モデルの解析
テキスト
Wolfram Research (2010), ControllableDecomposition, Wolfram言語関数, https://reference.wolfram.com/language/ref/ControllableDecomposition.html (2014年に更新).
CMS
Wolfram Language. 2010. "ControllableDecomposition." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2014. https://reference.wolfram.com/language/ref/ControllableDecomposition.html.
APA
Wolfram Language. (2010). ControllableDecomposition. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ControllableDecomposition.html
BibTeX
@misc{reference.wolfram_2026_controllabledecomposition, author="Wolfram Research", title="{ControllableDecomposition}", year="2014", howpublished="\url{https://reference.wolfram.com/language/ref/ControllableDecomposition.html}", note=[Accessed: 04-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_controllabledecomposition, organization={Wolfram Research}, title={ControllableDecomposition}, year={2014}, url={https://reference.wolfram.com/language/ref/ControllableDecomposition.html}, note=[Accessed: 04-September-2026]}