メインコンテンツ

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

zpk

零点-極-ゲイン モデル

    説明

    zpk を使用して零点-極-ゲイン モデルを作成するか、動的システム モデルを零点-極-ゲイン形式に変換します。

    零点-極-ゲイン モデルは、因数分解した形式で伝達関数を表したものです。たとえば、次の連続時間 SISO 伝達関数について考えてます。

    G(s)=s23s4s2+5s+6

    G(s) は、次のように零点-極-ゲイン形式に因数分解できます。

    G(s)=(s+1)(s4)(s+2)(s+3).

    SISO 零点-極-ゲイン モデルのより一般的な表現は次のとおりです。

    h(s)=k(sz(1))(sz(2))(sz(m))(sp(1))(sp(2))(sp(n))

    ここで、zp は実数値または複素数値の零点と極で、k は実数値または複素数値のスカラー ゲインです。MIMO モデルでは、各 I/O チャネルは 1 つのそのような伝達関数 hij(s) によって表されます。

    零点-極-ゲイン モデル オブジェクトを作成するには、極、零点およびゲインを直接指定するか、(状態空間モデル ss などの) 別のタイプのモデルを零点-極-ゲイン形式に変換することができます。

    zpk を使用して、一般化状態空間 (genss) モデルや不確かさをもつ状態空間 (uss (Robust Control Toolbox)) モデルを作成することもできます。

    作成

    説明

    ZPK モデルの作成

    sys = zpk(zeros,poles,gain) は、ベクトルとして指定された zerospoles および gain のスカラー値を使用して連続時間零点-極-ゲイン モデルを作成します。出力 sys はモデル データを格納する zpk モデル オブジェクトです。零点または極がないシステムでは、zeros または poles[] に設定してください。この 2 つの入力は長さが同じである必要はなく、モデルはプロパーである必要はありません (つまり、極が過剰に存在)。

    sys = zpk(zeros,poles,gain,ts) は、サンプル時間 ts で離散時間零点-極-ゲイン モデルを作成します。サンプル時間を未指定のままにするには、ts-1 または [] に設定します。

    sys = zpk(zeros,poles,gain,ltiSys) は、サンプル時間を含む、動的システム モデル ltiSys から継承されたプロパティをもつ零点-極-ゲイン モデルを作成します。

    sys = zpk(m) は、静的ゲイン m を表す零点-極-ゲイン モデルを作成します。

    sys = zpk(___,PropertyName=Value) は、プロパティの名前と値の引数を 1 つ以上使用してモデルの追加プロパティを設定して、零点-極-ゲイン モデルのプロパティを設定します。この構文は、前述の任意の入力引数の組み合わせで機能します。

    ZPK モデルへの変換

    sys = zpk(ltiSys) は、動的システム モデル ltiSys を零点-極-ゲイン モデルに変換します。

    sys = zpk(ltiSys,Name=Value) は、1 つ以上の指定された名前と値の引数に基づいて零点と極を計算することで、スパース モデル ltiSys の打ち切られた zpk 表現を取得します。この手法では、入力と出力の各ペアに対して零点を計算するため、入力と出力のサイズが小さいモデルに最適です。 (R2025a 以降)

    sys = zpk(ltiSys,component) は、ltiSys の指定された component を零点-極-ゲイン モデル形式に変換します。この構文を使用するのは、ltiSys が、idss モデルや idtf モデルなどの同定された線形時不変 (LTI) モデルである場合のみです。

    有理式の変数の作成

    s = zpk('s') は、連続時間の零点-極-ゲイン モデルを作成するための有理式で使用できる、特殊な変数 s を作成します。有理式を使用すると、多項式係数を指定するよりも簡単でより直観的になる場合があります。

    z = zpk('z',ts) は、離散時間の零点-極-ゲイン モデルを作成するための有理式で使用できる、特殊な変数 z を作成します。サンプル時間を未指定のままにするには、ts 入力引数を -1 に設定します。

    入力引数

    すべて展開する

    零点-極-ゲイン モデルの零点。次のように指定します。

    • SISO モデルの行ベクトル。たとえば、[1,2+i,2-i] を使用して、s = 1s = 2+i、および s = 2-i の零点をもつモデルを作成します。例については、連続時間 SISO 零点-極-ゲイン モデルを参照してください。

    • 行ベクトルからなる NyNu 列の cell 配列。これは MIMO 零点-極-ゲイン モデルを指定し、Ny は出力の数、Nu は入力の数です。例については、離散時間 MIMO 零点-極-ゲイン モデルを参照してください。

    たとえば、a が、ノミナル値 3realp 調整可能パラメーターである場合、zeros = [1 2 a] を使用して、s = 1s = 2 の零点および s = 3 の調整可能な零点をもつ genss モデルを作成できます。

    この入力引数を使用して zpk モデルを作成すると、引数によってプロパティ Z の初期値が設定されます。

    零点-極-ゲイン モデルの極。次のように指定します。

    zpk オブジェクトのプロパティでもあります。この入力引数では、プロパティ P の初期値を設定します。

    零点-極-ゲイン モデルのゲイン。次のように指定します。

    zpk オブジェクトのプロパティでもあります。この入力引数では、プロパティ K の初期値を設定します。

    スカラーとして指定されたサンプル時間。zpk オブジェクトのプロパティでもあります。この入力引数では、プロパティ Ts の初期値を設定します。

    動的システム。SISO または MIMO 動的システム モデルか、動的システム モデルの配列として指定します。使用できる動的システムには次のようなものがあります。

    • tf モデル、zpk モデル、ss モデル、または pid モデルなどの連続時間または離散時間の数値 LTI モデル。

      ltiSys がスパース状態空間モデル (sparss または mechss) の場合、ソフトウェアは指定した焦点の周波数帯域内における打ち切られた零点-極-ゲインの近似を計算します。スパース モデルの場合は、名前と値の引数を使用して計算オプションを指定します。オプションを指定しなかった場合、ソフトウェアは最小の振幅をもつ最初の 1000 個までの極と零点を計算します。また、打ち切られた零点-極-ゲインの近似の取得は、有効な sparss 表現をもつモデルにのみ適用可能です。 (R2025a 以降)

    • genssuss (Robust Control Toolbox) モデルなどの一般化された、あるいは不確かさをもつ LTI モデル。(不確かさをもつモデルを使用するには Robust Control Toolbox™ のライセンスが必要です。)

      結果として得られる零点-極-ゲインモデルは次を仮定します。

      • 調整可能な制御設計ブロックについては調整可能なコンポーネントの現在値。

      • 不確かさをもつ制御設計ブロックについてはモデルのノミナル値。

    • idtf (System Identification Toolbox)idss (System Identification Toolbox)idproc (System Identification Toolbox)idpoly (System Identification Toolbox)idgrey (System Identification Toolbox) モデルなどの、同定された LTI モデル。同定されたモデルの変換する成分を選択するには、component を指定します。component を指定しない場合、tf は、同定されたモデルの測定成分を既定で変換します。(同定されたモデルを使用するには System Identification Toolbox™ ソフトウェアが必要です。)

      同定された非線形モデルは zpk モデル オブジェクトに変換できません。最初に、linearizelinapp などの線形近似関数を使用できます (この機能には、System Identification Toolbox ソフトウェアが必要です)。

    静的ゲイン。スカラーまたは行列として指定します。システムの静的ゲインまたは定常状態ゲインは、定常状態の条件下における出力の入力に対する比率を表します。

    同定されたモデルの変換対象とするコンポーネント。次のいずれかとして指定します。

    • 'measured'sys の測定成分を変換します。

    • 'noise'sys のノイズ成分を変換します。

    • 'augmented'sys の測定成分とノイズ成分の両方を変換します。

    component が適用されるのは、sys が同定された LTI モデルである場合のみです。

    同定された LTI モデルおよびその測定成分とノイズ成分の詳細については、同定された LTI モデルを参照してください。

    名前と値の引数

    すべて展開する

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

    例: sys = zpk(sparseSys,Focus=[0 100],Display="off")

    R2025a 以降

    零点と極の計算時に並列計算を使用するかどうか。数値または logical 0 (false) または 1 (true) として指定します。

    UseParalleltrue に設定されている場合、望ましい並列環境に合わせてスケーリングすることを明示的に選択できます。並列計算を有効にすると、零点と極の計算時のパフォーマンスが向上する可能性があります。ただし、UseParallelfalse に設定されている場合でも、アルゴリズムは組み込みのマルチスレッディングを使用してローカル リソースを最大限に活用できます。詳細については、MATLAB Multicore を参照してください。

    このオプションには、Parallel Computing Toolbox™ ライセンスが必要です。

    R2025a 以降

    ロールオフの傾き。非正のスカラーまたは行列として指定します。

    • SISO モデルの場合、または MIMO モデルで入力と出力のすべてのペアに対して傾きが均一な場合には、スカラー値を使用します。

    • MIMO モデルで入力と出力のペアごとに傾きが異なる場合は、行列を使用します。

    このオプションを使用すると、指定された周波数範囲を超えたときに近似がどのようにロールオフする必要があるかを指定できます。たとえば、Slope-2 にすると、fmax を超えたときにゲインが少なくとも –40 dB/decade のレート (ロールオフ率 1/s2) でロールオフすることが保証されます。

    R2025a 以降

    対象の周波数範囲。[0,fmax] の形式のベクトルとして指定します。焦点の周波数範囲を指定すると、ソフトウェアはこの範囲内の固有振動数をもつ極のみを計算します。離散時間モデルの場合、ソフトウェアは双一次変換を使用して同等の固有振動数を近似します。

    zpk は指定した周波数範囲内のすべての極と零点を計算するため、通常は低周波数範囲を指定して多数の極と零点を計算しないように制限します。既定では、焦点は未指定 ([0 Inf]) であり、アルゴリズムは MaxNumber 個までの極と零点を計算します。

    R2025a 以降

    計算する極と零点の最大数。正の整数として指定します。この値により、アルゴリズムによって計算される極および零点の数と、元のスパース モデルの近似の次数が制限されます。

    R2025a 以降

    スペクトル シフト。有限スカラーとして指定します。

    ソフトウェアは A-sigma*E に逆べき乗法を使用して、指定した範囲 [0,fmax] 内の固有振動数をもつ極を計算し、シフト sigma に最も近い固有値を取得します。A が特異で、sigma がゼロの場合、逆が存在しないためアルゴリズムは失敗します。したがって、積分動作をもつスパース モデル (s = 0 または z = 1 (離散時間モデルの場合)) では、このオプションを使用して、極または零点をこのシフト値に最も近い値に暗黙的にシフトできます。元のモデルの既存の極または零点の値と等しくないシフト値を指定します。

    R2025a 以降

    計算された極と零点の精度の許容誤差。正の有限スカラーとして指定します。この値は、逆べき乗法における計算された固有値の収束を制御します。

    R2025a 以降

    進捗レポートの表示または非表示。"off" または "on" として指定します。

    出力引数

    すべて展開する

    出力システム モデル。以下として返されます。

    • 入力引数 zerospoles および gain に数値が含まれる場合は、零点-極-ゲイン (zpk) モデル オブジェクト。ltiSyszpk モデル タイプに変換する場合、sys は常に zpk モデル オブジェクトになります。

    • 入力引数 zerospoles または gainrealp パラメーターや一般化行列 (genmat) などの調整可能なパラメーターが含まれる場合は、一般化状態空間モデル (genss) オブジェクト。

    • 入力引数 zerospoles または gain に不確かさをもつパラメーターが含まれる場合は、不確かさをもつ状態空間モデル (uss) オブジェクト(不確かさをもつモデルを使用するには Robust Control Toolbox のライセンスが必要です)。

    プロパティ

    すべて展開する

    システムの零点。次のように指定します。

    • 伝達関数零点の cell 配列または SISO モデルの分子の根。

    • MIMO モデルの各 I/O ペアに対する零点の行ベクトルからなる NyNu 列の cell 配列。ここで、Ny は出力数および Nu は入力数です。

    Z の値は実数値または複素数値にできます。

    システムの極。次のように指定します。

    • SISO モデルの場合は伝達関数零点の cell 配列または分母の根。

    • MIMO モデルの各 I/O ペアの場合は極の行ベクトルからなる NyNu 列の cell 配列。ここで、Ny は出力数および Nu は入力数です。

    P の値は実数値または複素数値にできます。

    システム ゲイン。次のように指定します。

    • SISO モデルの場合はスカラー値。

    • MIMO モデルの各 I/O ペアの場合はゲイン値を格納する NyNu 列の行列。ここで、Ny は出力数および Nu は入力数です。

    K の値は実数値または複素数値にできます。

    分子と分母の多項式を表示するために因数分解する方法。次のいずれか 1 つとして指定します。

    • 'roots' — 多項式の根の位置に関する係数を表示します。'roots'DisplayFormat の既定値です。

    • 'frequency' — 根の固有振動数 ω0 と減衰比 ζ に関する係数を表示します。

      'frequency' 表示形式は、Variable の値 'z^-1' または 'q^-1' をもつ離散時間モデルには使用できません。

    • 'time constant' — 根の時定数 τ と減衰比 ζ に関する係数を表示します。

      'time constant' 表示形式は、Variable の値 'z^-1' または 'q^-1' をもつ離散時間モデルには使用できません。

    連続時間モデルの場合、以下の表は多項式の係数が各表示形式でどのように配置されるかを示します。

    DisplayName1 次係数 (実根 R)2 次係数 (複素根ペア R=a±jb)
    'roots'(sR)(s2αs+β), ここで、α=2a, β=a2+b2
    'frequency'(1sω0), ここで、ω0=R12ζ(sω0)+(sω0)2, ここで、ω02=a2+b2, ζ=aω0
    'time constant'(1τs), ここで、τ=1R12ζ(τs)+(τs)2, ここで、τ=1ω0, ζ=aτ

    離散時間モデルの場合、多項式の係数は以下の変数の代入により連続時間モデルと同様に配置されます。

    sw=z1Ts;RR1Ts,

    ここで、Ts はサンプル時間です。離散時間では、τω0 は、等価な連続時間根の時定数と固有振動数と厳密に一致します。ただし、次の条件が満たされていることが必要です。|z1|<<Ts(ω0<<πTs=Nyquist frequency)

    零点-極-ゲイン モデルの表示変数。以下のいずれかとして指定します。

    • 's' — 連続時間モデルの場合の既定値

    • 'z' — 離散時間モデルの既定値

    • 'p''s' と等価

    • 'q''z' と等価

    • 'z^-1''z' の逆

    • 'q^-1''z^-1' と等価

    伝達遅延。次のいずれかとして指定します。

    • スカラー — SISO システムに伝達遅延を、または MIMO システムのすべての入出力ペアに対して同じ伝達遅延を指定します。

    • NyNu 列の配列 — MIMO システムの入出力ペアごとに別々の伝達遅延を指定します。ここで、Ny は出力の数、Nu は入力の数です。

    連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で伝達遅延を指定します。離散時間システムの場合、サンプル時間 Ts の整数倍で伝達遅延を指定します。むだ時間の詳細については、線形システムでのむだ時間を参照してください。

    各入力チャネルの入力遅延。次のいずれかとして指定します。

    • スカラー — SISO システムに入力遅延を、または多入力システムのすべての入力に同じ遅延を指定します。

    • Nu 行 1 列のベクトル — 多入力システムの入力に別々の入力遅延を指定します。Nu は入力の数です。

    連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で入力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts の整数倍で入力遅延を指定します。

    詳細については、線形システムでのむだ時間を参照してください。

    各出力チャネルの出力遅延。次のいずれかとして指定します。

    • スカラー — SISO システムに出力遅延を、または多出力システムのすべての出力に同じ遅延を指定します。

    • Ny 行 1 列のベクトル — 多出力システムの出力に別々の出力遅延を指定します。Ny は出力の数です。

    連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で出力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts の整数倍で出力遅延を指定します。

    詳細については、線形システムでのむだ時間を参照してください。

    サンプル時間。以下として指定します。

    • 0 (連続時間システムの場合)。

    • 離散時間システムのサンプリング周期を表す正のスカラー。TsTimeUnit プロパティによって指定される時間単位で指定します。

    • -1 (サンプル時間が指定されていない離散時間システムの場合)。

    メモ

    Ts を変更してもモデルの離散化やリサンプリングは行われません。連続時間表現と離散時間表現の間の変換を行うには、c2dd2c を使用します。離散時間システムのサンプル時間を変更するには、d2d を使用します。

    時間変数の単位。次のいずれかとして指定します。

    • 'nanoseconds'

    • 'microseconds'

    • 'milliseconds'

    • 'seconds'

    • 'minutes'

    • 'hours'

    • 'days'

    • 'weeks'

    • 'months'

    • 'years'

    TimeUnit の変更は他のプロパティには影響しませんが、システム全体の動作が変わります。chgTimeUnit を使用して、システム動作を変更せずに時間単位を変換します。

    入力チャネル名。以下のいずれかとして指定します。

    • 文字ベクトル (単入力モデルの場合)。

    • 文字ベクトルの cell 配列 (多入力モデルの場合)。

    • '' (いずれの入力チャネルにも名前を指定しない場合)。

    あるいは、自動的なベクトル拡張を使用して多入力モデルの入力名を割り当てることもできます。たとえば、sys が 2 入力モデルである場合は、以下のように入力します。

    sys.InputName = 'controls';

    入力名は自動的に {'controls(1)';'controls(2)'} へと拡張されます。

    省略形表記 u を使用して、InputName プロパティを参照できます。たとえば、sys.usys.InputName と同じです。

    InputName の使用目的は次のとおりです。

    • モデル表示とプロット上のチャネルの識別

    • MIMO システムのサブシステムの抽出

    • モデル相互接続時における接続点の指定

    入力チャネル単位。以下のいずれかとして指定します。

    • 文字ベクトル (単入力モデルの場合)。

    • 文字ベクトルの cell 配列 (多入力モデルの場合)。

    • '' (いずれの入力チャネルにも単位を指定しない場合)。

    InputUnit を使用して入力信号の単位を指定します。InputUnit はシステムの動作に影響しません。

    入力チャネル グループ。構造体として指定します。InputGroup プロパティを使用して、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照します。InputGroup のフィールド名はグループ名であり、フィールドの値は各グループの入力チャネルです。たとえば、入力チャネル 12、および 35 をそれぞれ含む、controls および noise という名前の入力グループを作成するには、次のように入力します。

    sys.InputGroup.controls = [1 2];
    sys.InputGroup.noise = [3 5];

    その後、以下を使用して controls 入力からすべての出力にサブシステムを抽出できます。

    sys(:,'controls')

    既定では、InputGroup はフィールドのない構造体です。

    出力チャネル名。次のいずれかとして指定されます。

    • 文字ベクトル (単出力モデルの場合)。

    • 文字ベクトルの cell 配列 (多出力モデルの場合)。

    • '' (いずれの出力チャネルにも名前を指定しない場合)。

    あるいは、自動的なベクトル拡張を使用して多出力モデルの出力名を割り当てることもできます。たとえば、sys が 2 出力モデルである場合は、以下のように入力します。

    sys.OutputName = 'measurements';

    出力名は自動的に {'measurements(1)';'measurements(2)'} へと拡張されます。

    省略形表記 y を使用して OutputName プロパティを参照することもできます。たとえば、sys.ysys.OutputName と同じです。

    OutputName の使用目的は次のとおりです。

    • モデル表示とプロット上のチャネルの識別

    • MIMO システムのサブシステムの抽出

    • モデル相互接続時における接続点の指定

    出力チャネル単位。次のいずれかとして指定されます。

    • 文字ベクトル (単出力モデルの場合)。

    • 文字ベクトルの cell 配列 (多出力モデルの場合)。

    • '' (いずれの出力チャネルにも単位を指定しない場合)。

    OutputUnit を使用して出力信号の単位を指定します。OutputUnit はシステムの動作に影響しません。

    出力チャネル グループ。構造体として指定します。OutputGroup を使用して、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照します。OutputGroup のフィールド名はグループ名であり、フィールドの値は各グループの出力チャネルです。たとえば、出力チャネル 1、および 35 をそれぞれ含む、temperature および measurement という名前の出力グループを作成します。

    sys.OutputGroup.temperature = [1];
    sys.OutputGroup.measurement = [3 5];

    その後、以下を使用してすべての入力から measurement 出力にサブシステムを抽出できます。

    sys('measurement',:)

    既定では、OutputGroup はフィールドのない構造体です。

    システム名。文字ベクトルとして指定します。たとえば、'system_1' とします。

    システムに関連付けるユーザー指定のテキスト。文字ベクトルまたは文字ベクトルの cell 配列として指定します。たとえば、'System is MIMO' とします。

    システムに関連付けるユーザー指定のデータ。任意の MATLAB データ型として指定します。

    モデル配列のサンプリング グリッド。構造体配列として指定します。

    SamplingGrid を使用して、モデル配列の各モデルに関連付けられている変数値を追跡します。これには同定された線形時不変 (IDLTI) モデル配列も含まれます。

    構造体のフィールド名をサンプリング変数の名前に設定します。フィールドの値を、配列内の各モデルに関連付けられているサンプリングされた変数の値に設定します。すべてのサンプリング変数は数値スカラーでなければならず、サンプル値のすべての配列はモデル配列の次元と一致しなければなりません。

    たとえば、t = 0:10 の各時点で線形時変システムのスナップショットを記録することにより、線形モデルの 11 行 1 列の配列 sysarr を作成することができます。次のコードは線形モデルでの時間サンプルを格納します。

     sysarr.SamplingGrid = struct('time',0:10)

    同様に、2 つの変数 zetaw を個別にサンプリングすることにより、6 行 9 列のモデル配列 M を作成できます。次のコードは (zeta,w) の値を M にマッピングします。

    [zeta,w] = ndgrid(<6 values of zeta>,<9 values of w>)
    M.SamplingGrid = struct('zeta',zeta,'w',w)

    M を表示する際、配列の各エントリは対応する zetaw の値を取り込みます。

    M
    M(:,:,1,1) [zeta=0.3, w=5] =
     
            25
      --------------
      s^2 + 3 s + 25
     
    
    M(:,:,2,1) [zeta=0.35, w=5] =
     
             25
      ----------------
      s^2 + 3.5 s + 25
     
    ...

    複数のパラメーター値または操作点で Simulink® モデルを線形化することにより生成されたモデル配列の場合、SamplingGrid には配列の各エントリに対応する変数値が自動的に入力されます。たとえば、Simulink Control Design™ のコマンド linearize (Simulink Control Design) および slLinearizer (Simulink Control Design) により、SamplingGrid が自動的に入力されます。

    既定では、SamplingGrid はフィールドのない構造体です。

    オブジェクト関数

    以下のリストには、zpk モデルで使用できる関数の代表的なサブセットが含まれています。一般に、動的システム モデルに適用できるすべての関数は zpk オブジェクトに適用できます。

    すべて展開する

    step動的システムのステップ応答
    impulse動的システムのインパルス応答プロット、インパルス応答データ
    lsim任意の入力に対する動的システムの時間応答シミュレーション データを計算
    bode動的システムのボード周波数応答
    nyquist動的システムのナイキスト応答
    nichols動的システムのニコルス応答
    bandwidth周波数応答帯域幅
    pole動的システムの極
    zeroSISO 動的システムの零点とゲイン
    pzplot動的システムの極-零点配置図のプロット
    marginゲイン余裕、位相余裕、および交差周波数
    tf伝達関数モデル
    ss状態空間モデル
    c2d連続時間から離散時間へモデルを変換
    d2c離散時間から連続時間へモデルを変換
    d2d離散時間モデルのリサンプリング
    feedback複数のモデルのフィードバック接続
    connect動的システムのブロック線図相互接続
    series2 つのモデルの直列接続
    parallel2 つのモデルの並列接続
    pidtune線形プラント モデルのための PID 調整アルゴリズム
    rlocus動的システムの根軌跡
    lqr線形 2 次レギュレーター (LQR) 設計
    lqg線形 2 次ガウシアン (LQG) 設計
    lqi線形 2 次積分制御
    kalman状態の推定用のカルマン フィルターの設計

    すべて折りたたむ

    この例では、次の連続時間 SISO 零点-極-ゲイン モデルについて考えます。

    sys(s)=-2s(s-1-i)(s-1+i)(s-2)Continuous-time zero-pole-gain model

    零点、極、およびゲインを指定し、SISO 零点-極-ゲイン モデルを作成します。

    zeros = 0;
    poles = [1-1i 1+1i 2];
    gain = -2;
    sys = zpk(zeros,poles,gain)
    sys =
     
              -2 s
      --------------------
      (s-2) (s^2 - 2s + 2)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    この例では、サンプル時間 0.1 秒の次の SISO 離散時間零点-極-ゲイン モデルについて考えます。

    sys(s)=7(z-1)(z-2)(z-3)(z-6)(z-5)(z-4)Discrete-time SISO zero-pole-gain model

    零点、極、ゲインおよびサンプル時間を指定し、離散時間 SISO 零点-極-ゲイン モデルを作成します。

    zeros = [1 2 3];
    poles = [6 5 4];
    gain = 7;
    ts = 0.1;
    sys = zpk(zeros,poles,gain,ts)
    sys =
     
      7 (z-1) (z-2) (z-3)
      -------------------
       (z-6) (z-5) (z-4)
     
    Sample time: 0.1 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    

    この例では、SISO 零点-極-ゲイン モデルを連結して MIMO 零点-極-ゲイン モデルを作成します。次の単入力、2 出力の連続時間零点-極-ゲイン モデルについて考えます。

    sys(s)=[(s-1)(s+1)(s+2)(s+2+i)(s+2-i)].

    SISO エントリを連結して MIMO 零点-極-ゲイン モデルを指定します。

    zeros1 = 1;
    poles1 = -1;
    gain = 1;
    sys1 = zpk(zeros1,poles1,gain)
    sys1 =
     
      (s-1)
      -----
      (s+1)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    
    zeros2 = -2;
    poles2 = [-2+1i -2-1i];
    sys2 = zpk(zeros2,poles2,gain)
    sys2 =
     
          (s+2)
      --------------
      (s^2 + 4s + 5)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    
    sys = [sys1;sys2]
    sys =
     
      From input to output...
           (s-1)
       1:  -----
           (s+1)
     
               (s+2)
       2:  --------------
           (s^2 + 4s + 5)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    次の離散時間、多入力、多出力モデルの零点-極-ゲイン モデルを作成します。

    sys(z)=[1(z+0.3)z(z+0.3)-(z-2)(z+0.3)3(z+0.3)]Discrete-time MIMO zero-pole-gain model

    サンプル時間は ts = 0.2 秒です。

    零点と極を cell 配列およびゲインを配列として指定します。

    zeros = {[] 0;2 []};
    poles = {-0.3 -0.3;-0.3 -0.3};
    gain = [1 1;-1 3];
    ts = 0.2;

    離散時間 MIMO 零点-極-ゲイン モデルを作成します。

    sys = zpk(zeros,poles,gain,ts)
    sys =
     
      From input 1 to output...
              1
       1:  -------
           (z+0.3)
     
           - (z-2)
       2:  -------
           (z+0.3)
     
      From input 2 to output...
              z
       1:  -------
           (z+0.3)
     
              3
       2:  -------
           (z+0.3)
     
    Sample time: 0.2 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    

    サンプル時間と共に零点、極、ゲインを指定して、零点-極-ゲイン モデルを作成し、名前と値のペアを使用して状態と入力名を指定します。

    zeros = 4;
    poles = [-1+2i -1-2i];
    gain = 3;
    ts = 0.05;
    sys = zpk(zeros,poles,gain,ts,'InputName','Force')
    sys =
     
      From input "Force" to output:
         3 (z-4)
      --------------
      (z^2 + 2z + 5)
     
    Sample time: 0.05 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    

    入力名の数は、零点の数と一致しなければなりません。

    入力と出力に名前を付けるのは、MIMO システムで応答プロットを扱うときに有用である可能性があります。

    step(sys)

    MATLAB figure

    ステップ応答プロットのタイトルの入力名 Force に注目してください。

    この例では、有理式を使用して連続時間の零点-極-ゲイン モデルを作成します。有理式を使用すると、極や零点を指定するよりも簡単でより直観的になる場合があります。

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

    sys(s)=ss2+2s+10.

    伝達関数モデルを作成するには、まず szpk オブジェクトとして指定します。

    s = zpk('s')
    s =
     
      s
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    有理式で s を使用して零点-極-ゲイン モデルを作成します。

    sys = s/(s^2 + 2*s + 10)
    sys =
     
             s
      ---------------
      (s^2 + 2s + 10)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    この例では、有理式を使用して離散時間の零点-極-ゲイン モデルを作成します。有理式を使用すると、極や零点を指定するよりも簡単でより直観的になる場合があります。

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

    sys(z)=z-1z2-1.85z+0.9.Discrete-time zero-pole-gain model

    零点-極-ゲインモデルを作成するには、まず zzpk オブジェクトとして指定し、サンプル時間 ts を指定します。

    ts = 0.1;
    z = zpk('z',ts)
    z =
     
      z
     
    Sample time: 0.1 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    

    有理式で z を使用して零点-極-ゲイン モデルを作成します。

    sys = (z - 1) / (z^2 - 1.85*z + 0.9)
    sys =
     
             (z-1)
      -------------------
      (z^2 - 1.85z + 0.9)
     
    Sample time: 0.1 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    

    この例では、別の零点-極-ゲイン モデルから継承されたプロパティをもつ零点-極-ゲイン モデルを作成します。次の 2 つの零点-極-ゲイン モデルについて考えます。

    sys1(s)=2ss(s+8)andsys2(s)=0.8(s-1)(s+3)(s-5).Two zero-pole-gain models with inherited properties

    この例では、TimeUnit プロパティと InputDelay プロパティを 'minutes' に設定して sys1 を作成します。

    zero1 = 0;
    pole1 = [0;-8];
    gain1 = 2;
    sys1 = zpk(zero1,pole1,gain1,'TimeUnit','minutes','InputUnit','minutes')
    sys1 =
     
        2 s
      -------
      s (s+8)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    
    propValues1 = [sys1.TimeUnit,sys1.InputUnit]
    propValues1 = 1×2 cell
        {'minutes'}    {'minutes'}
    
    

    sys1 から継承されたプロパティをもつ 2 つ目の零点-極-ゲイン モデルを作成します。

    zero = 1;
    pole = [-3,5];
    gain2 = 0.8;
    sys2 = zpk(zero,pole,gain2,sys1)
    sys2 =
     
       0.8 (s-1)
      -----------
      (s+3) (s-5)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    
    propValues2 = [sys2.TimeUnit,sys2.InputUnit]
    propValues2 = 1×2 cell
        {'minutes'}    {'minutes'}
    
    

    零点-極-ゲイン モデル sys2sys1 と同じプロパティをもつことを確認してください。

    次の 2 入力、2 出力の静的ゲイン行列 m について考えます。

    m=[2435]MIMO static gain matrix

    ゲイン行列を指定して静的ゲイン零点-極-ゲインを作成します。

    m = [2,4;...
        3,5];
    sys1 = zpk(m)
    sys1 =
     
      From input 1 to output...
       1:  2
     
       2:  3
     
      From input 2 to output...
       1:  4
     
       2:  5
     
    Static gain.
    Model Properties
    

    上記で取得した静的ゲイン零点-極-ゲイン モデル sys1 を使用して、そのモデルを別の零点-極-ゲイン モデルとカスケードさせることができます。

    sys2 = zpk(0,[-1 7],1)
    sys2 =
     
           s
      -----------
      (s+1) (s-7)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    
    sys = series(sys1,sys2)
    sys =
     
      From input 1 to output...
               2 s
       1:  -----------
           (s+1) (s-7)
     
               3 s
       2:  -----------
           (s+1) (s-7)
     
      From input 2 to output...
               4 s
       1:  -----------
           (s+1) (s-7)
     
               5 s
       2:  -----------
           (s+1) (s-7)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    この例では、次の状態空間モデルの零点-極-ゲイン モデルを計算します。

    A=[-2-11-2],B=[112-1],C=[10],D=[01].State-space matrices

    状態空間行列を使用して状態空間モデルを作成します。

    A = [-2 -1;1 -2];
    B = [1 1;2 -1];
    C = [1 0];
    D = [0 1];
    ltiSys = ss(A,B,C,D);

    状態空間モデル ltiSys を零点-極-ゲイン モデルに変換します。

    sys = zpk(ltiSys)
    sys =
     
      From input 1 to output:
            s
      --------------
      (s^2 + 4s + 5)
     
      From input 2 to output:
      (s^2 + 5s + 8)
      --------------
      (s^2 + 4s + 5)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    for ループを使用して零点-極-ゲイン モデルの配列を指定できます。

    最初に、零点-極-ゲイン モデル配列にゼロを事前に割り当てます。

    sys = zpk(zeros(1,1,3));

    最初の 2 つのインデックスはモデルの出力と入力の数を表し、3 つ目のインデックスは配列内のモデルの数を表します。

    for ループで有理式を使用して零点-極-ゲイン モデルの配列を作成します。

    s = zpk('s');                                                  
    for k = 1:3                                                             
        sys(:,:,k) = k/(s^2+s+k);                                          
    end
    sys
    sys(:,:,1,1) =
     
            1
      -------------
      (s^2 + s + 1)
     
    
    sys(:,:,2,1) =
     
            2
      -------------
      (s^2 + s + 2)
     
    
    sys(:,:,3,1) =
     
            3
      -------------
      (s^2 + s + 3)
     
    3x1 array of continuous-time zero/pole/gain models.
    Model Properties
    

    この例では、同定された多項式モデルの測定成分とノイズ成分を 2 つの別々の零点-極-ゲイン モデルに抽出します。

    identifiedModel.mat の Box-Jenkins 多項式モデル ltiSys を読み込みます。

    load('identifiedModel.mat','ltiSys');

    ltiSys は同定された y(t)=BFu(t)+CDe(t) 形式の離散時間モデルで、BF は測定成分、CD はノイズ成分を表します。

    測定成分とノイズ成分を零点-極-ゲイン モデルとして抽出します。

    sysMeas = zpk(ltiSys,'measured') 
    sysMeas =
     
      From input "u1" to output "y1":
                -0.14256 z^-1 (1-1.374z^-1)
      z^(-2) * -----------------------------
               (1-0.8789z^-1) (1-0.6958z^-1)
     
    Sample time: 0.04 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    
    sysNoise = zpk(ltiSys,'noise')
    sysNoise =
     
      From input "v@y1" to output "y1":
                0.045563 (1+0.7245z^-1)
      --------------------------------------------
      (1-0.9658z^-1) (1 - 0.0602z^-1 + 0.2018z^-2)
     
    Input groups:        
        Name     Channels
        Noise       1    
                         
    Sample time: 0.04 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    

    測定成分はプラント モデルとすることができ、ノイズ成分は制御システム設計の外乱モデルとして使用できます。

    この例では、入力遅延 0.5 秒および出力遅延 2.5 秒の SISO 零点-極-ゲイン モデルを作成します。

    zeros = 5;
    poles = [7+1i 7-1i -3];
    gains = 1;
    sys = zpk(zeros,poles,gains,'InputDelay',0.5,'OutputDelay',2.5)
    sys =
     
                          (s-5)
      exp(-3*s) * ----------------------
                  (s+3) (s^2 - 14s + 50)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    get コマンドを使用して MATLAB オブジェクトのすべてのプロパティを表示することもできます。

    get(sys)
                    Z: {[5]}
                    P: {[3×1 double]}
                    K: 1
        DisplayFormat: 'roots'
             Variable: 's'
              IODelay: 0
           InputDelay: 0.5000
          OutputDelay: 2.5000
            InputName: {''}
            InputUnit: {''}
           InputGroup: [1×1 struct]
           OutputName: {''}
           OutputUnit: {''}
          OutputGroup: [1×1 struct]
                Notes: [0×1 string]
             UserData: []
                 Name: ''
                   Ts: 0
             TimeUnit: 'seconds'
         SamplingGrid: [1×1 struct]
    

    LTI モデルのむだ時間の指定の詳細については、むだ時間の指定を参照してください。

    この例では、次の零点-極-ゲイン モデルで表されるシステムについて、0.75 rad/s のターゲット帯域幅をもつ 2-DOF PID コントローラーを設計します。

    sys(s)=1s2+0.5s+0.1Zero-pole-gain model

    zpk コマンドを使用して零点-極-ゲイン モデル オブジェクト sys を作成します。

    zeros = [];
    poles = [-0.25+0.2i;-0.25-0.2i];
    gain = 1;
    sys = zpk(zeros,poles,gain)
    sys =
     
                1
      ---------------------
      (s^2 + 0.5s + 0.1025)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    ターゲット帯域幅を使用し、pidtuneを使用して 2-DOF コントローラーを生成します。

    wc = 0.75;
    C2 = pidtune(sys,'PID2',wc)
    C2 =
     
                           1              
      u = Kp (b*r-y) + Ki --- (r-y) + Kd*s (c*r-y)
                           s              
    
      with Kp = 0.512, Ki = 0.0975, Kd = 0.574, b = 0.38, c = 0
     
    Continuous-time 2-DOF PID controller in parallel form.
    Model Properties
    

    タイプ 'PID2' を使用すると、pidtune により 2-DOF コントローラーが生成され、pid2 オブジェクトとして表現されます。表示によりこの結果を確認します。表示にはまた、pidtune がすべてのコントローラー係数を、設定点の重み b および c を含めて調整し、性能とロバスト性のバランスを取っていることも示されます。

    ライブ エディターによる対話型の PID 調整については、PID コントローラーの調整ライブ エディター タスクを参照してください。このタスクを使用すると、PID コントローラーを対話的に設計し、ライブ スクリプト用の MATLAB コードを自動的に生成できます。

    スタンドアロン アプリによる対話型の PID 調整には、PID 調整器を使用します。アプリを使用したコントローラーの設計の例については、高速設定値追従用の PID コントローラーの設計を参照してください。

    R2025a 以降

    この例では、スパース状態空間モデルの打ち切られた零点-極-ゲイン モデルを取得する方法を示します。この例では、円柱ロッドの熱分布の熱モデルを線形化することで得られるスパース モデルを使用します。

    モデル データを読み込みます。

    load cylindricalRod.mat
    sys = sparss(A,B,C,D,E);
    w = logspace(-7,-1,20);
    size(sys)
    Sparse state-space model with 3 outputs, 1 inputs, and 7522 states.
    

    モデルの周波数応答を解析します。

    sigmaplot(sys,w)

    MATLAB figure

    打ち切られた近似を得るには、zpk を使用して、焦点の周波数帯域を指定します。このモデルでは、0 rad/s ~ 0.01 rad/s までの周波数範囲を使用することで、低次の近似が得られます。

    zsys = zpk(sys,Focus=[0 1e-2],Display="off");

    周波数応答を比較します。

    sigmaplot(sys,zsys,w)

    MATLAB figure

    この熱モデルでは、0.001 rad/s を超えると急勾配のロールオフが生じています。既定では、zpk を使用して得られた低次元化モデルは、このロールオフに適切に一致しません。これを軽減するために、zpkRollOff 引数を使用して、焦点の周波数帯域を超えたときの最小ロールオフ値を指定できます。ロールオフの傾きの値として -45 を指定します。これは、–900 db/decade 以上のレートに相当します。

    zsys2 = zpk(sys,Focus=[0 1e-2],RollOff=-45,Display="off");
    sigmaplot(sys,zsys2,w)

    MATLAB figure

    低次元化されたモデルで、ロールオフ値の近似が大幅に改善されました。ただし、この例では、zpk を使用してロールオフの傾きを再調整するには、零点と極を再計算する必要があります。そのため、大規模モデルの場合、計算コストが高くなる可能性があります。代わりに、reducespecの零点-極打ち切り法を使用して、ソフトウェアが極と零点を計算した後に、追加の計算コストをかけずにロールオフを調整できます。例については、Zero-Pole Truncation of Thermal Modelを参照してください。

    アルゴリズム

    zpk は、MATLAB 関数 roots を使用して伝達関数を変換し、関数 zeropole を使用して状態空間モデルを変換します。

    スパース モデルを変換するために、zpk は逆べき乗法に Krylov-Schur アルゴリズム [1] を使用して、指定した周波数帯域内の極と零点を計算します。

    参照

    [1] Stewart, G. W. “A Krylov--Schur Algorithm for Large Eigenproblems.” SIAM Journal on Matrix Analysis and Applications 23, no. 3 (January 2002): 601–14. https://doi.org/10.1137/S0895479800371529.

    バージョン履歴

    R2006a より前に導入

    すべて展開する