ドキュメンテーション

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

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 を使用することもできます。1 つのブロックに対して複数の代替の線形化を指定すると、代替ごとに線形化が得られます (バッチ線形化)。この機能は、たとえば Saturation ブロックの線形化を変化させたときにモデル ダイナミクスが受ける影響を調べるために使用します。

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

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

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

  • Value — ブロックの要求される線形化。次のいずれかで指定します。

    • double (1 など)。SISO モデルにのみ使用してください。入力か出力 (もしくは両方) が複数あるモデルの場合は、double の配列を使用します。たとえば、[0 1] とします。各配列要素が、対応する I/O の組み合わせに対して線形化を指定します。

    • LTI モデル、不確かさをもつ状態空間モデル (Robust Control Toolbox™ ソフトウェアが必要) または不確かさをもつ実数のオブジェクト (Robust Control Toolbox ソフトウェアが必要)。モデルの I/O は Name で指定されるブロックの I/O に一致しなければなりません。たとえば、zpk([],[-10 -20],1) とします。

    • LTI モデルの配列、不確かさをもつ状態空間モデルの配列または不確かさをもつ実数のオブジェクトの配列。たとえば、[zpk([],[-10 -20],1); zpk([],[-10 -50],1)] とします。

      モデル パラメーターの値を変化させる場合、LTI モデル配列のサイズはグリッド サイズと一致しなければなりません。

    • 次のフィールドをもつ構造体 (各フィールドの詳細は、フィールド名をクリックしてください)。

      •  仕様

      •  タイプ

      •  ParameterNames

      •  ParameterValues

出力引数

linsys

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

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

op

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

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

linblock

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

モデル操作点での線形化

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

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

    sys = 'watertank';
    load_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 によってモデル プロパティが元に戻されます。

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