ドキュメンテーション センター

  • 評価版
  • 製品アップデート

目次

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

linearize

Simulink モデルまたはブロックの線形近似

構文

linsys = linearize(sys,io)
linsys = linearize(sys,op)
linsys = linearize(sys,op,io)
linsys = linearize(sys,op,io,options)
linsys = linearize(sys,io,param)
[linsys,op] = linearize(sys,io,tsnapshot)
linsys = linearize(sys,op,io,'StateOrder',stateorder)
linblock = linearize(sys,blockpath,op)
linsys = linearize(sys,blocksub,op,io)

説明

linsys = linearize(sys,io) は、線形化 I/O ポイント io によって定義された非線形 Simulink® モデルを線形化します。線形化は、Simulink モデルの初期状態と入力レベルに対応する操作点を使用します。

linsys = linearize(sys,op) は、線形化 I/O ポイントが sys でルート レベルの入力および出力ブロックであるように、Simulink モデル全体を線形化します。線形化には、操作点 op を使用します。

linsys = linearize(sys,op,io) は、線形化 I/O ポイント io によって指定されたモデルを線形化します。

linsys = linearize(sys,op,io,options) は、options で指定されたアルゴリズム オプションを使用します。

linsys = linearize(sys,io,param) は、param で指定されたパラメーターの値を変化させて、指定された I/O ポイントを使用してモデルをバッチ線形化します。線形化は、Simulink モデルの初期状態と入力レベルに対応する操作点を使用します。

[linsys,op] = linearize(sys,io,tsnapshot) は、1 回または複数のシミュレーション回数 tsnapshot でモデルを線形化します。シミュレーションのスナップショットに対応する操作点 op を返します。線形化 I/O ポイントとして sys のルート レベルの入力および出力ブロックを使用する場合は、io を省略します。

linsys = linearize(sys,op,io,'StateOrder',stateorder) は、指定された状態順序で線形モデルを返します。

linblock = linearize(sys,blockpath,op) は、blockpath によって指定されたモデル sys のブロックを線形化します。線形化には、操作点 op を使用します。

linsys = linearize(sys,blocksub,op,io) は、線形化 I/O ポイント io によって定義された非線形 Simulink モデルを線形化します。blocksub は、ブロックおよびサブシステムの代替の線形化を指定します。この構文を使用して、たとえば、ブロックのカスタム線形化を指定します。また、不連続性や Triggered Subsystem のあるブロックのように、正常に線形化されないブロックでこの構文を使用することもできます。モデルの操作点を使用する場合は、操作点 op を省略します。線形化 I/O ポイントとして sys のルート レベルの入力および出力ブロックを使用する場合は、io を省略します。

入力引数

sys

単一引用符 (' ') 内の文字列として指定された Simulink モデル名。

io

linio を使用して指定された線形化 I/O オブジェクト。

線形化入力および出力ポイントが Simulink モデルでコメントされている場合は、getlinio を使用してこれらの点をモデルから io に抽出します。

io は、Simulink モデル sys またはモデルの階層構造におけるノーマル モードのモデル参照に対応していなければなりません。

op

operpoint または findop を使用して指定された操作点オブジェクト。

op は、Simulink モデル sys に対応していなければなりません。

options

関数 linearizeOptions により指定されたアルゴリズム オプション。

param

パラメーターのバリエーション。以下で指定します。

  • 構造体 — 単一のパラメーターの場合、param は以下のフィールドをもつ構造体でなければなりません。

    • Name — パラメーター名。文字列または MATLAB® 式として指定します。

    • Value — パラメーター サンプル値。倍精度配列として指定します。

    たとえば、以下のようにします。

    param.Name = 'A';
    param.Value = linspace(0.9*A,1.1*A,3);
  • 構造体配列 — 複数のパラメーターの値を変化させます。たとえば、A および b のモデル パラメーターの値を 10% の範囲で変化させるとします。

    [A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),...
                               linspace(0.9*b,1.1*b,3));
    params(1).Name = 'A';
    params(1).Value = A_grid;
    params(2).Name = 'b';
    params(2).Value = b_grid;

