モデル表現の切り替え
この例では、LTI システムの伝達関数 (TF)、零点-極-ゲイン (ZPK)、状態空間 (SS) および周波数応答データ (FRD) の表現をそれぞれ切り替える方法を示します。
モデル タイプ変換
LTI モデルの構築で使用するコマンド (tf
、zpk
、ss
、および frd
) を使用して、モデルの表現を変換できます。たとえば、状態空間モデル
sys = ss(-2,1,1,3);
を、零点-極-ゲイン モデルに変換するには、以下のように入力します。
zpksys = zpk(sys)
zpksys = 3 (s+2.333) ----------- (s+2) Continuous-time zero/pole/gain model.
同様に、sys
の伝達関数を計算するには、以下のように入力します。
tf(sys)
ans = 3 s + 7 ------- s + 2 Continuous-time transfer function.
FRD への変換には、周波数ベクトルが必要です。
f = logspace(-2,2,10); frdsys = frd(sys,f)
frdsys = Frequency(rad/s) Response ---------------- -------- 0.0100 3.5000 - 0.0025i 0.0278 3.4999 - 0.0070i 0.0774 3.4993 - 0.0193i 0.2154 3.4943 - 0.0532i 0.5995 3.4588 - 0.1375i 1.6681 3.2949 - 0.2459i 4.6416 3.0783 - 0.1817i 12.9155 3.0117 - 0.0756i 35.9381 3.0015 - 0.0277i 100.0000 3.0002 - 0.0100i Continuous-time frequency response.
FRD モデルは、TF、ZPK、または SS 表現に変換し直せないことに注意してください (この変換を行うには、System Identification にある周波数領域同定ツールが必要です)。
すべてのモデル タイプの変換パスは、次の図のとおりです。
暗黙的型キャスト
コマンドの中には、特定のタイプの LTI モデルを要求するコマンドがあります。便宜上、このようなコマンドは、入力 LTI モデルを適切な表現に自動的に変換します。たとえば、次のサンプル コードでは、
sys = ss(0,1,1,0);
[num,den] = tfdata(sys,'v')
num = 1×2
0 1
den = 1×2
1 0
関数 tfdata
が状態空間モデル sys
を等価な伝達関数に自動変換して、その分子と分母のデータを取得します。
表現を切り替える場合の注意事項
TF、ZPK、および SS 表現の間での変換には、数値計算が必要であり、乱用した場合には、正確性が失われる場合もあります。SS および FRD 表現は、数値計算に最も適しています。このため、すべてのモデルを SS または FRD に変換し、TF および ZPK 表現は、構築と表示目的のみに使用することをお勧めします。
たとえば、以下の ZPK モデルを
G = zpk([],ones(10,1),1,0.1)
G = 1 -------- (z-1)^10 Sample time: 0.1 seconds Discrete-time zero/pole/gain model.
TF に変換してから ZPK に以下のように変換し直します。
G1 = zpk(tf(G));
ここで、G
と G1
の極の位置を比較します。
G1 = zpk(tf(G)); pzmap(G,'b',G1,'r') axis([0.5 1.5 -0.4 0.4]) legend('G','G1')
G
の z=1
での多重度 10 の極が、G1
では極のクラスタで置き換えられていることがわかります。これが発生するのは、G1
の極が次の多項式の根として計算されており、
また、この多項式の最後の係数の o(eps)
誤差が、根を次のように動かす十分な大きさをもっているためです。
つまり、伝達関数の表現には、z=1 付近でのシステムの動作を把握するために十分な正確性がありません。このことは、以下の G
と G1
を比べたボード線図でもわかります。
bode(G,'b',G1,'r--'), grid legend('G','G1')
これらの例が、不要なモデル変換は回避する必要がある理由です。