Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

hsvd

(非推奨) 動的システムのハンケル特異値

hsvd は推奨されません。代わりに balred を使用してください。詳細については、互換性についての考慮事項を参照してください。

構文

hsv = hsvd(sys)
hsv = hsvd(sys,opts)
[hsv,baldata] = hsvd(___)
hsvd(___)

説明

hsv = hsvd(sys) は、動的システム sys のハンケル特異値 hsv を計算します。入力から状態と状態から出力へのエネルギー変換が等価な状態座標において、ハンケル特異値は、入力/出力の動作への各状態の寄与を測定します。行列のランクに対する特異値があるようにモデルの次数に対する特異値があります。特に、小さなハンケル特異値の信号の状態は、モデルを簡略化するために切り捨てることができます (balred を参照)。

不安定な極をもつモデルの場合、hsvd は安定した部分のハンケル特異値のみを計算し、不安定モードに対応する hsv の入力は Inf に設定されます。

hsv = hsvd(sys,opts) は、hsvdOptions を使用して指定されたオプションを使用してハンケル特異値を計算します。オプションには、安定/不安定分解を計算するためのオフセットおよび許容誤差オプションが含まれます。オプションを使用して、HSV の計算を特定の時間および周波数範囲内のエネルギーの寄与に制限することもできます。詳細については、balredOptions を参照してください。

[hsv,baldata] = hsvd(___) は、モデル次数の低次元化を高速化するための追加データを返します。この構文では、入力引数を前述の任意の組み合わせで使用できます。

hsvd(___) は、ハンケル特異値プロットを表示します。

すべて折りたたむ

ほぼ 0 の安定した極をもつシステムを作成し、ハンケル特異値を表示します。

sys = zpk([1 2],[-1 -2 -3 -10 -1e-7],1);
hsv = hsvd(sys)
hsv = 5×1
105 ×

    1.6667
    0.0000
    0.0000
    0.0000
    0.0000

振幅が 105 の支配的なハンケル特異値を確認します。この値が大きすぎて、他のモードの有効桁数は表示されていません。この値は s=10-7 のほぼ不安定なモードによるものです。'Offset' オプションを使用して、このモードを不安定として扱います。

opts = hsvdOptions('Offset',1e-7);
hsvu = hsvd(sys,opts)
hsvu = 5×1

       Inf
    0.0688
    0.0138
    0.0024
    0.0001

不安定なモード (不安定として扱われるモード) のハンケル特異値は Inf として返されます。このモードを不安定として扱った状態でハンケル特異値プロットを作成します。

hsvd(sys,opts)
ans = 5×1

       Inf
    0.0688
    0.0138
    0.0024
    0.0001

不安定なモードはプロットで赤で示されます。

既定では、hsvd は線形スケールを使用します。プロットを対数スケールに切り替えるには、プロットを右クリックし、[Y スケール]、[対数] を選択します。HSV プロットのプロパティのプログラムによる変更の詳細については、hsvplot を参照してください。

低周波数と高周波数のダイナミクスをもつモデルのハンケル特異値を計算します。計算を高周波数モードに絞り込みます。

モデルを読み込み、その周波数応答を調べます。

load modeselect Gms
bodeplot(Gms)

Figure contains 2 axes objects. Axes object 1 with ylabel Magnitude (dB) contains an object of type line. This object represents Gms. Axes object 2 with ylabel Phase (deg) contains an object of type line. This object represents Gms.

Gms には 2 組の共振があり、一方は周波数が相対的に低く、他方は周波数が相対的に高くなっています。低周波数ダイナミクスに対するエネルギーの寄与を除外して、高周波数モードのハンケル特異値を計算します。これを行うには、hsvdOptions を使用して 30 rad/s を超える周波数範囲を指定します。

opts = hsvdOptions('FreqInterval',[30 Inf]);
hsvd(Gms,opts)
ans = 18×1
10-4 ×

    0.6237
    0.4558
    0.3183
    0.2468
    0.0895
    0.0847
    0.0243
    0.0028
    0.0000
    0.0000
      ⋮

ヒント

ハンケル特異値プロットをより柔軟にプログラムでカスタマイズして作成するには、hsvplot を使用します。

バージョン履歴

R2006a より前に導入

すべて折りたたむ

R2021a: hsvd は非推奨

R2021a 以降では、ハンケル特異値の計算に balred コマンドを使用します。この方法では、低次元化されたモデル近似も同じコマンドを使用して計算できるため、ワークフローがより優れたものになります。さらに、拡張されたワークフローにはロールオフ特性を保持する新しいオプションも含まれます。

次の表に、hsvd の一般的な用法と、代わりに balred を使用するためにコードを更新する方法を示します。

非推奨推奨

hsv = hsvd(sys)

[~,info] = balred(sys,order) は、sys のハンケル特異値と誤差近似を計算します。詳細については、balred を参照してください。

hsv = hsvd(sys,opts)

[~,info] = balred(sys,order,opts) は、オプション セット opts で指定されたオプションを使用してハンケル特異値を計算します。詳細については、balred を参照してください。

現時点で hsvd を削除する予定はありません。