param で調整可能なパラメーターを指定する場合、ソフトウェアは単一のモデルのコンパイルを使用して、モデルをバッチ線形化します。

tsnapshot

スカラーまたはベクトルとして指定された、モデルを線形化する際のシミュレーション スナップショット時間の時刻。

stateorder

線形化の結果の状態の順序。状態をもつブロックのブロック パスのセル配列として指定。それぞれのブロック パスは、モデル内のブロックを一意に識別する、model/subsystem/block 形式の文字列です。

セル配列内のブロック パスの順序は、線形化されたモデルの状態に必要とされる順序と一致していなければなりません。

blockpath

線形化するブロック、ブロックの絶対パスとして指定。ブロック パスは、モデル内のブロックを一意に識別する、model/subsystem/block 形式の文字列です。

blocksub

ブロックおよびモデル サブシステムの代替の線形化。blocksub を使用して、ブロックまたはサブシステムのカスタム線形化を指定します。また、不連続性や Triggered Subsystem のあるブロックのように、解析的な線形化のないブロックに blocksub を使用することもできます。

blocksub は、n-by-1 の構造です。ここで、n は線形化を指定するブロックの数です。blocksub は以下のフィールドをもちます。

  • Name — 線形化を指定するブロックに対応するブロック パス

    blocksub.Name は、モデル内のブロックを一意に識別する、model/subsystem/block 形式の文字列です。

  • Value — ブロックの必要な線形化、これらのフィールドをもつ構造体で指定。

    Specification — ブロックの線形化、文字列形式で指定。文字列には、次のうちの 1 つを返す MATLAB 式または関数を含めることができます。

    • D 行列形式の線形モデル

    • Control System Toolbox の線形時不変 (LTI) モデル オブジェクト

    • Robust Control Toolbox™ の不確かさをもつ状態空間または不確かさをもつ実際のオブジェクト (Robust Control Toolbox ソフトウェアが必要)

    blocksub.Value.Specification が MATLAB 式の場合、この式は 「記号の関連付け」 で説明されている関連付けルールに従わなければなりません。

    blocksub.Value.Specification が関数の場合、この関数は 1 つの入力引数 BlockData をもたなければなりません。これは、ソフトウェアが自動的に作成し、仕様の関数に渡す構造体です。BlockData には次のフィールドがあります。

    • BlockName は、指定された線形化の Simulink ブロックの名前です。

    • Parameters は、ブロックに対する評価値を含む構造体配列です。配列の各要素は、'Name' および 'Value' フィールドをもちます。これには、それぞれパラメーターの名前と評価値が含まれます。

    • Inputs は、以下のフィールドをもつ構造体です。

      • BlockName — 線形化を指定するブロックの入力に接続する出力をもつブロックの名前が含まれます。たとえば、Dynamics というブロックの線形化を指定し、Dynamics の 2 番目の入力が Torque というブロックからの信号で駆動される場合、BlockData.Inputs(2).BlockNameTorque のブロックの絶対パス名になります。

      • PortIndexBlockName のどの出力端子が、線形化を指定するブロックの入力に対応するかを識別します。たとえば、Torque からの 3 番目の出力が Dynamics の 2 番目の入力を駆動する場合、BlockData.Inputs(2).PortIndex = 3 となります。

      • ValuesBlockName および PortIndex で指定される信号の値です。この信号がベクトル値の信号の場合、Values は対応する次元のベクトルです。

    • ny は、ブロック線形化の出力チャンネル数です。

    • nu は、ブロック線形化の入力チャンネル数です。

    • Type — 指定タイプ、次の文字列の 1 つとして指定します。

      'Expression'
      'Function'
    • ParameterNames — 線形化関数パラメーター名、コンマで区切られた文字列のリストとして指定します。blocksub.Value.Type = 'Function' およびブロックの線形化関数が入力パラメーターを必要とする場合にのみ指定します。これらのパラメーターは、指定されたブロックの線形化にのみ影響を与えます。

      対応する blocksub.Value.ParameterValues フィールドも指定しなければなりません。

    • ParameterValuesblocksub.Values.ParameterNames に対応する線形化関数パラメーター値。blocksub.Value.Type = 'Function' の場合にのみ指定。

      blocksub.Value.ParameterValues は、コンマで区切られた値のリストです。パラメーター値の順序は、blocksub.Value.ParameterNames のパラメーター名の順序に一致していなければなりません。

    • BlockLinearization は、ブロックの現在の既定の設定である、状態空間 (ss) モデルです。BlockData.BlockLinearization を仕様関数に使用して、遅延を乗算した既定の線形化などのように、既定の線形化に依存するブロックの線形化を指定することができます。

