Main Content

spectralfact

線形システムのスペクトル分解

説明

[G,S] = spectralfact(H) は、H = H' を満たすような LTI モデルのスペクトル分解

H = G'*S*G

を計算します。この因数分解では、S は対称行列で、G は正方で安定した単位 (単位行列) の直達をもつ最小位相システムです。G'G の共役であり、伝達関数 G(–s)T (連続時間)、G(1/z)T (離散時間) をもちます。

[G,S] = spectralfact(F,R) は次のスペクトル分解を計算します。

F'*R*F = G'*S*G

この式は、H = F'*R*F を明示的に形成しません。前の構文と同様に、S は対称行列であり、G は正方で安定した、単位の直達をもつ最小位相システムです。

G = spectralfact(F,[]) は次のような安定した最小位相システム G を計算します。

G'*G = F'*F.

すべて折りたたむ

以下のシステムを考えます。

G0 = ss(zpk([-1 -5 1+2i 1-2i],[-100 1+2i 1-2i -10],1e3));
H = G0'*G0;

G0 には安定したダイナミクスと不安定なダイナミクスが混在しています。H は、ダイナミクスが G0 の極と零点、およびその虚軸に対する対称点で構成される自己共役システムです。スペクトル分解を使用して安定した極と零点を G に、不安定な極と零点を G' に分離します。

[G,S] = spectralfact(H);

すべての極と零点が左半平面 (Re(s) < 0) にあることをチェックして、G が安定した最小位相であることを確認します。

p = pole(G)
p = 4×1 complex
102 ×

  -0.0100 + 0.0200i
  -0.0100 - 0.0200i
  -0.1000 + 0.0000i
  -1.0000 + 0.0000i

z = zero(G)
z = 4×1 complex

  -1.0000 + 2.0000i
  -1.0000 - 2.0000i
  -1.0000 + 0.0000i
  -5.0000 + 0.0000i

G には単位の直達もあります。

G.D
ans = 1

H は SISO であるため、S はスカラーです。H が MIMO であった場合、S の次元は H の I/O 次元と一致します。

S
S = 1000000

元のシステムを、元のシステムと因数分解したシステム間の差分と比較し、GSH = G'*S*G を満たすことを確認します。差分が非常に小さいため、sigmaplot は警告をスローします。

Hf = G'*S*G;
sigmaplot(H,H-Hf)
Warning: The frequency response has poor relative accuracy. This may be because the response is nearly zero or infinite at all frequencies, or because the state-space realization is ill conditioned. Use the "prescale" command to investigate further.

次の 2 出力 2 入力状態空間モデル F があるとします。

A = [-1.1  0.37;
     0.37 -0.95];
B = [0.72 0.71;
     0    -0.20];
C =  [0.12 1.40
      1.49 1.41];
D = [0.67 0.7172;
    -1.2  0];
F = ss(A,B,C,D);

さらに、2 行 2 列の対称行列 R があるとします。

R =   [0.65    0.61
       0.61   -3.42];

H を明示的に計算せずに、H = F'*R*F によって与えられるシステムのスペクトル分解を計算します。

[G,S] = spectralfact(F,R);

G は単位行列の直達をもつ最小位相システムです。

G.D
ans = 2×2

     1     0
     0     1

F には入力と出力が 2 つずつあるため、RS はどちらも 2 行 2 列の行列です。

元の因数分解を 2 つの因数分解の差分と比較して、G'*S*G = F'*R*F を確認します。差分の特異値は元のシステムよりもはるかに低い値です。

Ff = F'*R*F;
Gf = G'*S*G;
sigmaplot(Ff,Ff-Gf)

以下の離散時間システムについて考えます。

F = zpk(-1.76,[-1+i -1-i],-4,0.002);

F は単位円の外側に極と零点をもちます。spectralfact を使用して、G'*G = F'*F を満たす、安定した極と零点をもつシステム G を計算します。

G = spectralfact(F,[])
G =
 
  -3.52 z (z+0.5682)
  ------------------
   (z^2 + z + 0.5)
 
Sample time: 0.002 seconds
Discrete-time zero/pole/gain model.

F とは異なり、G には単位円の外側に極も零点もありません。G には z = 0 に追加の零点がありますが、これは、F 内の z = Inf における不安定な零点の鏡像です。

pzplot(G)

元の因数分解を 2 つの因数分解の差分と比較して、G'*G = F'*F を確認します。差分の特異値は元の因数分解よりもはるかに低い値です。

Ff = F'*F;
Gf = G'*G;
sigmaplot(Ff,Ff-Gf)

入力引数

すべて折りたたむ

自己共役 LTI モデル。tfss または zpk モデルとして指定します。自己共役とは、その共役と等しいこと、H = H' を意味します。共役 H' は伝達関数 H(–s)T (連続時間) および H(1/z)T (離散時間) です。

H は SISO または MIMO です。ただし、入力と同数の出力をもちます。H は次の制限付きで連続または離散にすることができます。

  • 連続時間の場合、H は無限大または虚軸に極または零点のないバイプロパーでなければなりません。

  • 離散時間の場合、H は単位円に極または零点があってはなりません。

因数分解型 H = F'*R*FF 因子。tfss または zpk モデルとして指定します。F では入力数を出力数よりも多くすることはできません。

因数分解型 H = F'*R*FR 因子。F の出力数と同数の行が含まれる対称正方行列として指定します。

出力引数

すべて折りたたむ

LTI 因子。tfss または zpk モデルとして返されます。G は次を満たす安定した最小位相システムです。

  • [G,S] = spectralfact(H) 構文を使用する場合、H = G'*S*G

  • [G,S] = spectralfact(F,R) 構文を使用する場合、G'*S*G = F'*R*F

  • G = spectralfact(F,[]) 構文を使用する場合、G'*G = F'*F

数値因子。次を満たす対称行列として返されます。

  • [G,S] = spectralfact(H) 構文を使用する場合、H = G'*S*GS の次元は H および G の I/O の次元と一致します。

  • [G,S] = spectralfact(F,R) 構文を使用する場合、G'*S*G = F'*R*F。各次元に沿った S のサイズは F の出力の数と一致します。

ヒント

  • spectralfactH が自己共役であると仮定します。H が自己共役でない場合、spectralfactH = G'*S*G を満たさない GS を返します。したがって、spectralfact を使用する前に入力モデルが実際に自己共役であることを確認します。H を確認する 1 つの方法は、特異値プロットで HH - H' と比較することです。

    sigmaplot(H,H-H')

    H が自己共役の場合、プロット上の H - H' ラインが H ラインよりもはるかに下に配置されます。

バージョン履歴

R2016a で導入

参考

|

トピック