Main Content

linmod

ブロックごとの線形化アルゴリズムを使用して、連続時間線形状態空間モデルを操作点の周りで抽出する

説明

[A,B,C,D] = linmod(mdl) は、各ブロックを 1 つずつ線形化することにより、モデル mdl で表される常微分方程式系の線形状態空間モデルを計算します。モデル内の Inport ブロックと Outport ブロックは、系の入力と出力を表します。

ブロックごとの解析アルゴリズムは、ほとんどのブロックに対して事前にプログラムされた解析ブロックのヤコビアンを使用します。これにより、通常、摂動アルゴリズムより正確な線形化が得られます。Simulink® Control Design™ ドキュメンテーションには、事前にプログラムされた解析的なヤコビアンをもつブロックのリストと、線形化のためのブロックごとの解析アルゴリズムの説明が含まれています。

また、ブロックごとの解析アルゴリズムにより、Transport Delay ブロックや Quantizer ブロックなどの問題のあるブロックの特殊な処理を行うこともできます。

メモ

関数 linmod は、基本的な線形化機能のみを提供します。完全な線形化の機能については、Simulink Control Design ソフトウェアを使用してください。詳細については、線形化ツールの選択 (Simulink Control Design)を参照してください。

[A,B,C,D] = linmod(mdl,x,u) は、状態値 x と入力値 u によって定義された操作点の周りで線形状態空間モデルを計算します。

[A,B,C,D] = linmod(mdl,x,u,opts) は、オプション opts を使用して、指定された操作点の周りで線形状態空間モデルを計算します。

[A,B,C,D] = linmod(mdl,x,u,-v5) は、Version 5.3 以前の摂動アルゴリズムを使用して、状態 x、入力 u として指定された操作点においてモデル mdl で表された常微分方程式系の線形状態空間モデルを計算します。摂動アルゴリズムを使用することは、関数 linmodv5 を使用することと等価です。

[A,B,C,D] = linmod(mdl,x,u,opts,-v5) は、オプション opts を指定し、摂動アルゴリズムを使用して線形状態空間モデルを計算します。

[A,B,C,D] = linmod(mdl,x,u,opts,xpert,upert,-v5) は、状態摂動 xpert と入力摂動 upert を使用し、オプション opts を指定して、摂動アルゴリズムによって線形状態空間モデルを計算します。

[n,d] = linmod(___) は、線形化モデルの伝達関数表現を返します。

sys = linmod(___) は、線形化モデル、状態名、入出力名、および操作点に関する情報を含む構造体を返します。

すべて折りたたむ

関数 linmod を使用して、モデル参照階層から線形モデルを抽出できます。

モデル mdlref_f14 と、モデル mdlref_f14 内の Aircraft Dynamics Model という名前の Model ブロックによって参照されているモデル mdlref_dynamics を開きます。

topmdl = "mdlref_f14";
refmdl = "mdlref_dynamics";

open_system(topmdl)
open_system(refmdl)

モデル参照階層を線形化するときに最良の結果を得るには、最上位モデルとすべての参照モデルをノーマル モードでシミュレーションするように構成します。線形化にはマルチレート参照モデルに関する制限があり、関数 linmod は、アクセラレータ モードでシミュレーションする参照モデルを線形化する際には別のアルゴリズムを使用します。

最上位モデルと Model ブロックのシミュレーション モードを Normal に設定します。

set_param(topmdl,SimulationMode="Normal")
mdlblk = topmdl + "/Aircraft Dynamics Model";
set_param(mdlblk,SimulationMode="Normal")

関数 linmod を使用してモデル mdlref_f14 を線形化します。

[A,B,C,D] = linmod(topmdl);

関数 linmod が返す状態空間モデルは、参照モデルを含む完全なモデルに対応します。

入力引数

すべて折りたたむ

線形化するモデルの名前。string または文字ベクトルとして指定します。

データ型: char | string

モデルを線形化する操作点のモデル状態。構造体またはベクトルとして指定します。モデルを線形化する操作点は、モデルの状態と入力値の組み合わせとして指定されます。

モデルの状態を構造体として抽出するには、関数 Simulink.BlockDiagram.getInitialState を使用します。signals サブ構造体の values フィールドを変更することで、モデル状態の値を編集できます。たとえば、mdl という名前のモデルの状態の値にアクセスするには、次のコマンドを使用します。

mdlState = Simulink.BlockDiagram.getInitialState("mdl");
stateVals = mdlState.signals.values;

次の場合、構造体形式を使用して、モデルを線形化する状態を指定する必要があります。

  • モデルがモデル参照階層である。

  • モデルに、データ型が異なる状態が含まれている。

  • モデルに、データ型が double 以外の状態が含まれている。

モデルを線形化する操作点の入力値。ベクトルとして指定します。モデルを線形化する操作点は、モデルの状態と入力値の組み合わせとして指定されます。

データ型: double

線形化オプション。次の表に記載されている要素と値を含むベクトルとして指定します。

要素既定の設定
opts(1)

モデルの状態と入力を摂動するために使用されるデルタの摂動値。

関数 linmod は、v5 摂動アルゴリズムを使用している場合にのみ、指定された値を使用します。既定のブロックごとの線形化アルゴリズムを使用している場合、関数 linmod は指定された値を無視し、常に既定値 1e-5 を使用します。

1e-5
opts(2)線形化中にブロックを評価する非負の時間。0
opts(3)