出力引数

linsys

線形化 I/O ポイント io によって指定された非線形モデルを近似する線形時不変の状態空間モデル

linsys は、ss オブジェクトとして返されます。

op

操作点オブジェクトとして返された、tsnapshot で状態および入力レベルのシミュレーション スナップショットに対応する操作点。これは、operpoint または findop を使用して返されるオブジェクトと同じです。

モデルが応答可能な操作点で線形化されたかどうかを判断するには、op 値を確認します。

linblock

ss オブジェクトとして返された、指定された非線形ブロックを近似する線形時不変の状態空間モデル。

モデル操作点での線形化

以下の例では、linearize を使用してモデルで指定された操作点でモデルを線形化する方法を説明します。モデルの操作点は、モデルの初期状態値と入力信号から構成されています。

  1. Simulink モデルを開きます。

    sys = 'watertank';
    load_system(sys);
    open_system(sys)

    Water-Tank System ブロックはこの制御システム内のプラントを表し、システムの非線形性のすべてを含みます。

  2. 線形化 I/O ポイントを使用して Water-Tank System ブロックの線形化を指定します。

    sys_io(1)=linio('watertank/PID Controller',1,'input');
    sys_io(2)=linio('watertank/Water-Tank System',1,'openoutput');

    それぞれの線形化 I/O ポイントはブロックの出力端子に関連しています。たとえば、Water-Tank System ブロック入力で線形化入力ポイントを指定するには、この入力ポイントを PID Controller ブロックの出力端子に関連付けなければなりません。

    sys_io は、2 つの線形化 I/O オブジェクトを含むオブジェクト配列です。最初のオブジェクト sys_io(1) は、最初の watertank/PID Controller 出力信号で入力ポイントの線形化を指定します。2 番目のオブジェクト sys_io(2) は、最初の watertank/Water-Tank System 出力信号で出力ポイントの線形化を指定します。

      メモ:   複数のブロック出力信号があり、1 番目の出力以外に出力端子を指定する場合は、linio の 2 番目の引数として必要な出力端子番号を入力します。

    線形化出力ポイントを開ループとして指定することで、モデルの操作点を変更することなく、線形化に対するフィードバック信号の影響が取り除かれます。

      メモ:   モデルからフィードバック信号を手動で削除してループを開くことはしないでください。信号を手動で削除すると、モデルの操作点が変更されます。

  3. 修正された線形化 I/O オブジェクトを反映するために、モデルを更新します。

    setlinio(sys,sys_io);

    入力ポイント、出力ポイントまたはループ開始点を追加すると、モデルに線形化 I/O マーカーが表示されます。これらのマーカーを使用して、線形化ポイントを可視化します。

  4. モデルの操作点で Water-Tank System ブロックを線形化します。

    linsys = linearize(sys,sys_io);
    bdclose(sys);

    linsys は、状態空間モデル オブジェクトです。

  5. 線形化されたモデルのボード線図をプロットします。

    bode(linsys)

    結果のボード線図は、予想どおり安定した 1 次応答のようになります。

 

シミュレーション スナップショットでの線形化

