伝達関数からの標準的な状態空間には、制御可能で観察可能な形式があります。ただし、ss2tf
Matlabから試してみると、異なる結果が得られます。Matlabはどのようなアルゴリズムを使用していますか?ドキュメントやオープンソースの実装もありますか?
>> a = [1 0.4 1];
>> b = [1 2 1];
>> [A,B,C,D] = tf2ss(b,a)
A =
-0.4000 -1.0000
1.0000 0
B =
1
0
C =
1.6000 0
D =
1
最初に覚えておくべきことは、状態表現は一意ではないということです。異なる状態表現は、同じ転送表現につながる可能性があります(実際には、極/零点キャンセルまでの同値類を形成します)。
ここでの違いはそれだけで、それ以上のものはありません。次のシステムを確認してください。これらはすべて同じ伝達関数を持ちますが、C行列が異なります(G、HはJとは異なります)が、H、Jは標準形です。
G = ss(tf(b,a))
H = ss2ss(G,rot90(eye(2)))
J = canon(H,'companion')
そしてcanon
おそらく、均衡した後、オフ対角線A行列の負を使用。バグになることもあります。
WG〜が(私は著者のだ恥知らずなプラグを述べたharold
)MIMOシステムは、より多くのケアを必要とするため、一般に変換のためのはるかに関わるアルゴリズムがあります。WA Wolowich、Linear Multivariable Systems(1974)のセクション4.4のバリアントを実装しました。matlabも同様のことをしていると思いますが、まだ追加していない実現のバランス(種類)もあります。
一般に、これらの制御可能で観察可能な形式は、コンパニオン構造のために数値的に適切に調整されていません。したがって、かなりのサイズと深刻さを持つものがある場合は、特別な注意が必要です。
実際には、いくつかの教科書の演習以外に、制御可能性または可観測性を評価するためにそれらを使用しないでください。代わりにminreal
、最小限のシステムを使用して作業してください。
コンパニオン行列がポップアップする理由は、実数多項式の根と、この多項式の係数によって形成されるコンパニオン行列の固有値が一致するためです。いくつかの歴史的な意見については、ルーツに関するこのクリーブ・モラーのブログ投稿をチェックしてください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加