直達がないブロックから余分な状態を削除するオプション。

  • 0 — 直達がないブロックから余分な状態を削除しません。

  • 1 — 直達がないブロックから余分な状態を削除します。

0

状態摂動値。構造体またはベクトルとして指定します。次の場合、構造体形式を使用して状態摂動値を指定する必要があります。

  • モデルがモデル参照階層である。

  • モデルに、データ型が異なる状態が含まれている。

  • モデルに、データ型が double 以外の状態が含まれている。

モデル状態を構造体として抽出するには、関数 Simulink.BlockDiagram.getInitialState を使用します。その後、signals サブ構造体の values フィールドを変更することで、構造体の値を編集して各状態の摂動値を指定できます。たとえば、mdl という名前のモデルの状態にアクセスするには、次のコマンドを使用します。

mdlState = Simulink.BlockDiagram.getInitialState("mdl");
stateVals = mdlState.signals.values;

状態と入力摂動の値を指定できるのは、関数 linmodv5 を呼び出すか、入力オプション -v5 を指定して、Version 5.3 以前の摂動アルゴリズムを使用してモデルを線形化する場合のみです。

既定では、次のコードに示すように、摂動値は入力ベクトル opts の最初の要素で指定されたデルタ値を使用して計算されます。

xpert = opts(1) + 1e-3*opts(1)*abs(x);

入力摂動値。構造体またはベクトルとして指定します。

状態と入力摂動の値を指定できるのは、関数 linmodv5 を呼び出すか、入力オプション -v5 を指定して、Version 5.3 以前の摂動アルゴリズムを使用してモデルを線形化する場合のみです。

既定では、次のコードに示すように、摂動値は入力ベクトル opts の最初の要素で指定されたデルタ値を使用して計算されます。

upert = opts(1) + 1e-3*opts(1)*abs(u);

出力引数

すべて折りたたむ

線形化モデルの状態空間表現。ベクトルとして返されます。

線形化モデルの伝達関数表現。ベクトルとして返されます。

線形化モデル。状態名、入出力名、および操作点に関する情報を含む構造体として返されます。

制限

  • 関数 linmod は、基本的な線形化機能のみを提供します。完全な線形化の機能については、Simulink Control Design ソフトウェアを使用してください。詳細については、線形化ツールの選択 (Simulink Control Design)を参照してください。

  • モデル参照階層を線形化する場合は、最上位モデルと参照モデルをノーマル モードでシミュレートするように構成してください。アクセラレータ モードでシミュレートするマルチレート参照モデルの線形化には、複数の制限が存在します。

  • アクセラレータ モードでシミュレートするように構成された参照モデルを含むモデル参照階層を線形化すると、既定のアルゴリズムを使用して最上位モデルが線形化され、数値摂動アルゴリズムを使用して参照モデルが線形化されます。

  • 線形化は、ローカル ソルバーを使用するように構成された参照モデルを 1 つ以上含むモデルに対してはサポートされません。詳細については、Use Local Solvers in Referenced Modelsを参照してください。

ヒント

  • 既定では、システム時間はゼロです。時間に依存するシステムの場合、opts 入力引数の 2 番目の要素を使用してシステム時間を指定できます。

  • 線形化では、線形化モデルの状態の順序が非線形モデルの状態の順序と一致するように、状態の順序が維持されます。サイズ フェーズを実行するためのプログラム インターフェイスとしてモデル名を使用することで、モデル内の状態とその状態に関連付けられたブロックに関する情報を取得できます。blks という名前の戻り引数は、状態に関連付けられた各ブロックの名前を含むベクトルです。詳細については、Use Model Name as Programmatic Interfaceを参照してください。

    [sys,x0,blks,st] = modelName([],[],[],'sizes');
  • 次の関数を使用して、線形化された単入力多出力システムの状態空間線形化表現を別の形式に変換できます。

    • ss2tf — 状態空間から伝達関数形式に変換します。

    • ss2zp (Signal Processing Toolbox) — 状態空間から零点-極形式に変換します。

  • 関数 ss (Control System Toolbox) を使用して、線形化モデルから状態空間モデル オブジェクトを作成できます。状態空間モデル オブジェクトを使用して、制御設計の線形時不変 (LTI) システムを表すことができます。複数の LTI 状態空間モデルを組み合わせて、より複雑なシステムを表すこともできます。

  • 状態空間モデル オブジェクトを作成した後、関数 tf (Control System Toolbox) を使用して伝達関数形式に変換したり、関数 zpk (Control System Toolbox) を使用して零点-極-ゲイン形式に変換したりできます。

  • Transport Delay ブロックまたは Derivative ブロックを含むモデルを線形化する場合は、既定のブロックごとのアルゴリズムをお勧めします。ブロックごとのアルゴリズムは、Transport Delay ブロックと Derivative ブロックをパデ近似に置き換えます。v5 摂動アルゴリズムを使用して、Transport Delay ブロックまたは Derivative ブロックを含むモデルを線形化するのは面倒な場合があります。詳細については、モデルの線形化を参照してください。

  • v5 摂動アルゴリズムを使用して Transport Delay ブロックまたは Derivative ブロックを含むモデルを線形化する前には、Transport Delay ブロックと Derivative ブロックを、Simulink Extras ライブラリ内の Linearization ライブラリで利用可能な特殊なブロックに置き換えてください。

バージョン履歴

R2007a で導入

参考

関数

アプリ

トピック