以下の例では、linearize を使用してモデルをシミュレーションし、指定されたシミュレーション時間にシステムの状態および入力レベルを抽出することによって、モデルを線形化する方法を説明します。

  1. Simulink モデルを開きます。

    sys = 'watertank';
    load_system(sys);
    

    Water-Tank System ブロックはこの制御システム内のプラントを表し、システムの非線形性のすべてを含みます。

  2. モデルをシミュレーションして、モデルが定常状態に達する時間を判断します。

    Scope ブロックは、約 20 単位時間でシステムが定常状態に達したことを示しています。

  3. 開ループ Water-Tank System の線形化を指定します。

    sys_io(1)=linio('watertank/PID Controller',1,'input');
    sys_io(2)=linio('watertank/Water-Tank System',1,'openoutput');

    sys_io(2) を計算する最後の入力引数により、フィードバック ループが開きます。

      メモ:   モデルからフィードバック信号を手動で削除してループを開くことはしないでください。信号を手動で削除すると、モデルの操作点が変更されます。

  4. シミュレーション時間 20 単位で Water-Tank System ブロックを線形化します。

    tsnapshot = 20;
    linsys = linearize(sys,sys_io,tsnapshot);
    bdclose(sys);

    linsys は、状態空間モデル オブジェクトです。

  5. 線形化されたモデルのボード線図をプロットします。

    bode(linsys)

    結果のボード線図は、予想どおり安定した 1 次応答のようになります。

 

平衡化された操作点の線形化

以下の例では、linearize によって、平衡化された操作点を使用してモデルを線形化する方法を説明します。

  1. Simulink モデルを開きます。

    sys = 'watertank';
    load_system(sys);
  2. 操作点の仕様オブジェクトを作成します。

    opspec = operspec(sys);

    既定の設定では、すべてのモデルの状態が定常状態で指定されています。

  3. 平衡化された解析を使用して、安定した定常状態の操作点を見つけます。

    op = findop(sys,opspec);
    
  4. 開ループ Water-Tank System の線形化を指定します。

    sys_io(1)=linio('watertank/PID Controller',1,'input');
    sys_io(2)=linio('watertank/Water-Tank System',1,'openoutput');
  5. 平衡化された操作点で Water-Tank System ブロックを線形化します。

    linsys = linearize(sys,op,sys_io);
    bdclose(sys);

    linsys は、状態空間モデル オブジェクトです。

 

複数のシミュレーションのスナップショットでの線形化

以下の例では、linearize を使用して複数のシミュレーションのスナップショットでモデルを線形化する方法を説明します。

  1. Simulink モデルを開きます。

    sys = 'watertank';
    load_system(sys);
  2. 開ループ Water-Tank System の線形化を指定します。

    sys_io(1)=linio('watertank/PID Controller',1,'input');
    sys_io(2)=linio('watertank/Water-Tank System',1,'openoutput');
  3. モデルを線形化するシミュレーション時間を定義します。

    tsnapshot = [1,20];
    linsys = linearize(sys,sys_io,tsnapshot);
    bdclose(sys);
  4. ボード線図をプロットします。

    bode(linsys);

 

モデル操作点でのプラント線形化

以下の例では、関数 linearize を使用してモデルの操作点でサブシステムを線形化する方法を説明します。

プラントがサブシステムまたはブロックの場合は、線形化 I/O ポイントを定義するのではなく、この方法を使用します。

  1. Simulink モデルを開きます。

    sys = 'watertank';
    load_system(sys);
    blockpath = 'watertank/Water-Tank System';
  2. Water-Tank System ブロックを線形化します。

    linsys = linearize(sys,blockpath);
    bdclose(sys);

代替方法

関数 linearize を使用する代わりに、以下を使用してモデルを線形化します。

詳細

すべて展開する

アルゴリズム

既定では、関数 linearize は以下の Simulink モデル プロパティを自動的に設定します。

  • BufferReuse = 'off'

  • RTWInlineParameters = 'on'

  • BlockReductionOpt = 'off'

線形化の完了後、Simulink によって元のモデル プロパティが復元されます。

参考

| | |

関連する例

この情報は役に立ちましたか?