Main Content

linearize

Simulink モデルまたはサブシステムの線形近似

説明

linsys = linearize(model,io) は、io で指定された解析ポイントを使用して、非線形 Simulink® モデル model のモデル操作点での線形近似を返します。io を使用して、個別の解析ポイントを指定したり、線形化するブロックまたはサブシステムを指定したりできます。io を省略した場合、linearize はモデルのルート レベルの入力端子と出力端子を解析ポイントとして使用します。

linsys = linearize(model,io,op) は操作点 op でモデルを線形化します。

linsys = linearize(model,io,param) は、param で指定されたパラメーター値の変化を使用してモデルを線形化します。モデル ワークスペース、MATLAB® ワークスペースあるいはデータ ディクショナリ内で変数によって値が与えられる、任意のモデル パラメーターを変化させることができます。

linsys = linearize(model,io,blocksub) は、blocksub で指定された代替のブロックまたはサブシステムの線形化を使用してモデルを線形化します。

linsys = linearize(model,io,options) は、追加の線形化オプションを使用してモデルを線形化します。

linsys = linearize(model,io,op,param,blocksub,options) は、opparamblocksub および options の任意の組み合わせを任意の順序で使用してモデルを線形化します。

linsys = linearize(___,'StateOrder',stateorder) は、前述の任意の構文で線形化されたモデルにおける状態の順序を指定します。

[linsys,linop] = linearize(___) は、モデルが線形化された操作点を返します。この構文は、シミュレーションのスナップショットで線形化を行う場合や、線形化中にパラメーターを変化させる場合に使用します。

[linsys,linop,info] = linearize(___) は追加の線形化情報を返します。info で返される線形化情報を選択するには、options で対応するオプションを有効にします。

すべて折りたたむ

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

PID Controller ブロックの出力で、線形化入力を指定します。これは Water-Tank System ブロックの入力信号です。

io(1) = linio('watertank/PID Controller',1,'input');

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

io(2) = linio('watertank/Water-Tank System',1,'openoutput');

指定された I/O セットを使用してモデルを線形化します。

linsys = linearize(mdl,io);

linsys は、モデルの操作点でのプラントの線形近似です。

Simulink モデルを開きます。

mdl = 'magball';
open_system(mdl)

ボールの高さが 0.05 である定常状態の操作点を見つけます。既定の操作点の仕様を作成し、高さの状態を既知の値に設定します。

opspec = operspec(mdl);
opspec.States(5).Known = 1;
opspec.States(5).x = 0.05;

モデルを平衡化して操作点を見つけます。

options = findopOptions('DisplayReport','off');
op = findop(mdl,opspec,options);

線形化の入力および出力信号を指定して、閉ループ伝達関数を計算します。

io(1) = linio('magball/Desired Height',1,'input');
io(2) = linio('magball/Magnetic Ball Plant',1,'output');

指定された I/O セットを使用して、指定された操作点でモデルを線形化します。

linsys = linearize(mdl,io,op);

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

閉ループ伝達関数を計算するため、まず線形化の入力信号と出力信号を指定します。

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

sys10 秒間シミュレートして、モデルを線形化します。

linsys = linearize(mdl,io,10);

Simulink モデルを開きます。

mdl = 'scdcascade';
open_system(mdl)

外側のループのコントローラー ゲイン Kp1 および Ki1 にパラメーターの変化を指定します。ゲイン値ごとにパラメーター グリッドを作成します。

Kp1_range = linspace(Kp1*0.8,Kp1*1.2,6);
Ki1_range = linspace(Ki1*0.8,Ki1*1.2,4);
[Kp1_grid,Ki1_grid] = ndgrid(Kp1_range,Ki1_range);

NameValue のフィールドをもつパラメーター値構造体を作成します。

params(1).Name = 'Kp1';
params(1).Value = Kp1_grid;
params(2).Name = 'Ki1';
params(2).Value = Ki1_grid;

params は、6 行 4 列のパラメーター値グリッドです。各グリッド点は、Kp1 および Ki1 の値の一意の組み合わせに対応します。

システムの閉ループ応答を計算するため、線形化の入力ポイントと出力ポイントを定義します。

io(1) = linio('scdcascade/setpoint',1,'input');
io(2) = linio('scdcascade/Sum',1,'output');

指定されたパラメーター値を使用してモデルの操作点でモデルを線形化します。

linsys = linearize(mdl,io,params);

Simulink モデルを開きます。

mdl = 'scdpwm';
open_system(mdl)

モデルから線形化の入力と出力を抽出します。

io = getlinio(mdl);

モデルの操作点でモデルを線形化します。

linsys = linearize(mdl,io)
linsys =
 
  D = 
                Step
   Plant Model     0
 
Static gain.

Voltage to PWM ブロックの不連続性のため、モデルがゼロに線形化されます。線形化中にこのブロックが単位ゲインとして扱われるよう、このブロックに代替の線形化を指定します。

blocksub.Name = 'scdpwm/Voltage to PWM';
blocksub.Value = 1;

指定されたブロック置換を使用してモデルを線形化します。

linsys = linearize(mdl,blocksub,io)
linsys =
 
  A = 
                 State Space(  State Space(
   State Space(        0.9999       -0.0001
   State Space(        0.0001             1
 
  B = 
                   Step
   State Space(  0.0001
   State Space(   5e-09
 
  C = 
                State Space(  State Space(
   Plant Model             0             1
 
  D = 
                Step
   Plant Model     0
 
Sample time: 0.0001 seconds
Discrete-time state-space model.

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

Water-Tank System ブロックを線形化するため、線形化の入力と出力を指定します。

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

線形化のオプション セットを作成し、線形化されるモデルのサンプル時間を指定します。

options = linearizeOptions('SampleTime',0.1);

指定されたオプションを使用してプラントを線形化します。

linsys = linearize(mdl,io,options)
linsys =
 
  A = 
          H
   H  0.995
 
  B = 
      PID Controll
   H       0.02494
 
  C = 
                 H
   Water-Tank S  1
 
  D = 
                 PID Controll
   Water-Tank S             0
 
Sample time: 0.1 seconds
Discrete-time state-space model.

線形化されたプラントは、サンプル時間 0.1 の離散時間状態空間モデルです。

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

線形化するブロックの絶対ブロック パスを指定します。

blockpath = 'watertank/Water-Tank System';

モデルの操作点で指定されたブロックを線形化します。

linsys = linearize(mdl,blockpath);

Simulink モデルを開きます。

mdl = 'magball';
open_system(mdl)

ボールの高さが 0.05 である定常状態の操作点を見つけます。既定の操作点の仕様を作成し、高さの状態を既知の値に設定します。

opspec = operspec(mdl);
opspec.States(5).Known = 1;
opspec.States(5).x = 0.05;
options = findopOptions('DisplayReport','off');
op = findop(mdl,opspec,options);

線形化するブロックのブロック パスを指定します。

blockpath = 'magball/Magnetic Ball Plant';

指定された操作点で、指定されたブロックを線形化します。

linsys = linearize(mdl,blockpath,op);

Simulink モデルを開きます。

mdl = 'magball';
open_system(mdl)

モデルの操作点でプラントを線形化します。

blockpath = 'magball/Magnetic Ball Plant';
linsys = linearize(mdl,blockpath);

線形化したプラントの既定の状態順序を表示します。

linsys.StateName
ans =

  3x1 cell array

    {'height' }
    {'Current'}
    {'dhdt'   }

プラントを線形化し、線形化したモデルで状態の順序を並べ替えます。高さの変化率を 2 番目の状態に設定します。

stateorder = {'magball/Magnetic Ball Plant/height';...
              'magball/Magnetic Ball Plant/dhdt';...
              'magball/Magnetic Ball Plant/Current'};
linsys = linearize(mdl,blockpath,'StateOrder',stateorder);

新しい状態の順序を表示します。

linsys.StateName
ans =

  3x1 cell array

    {'height' }
    {'dhdt'   }
    {'Current'}

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

閉ループ伝達関数を計算するため、まず線形化の入力信号と出力信号を指定します。

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

sys をシミュレートして 0 秒と 10 秒でモデルを線形化します。これらのスナップショット時間に対応する操作点を返します。これはモデルが線形化された操作点です。

[linsys,linop] = linearize(mdl,io,[0,10]);

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

パラメーター A および b を、そのノミナル値の 10% 以内で変化させます。

[A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),...
                         linspace(0.9*b,1.1*b,4));

パラメーターの構造体配列を作成し、各パラメーターに名前とグリッド点を指定します。

params(1).Name = 'A';
params(1).Value = A_grid;
params(2).Name = 'b';
params(2).Value = b_grid;

モデルの既定の操作点の仕様を作成します。

opspec = operspec(mdl);

指定された操作点の仕様とパラメーター グリッドを使用して、モデルを平衡化します。操作点探索レポートを非表示にします。

opt = findopOptions('DisplayReport','off');
[op,opreport] = findop(mdl,opspec,params,opt);

op は、指定されたパラメーター グリッド点に対応する操作点オブジェクトの 3 行 4 列の配列です。

プラント モデルのブロック パスを指定します。

blockpath = 'watertank/Desired  Water Level';

線形化時にオフセットを保存するには、線形化のオプション セットを作成して StoreOffsetstrue に設定します。

options = linearizeOptions('StoreOffsets',true);

指定された I/O ポイントとパラメーターの変化を使用して、平衡化した操作点でプラントをバッチ線形化します。

[linsys,linop,info] = linearize(mdl,blockpath,op,params,options);

LPV System ブロックの構成時に info.Offsets のオフセットを使用できます。

info.Offsets
ans = 

  3x4 struct array with fields:

    x
    dx
    u
    y
    StateName
    InputName
    OutputName
    Ts

入力引数

すべて折りたたむ

Simulink モデル名。文字ベクトルまたは string として指定します。モデルは現在の作業フォルダー内または MATLAB パス上になければなりません。

モデルを線形化するための解析ポイント。以下のいずれかとして指定します。

  • 線形化 I/O オブジェクト、または線形化 I/O オブジェクトのベクトル — 1 つ以上の入力、出力、およびループ開始点を指定します。解析ポイントのリストを作成するには、以下のようにします。

    • 関数 linio を使用して入力、出力および開始点を定義します。

    • 入力、出力および開始点が Simulink モデルで指定されている場合、関数 getlinio を使用してモデルからこれらの点を抽出します。

  • string または文字ベクトル — 線形化するブロックまたはサブシステムの絶対パスを指定します。ソフトウェアは、指定されたブロックの入力端子と出力端子を開ループの入力と出力として扱うため、そのブロックは線形化の前にモデルの残りの部分から分離されます。

io で定義された解析ポイントは、Simulink モデル model またはモデルの階層構造におけるノーマル モードのモデル参照に対応していなければなりません。

io を省略した場合、linearize はモデルのルート レベルの入力端子と出力端子を解析ポイントとして使用します。

線形化の入力、出力、開始点の指定の詳細については、モデルの一部を線形化するよう指定を参照してください。

線形化の操作点。次のいずれかとして指定します。

  • OperatingPoint オブジェクト。次を使用して作成します。

    • operpoint

    • findop。単一の操作点の仕様または単一のスナップショット時間を使用します。

  • OperatingPoint オブジェクトの配列。複数の操作点を指定するものです。OperatingPoint オブジェクトの配列を作成するには、次の方法があります。

  • 1 つ以上のシミュレーション スナップショット時間を表す正のスカラーのベクトル。ソフトウェアは sys をシミュレートして、指定されたスナップショット時間でモデルを線形化します。

    param を使用してパラメーターの変化も指定する場合、ソフトウェアはスナップショット時間とパラメーター グリッド点の各組み合わせに対してモデルをシミュレートします。この操作では、計算量が増大する場合があります。

param を使用してパラメーターの変化を指定する場合、次のようにします。

  • パラメーターがモデルの操作点に影響する場合、op を、パラメーター値のグリッドと同じ次元をもつ操作点の配列として指定します。パラメーター値の組み合わせに対応する操作点を取得するには、線形化の前に param を使用してモデルをバッチ平衡化します。詳細については、パラメーターの変化から派生した複数の操作点でのモデルのバッチ線形化を参照してください。

  • パラメーターがモデルの操作点に影響しない場合、op を単一の操作点として指定します。

ブロックおよびサブシステムの代替の線形化。構造体または n 行 1 列の構造体配列として指定します。n は、線形化を指定するブロックの数です。blocksub を使用して、ブロックまたはサブシステムのカスタム線形化を指定します。たとえば、不連続性や Triggered Subsystem のあるブロックのように解析的な線形化をもたないブロックに線形化を指定できます。

ブロックの線形化を変化させることで生じるモデルのダイナミクスへの影響を調べるには、ブロックに複数の代替の線形化を指定してモデルをバッチ線形化することができます。

線形化を元のブロックまたはサブシステムと異なるサンプル時間に置き換える場合は、全体の線形化サンプル時間 (options.SampleTime) を既定以外の値に設定することをお勧めします。

代替線形化の各構造体には次のフィールドがあります。

線形化を指定するブロックのブロック パス。文字ベクトルまたは string として指定します。

ブロックの代替の線形化。次のいずれかとして指定します。

  • double — SISO ブロックの線形化をゲインとして指定します。

  • double の配列 — MIMO ブロックの線形化を nu 行 ny 列のゲイン値の配列として指定します。ここで nu は入力の数、ny は出力の数です。

  • LTI モデル、不確かさをもつ状態空間モデル、または不確かさをもつ実数のオブジェクト — 指定されたモデルの I/O 構成が、Name で指定されるブロックの構成に一致しなければなりません。不確かさをもつモデルの使用には Robust Control Toolbox™ ソフトウェアが必要です。

  • LTI モデルの配列、不確かさをもつ状態空間モデルの配列、または不確かさをもつ実数のオブジェクトの配列 — 複数のブロック置換を使用してモデルをバッチ線形化します。配列にある各モデルの I/O 構成は、カスタム線形化を指定しているブロックの構成に一致しなければなりません。次のように指定します。

    • param でモデル パラメーターを変化させ、Value をモデル配列として指定する場合、Value の次元はパラメーター グリッドのサイズに一致しなければなりません。

    • op を操作点の配列として指定し、Value をモデル配列として指定する場合、Value の次元は op のサイズに一致しなければなりません。

    • 複数ブロックのブロック置換を定義して、これらのブロックのうち 1 つ以上で Value を LTI モデルの配列として指定する場合、これらの配列の次元が一致しなければなりません。

  • 次のフィールドをもつ構造体。

    フィールド説明
    Specification

    ブロックの線形化。次のいずれかを含む文字ベクトルとして指定します。

    指定された式または関数が次のいずれかを返さなければなりません。

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

    • Control System Toolbox™ LTI モデル オブジェクト

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

    返されるモデルの I/O 構成は、Name で指定されたブロックの構成に一致しなければなりません。

    Type

    仕様のタイプ。次のいずれかとして指定します。

    • 'Expression'

    • 'Function'

    ParameterNames

    線形化関数のパラメーター名。文字ベクトルの cell 配列として指定します。ParameterNames は、Type = 'Function' であり、かつブロックの線形化関数が入力パラメーターを必要とする場合にのみ指定します。これらのパラメーターは、指定されたブロックの線形化にのみ影響を与えます。

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

    ParameterValues

    線形化関数のパラメーター値。double のベクトルとして指定します。パラメーター値の順序は、blocksub.Value.ParameterNames のパラメーター名の順序に一致していなければなりません。ParameterValues は、Type = 'Function' であり、かつブロックの線形化関数が入力パラメーターを必要とする場合にのみ指定します。

線形化のパラメーター サンプル。次のいずれかとして指定します。

  • 構造体 — 次のフィールドをもつ構造体としてパラメーターを指定して、単一パラメーターの値を変化させます。

    • Name — パラメーター名。文字ベクトルまたは string として指定します。モデル ワークスペース、MATLAB ワークスペース、またはデータ ディクショナリ内の変数である任意のモデル パラメーターを指定できます。モデルによって使用される変数がスカラー値でない場合は、スカラー数値に関連付けられた表現としてパラメーター名を指定します。たとえば、ベクトル V の最初の要素をパラメーターとして使用します。

      parameters.Name = 'V(1)';
    • Value — パラメーター サンプル値。double の配列として指定します。

    たとえば、パラメーター A の値を 10% の範囲内で変化させます。

    parameters.Name = 'A';
    parameters.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));
    parameters(1).Name = 'A';
    parameters(1).Value = A_grid;
    parameters(2).Name = 'b';
    parameters(2).Value = b_grid;

詳細については、バッチ線形化用のパラメーター サンプルの指定を参照してください。

param に調整可能なパラメーターのみを指定する場合、ソフトウェアはモデル コンパイルを 1 回のみ実行してモデルをバッチ線形化します。

LPV System ブロックに必要なオフセットを計算するには、param を指定し、options.StoreOffsetstrue に設定します。その後、追加の線形化情報を info に返し、getOffsetsForLPV を使用してオフセットを抽出できます。

線形化の結果の状態の順序。ブロック パスまたは状態名の cell 配列として指定します。stateorder でのブロック パスおよび状態の順序は、linsys における状態の順序を示します。

model 内で状態をもつ任意のブロック、あるいは model 内の名前付きのすべての状態に対してブロック パスを指定できます。

stateordermodel からのすべてのブロックと状態を指定する必要はありません。指定した状態は linsys で最初に出現し、残りの状態はその後に既定の順序で続きます。

線形化アルゴリズムのオプション。linearizeOptions オプション セットとして指定します。

出力引数

すべて折りたたむ

線形化の結果。状態空間モデル、または状態空間モデルの配列として返されます。

ほとんどのモデルでは、linsysss オブジェクトまたは ss オブジェクトの配列として返されます。ただし、modelio で定義された線形化パスに次のいずれかのブロックが含まれている場合、linsys は指定されたタイプの状態空間モデルを返します。

ブロックlinsys のタイプ
genss オブジェクトまたは調整可能なモデル オブジェクトとして指定された置換をもつブロックgenss
uss などの不確かさをもつモデルとして指定された置換をもつブロックuss (Robust Control Toolbox)
Sparse Second Order ブロックmechss
スパース モデルに線形化するように構成された Descriptor State-Space ブロックsparss

linsys の次元は、指定されたパラメーターの変化とブロックの置換、およびモデルを線形化する操作点に依存します。

メモ

opparam または blocksub.Value のうちの複数を配列として指定する場合、それらの次元は一致していなければなりません。

パラメーターの変化ブロックの置換線形化のタイミング結果の linsys の次元
パラメーター変化なしブロック置換なしモデルの操作点単一の状態空間モデル
単一の操作点。op を使用する OperatingPoint オブジェクトまたはスナップショット時間として指定します。
op で指定される N1×...×NmOperatingPoint オブジェクトの配列N1×...×Nm
Ns スナップショット。op を使用するスナップショット時間のベクトルとして指定します。長さ Ns の列ベクトル
blocksub.Value で指定される少なくとも 1 つのブロックの N1× ...×Nm のモデル配列モデルの操作点N1×...×Nm
単一の操作点。op を使用する OperatingPoint オブジェクトまたはスナップショット時間として指定します。
N1×...×Nm の操作点の配列。op を使用する OperatingPoint オブジェクトの配列として指定します。
Ns スナップショット。op を使用するスナップショット時間のベクトルとして指定します。Ns×N1×...×Nm
param で指定される N1×...×Nm のパラメーター グリッドブロック置換なし、あるいは blocksub.Value で指定される少なくとも 1 つのブロックの N1×...×Nm のモデル配列モデルの操作点N1×...×Nm
単一の操作点。op を使用する OperatingPoint オブジェクトまたはスナップショット時間として指定します。
op で指定される N1×...×NmOperatingPoint オブジェクトの配列
Ns スナップショット。op を使用するスナップショット時間のベクトルとして指定します。Ns×N1×...×Nm

たとえば、以下を仮定します。

  • op が 4 行 3 列の OperatingPoint オブジェクトの配列で、パラメーターの変化またはブロックの置換を指定しないとします。この場合、linsys は 4 行 3 列のモデル配列になります。

  • op が単一の OperatingPoint オブジェクトで、param に 3×4×2 のパラメーター グリッドを指定するとします。この場合、linsys は 3×4×2 のモデル配列になります。

  • op が 2 つの要素をもつ正のスカラーの行ベクトルで、param を指定しないとします。この場合、linsys は 2 つの要素をもつ列ベクトルになります。

  • op が 3 つの要素をもつ正のスカラーの列ベクトルで、param に 5 行 6 列のパラメーター グリッドを指定するとします。この場合、linsys は 3×5×6 のモデル配列になります。

  • op が単一の操作点オブジェクトで、パラメーターの変化を指定せず、blocksub.Value がモデル内の 1 つのブロックの 2 行 3 列のモデル配列であるとします。この場合、linsys は 2 行 3 列のモデル配列になります。

  • op が 4 つの要素をもつ正のスカラーの列ベクトルで、パラメーターの変化を指定せず、blocksub.Value がモデル内の 1 つのブロックの 1 行 2 列のモデル配列であるとします。この場合、linsys は 4×1×2 のモデル配列になります。

モデル配列の詳細については、モデル配列を参照してください。

モデルが線形化された操作点。OperatingPoint オブジェクト、または linsys と同じ次元をもつ OperatingPoint オブジェクトの配列として返されます。linop の各要素は、その対応する linsys モデルが取得された操作点です。

op を単一の操作点の OperatingPoint オブジェクトまたは OperatingPoint オブジェクトの配列として指定する場合、linopop のコピーになります。op を単一の操作点オブジェクトとして指定し、param を使用してパラメーターの変化も指定する場合、linop は、パラメーター グリッドと同じ次元をもつ配列です。この場合、linop の要素は op のスカラー拡張されたコピーです。

モデルが妥当な操作点で線形化されたかどうかを判断するには、linop にある状態と入力を確認します。

線形化の情報。次のフィールドを含む構造体として返されます。

モデルが線形化された操作点に対応する線形化のオフセット。options.StoreOffsetsfalse の場合 [] として返されます。それ以外の場合、Offsets は次のいずれかとして返されます。

  • linsys が単一の状態空間モデルの場合、Offsets は構造体になります。

  • linsys が状態空間モデルの配列の場合、Offsetslinsys と同じ次元をもつ構造体配列になります。

オフセットの各構造体には次のフィールドがあります。

フィールド説明
x線形化に使用された状態のオフセット。長さ nx の列ベクトルとして返されます。nxlinsys にある状態の数です。
y線形化に使用された出力のオフセット。長さ ny の列ベクトルとして返されます。nylinsys にある出力の数です。
u線形化に使用された入力のオフセット。長さ nu の列ベクトルとして返されます。nulinsys にある入力の数です。
dx連続時間システムの微分オフセット、または離散時間システムの更新された状態値。長さ nx の列ベクトルとして返されます。
StateName状態名。linsys.StateName の名前に一致する nx 個の要素をもつ cell 配列として返されます。
InputName入力名。linsys.InputName の名前に一致する nu 個の要素をもつ cell 配列として返されます。
OutputName出力名。linsys.OutputName の名前に一致する ny 個の要素をもつ cell 配列として返されます。
Ts線形化されたシステムのサンプル時間。linsys.Ts のサンプル時間に一致するスカラーとして返されます。連続時間システムの場合、Ts0 です。

Offsets が構造体配列の場合、オフセットを使用して LPV System ブロックを構成できます。これを行うには、まず getOffsetsForLPV を使用してオフセットを必要な形式に変換します。例については、LTI システムの配列を使用した非線形動作の近似を参照してください。

線形化の診断情報。options.StoreAdvisorfalse の場合は [] として返されます。それ以外の場合、Advisor は次のいずれかとして返されます。

  • linsys が単一の状態空間モデルの場合、AdvisorLinearizationAdvisor オブジェクトになります。

  • linsys が状態空間モデルの配列の場合、Advisorlinsys と同じ次元をもつ LinearizationAdvisor オブジェクトの配列になります。

LinearizationAdvisor オブジェクトは個々の線形化ブロックについての線形化の診断情報を格納します。LinearizationAdvisor オブジェクトを使用して線形化の結果をトラブルシューティングする例は、コマンド ラインを使用した線形化の結果のトラブルシューティングを参照してください。

制限

  • ローカル ソルバーを使用するように構成されている参照モデルが含まれているモデルの階層構造では、線形化はサポートされていません。

  • ローカル ソルバーを使用するように構成されている Simscape™ ネットワークでは、線形化はサポートされていません。

詳細

すべて折りたたむ

カスタムの線形化関数

MATLAB パスでカスタム関数を使用して、Simulink モデル内のブロックまたはサブシステムの代替の線形化を指定できます。

カスタムの線形化関数は 1 つの入力引数 BlockData をもたなければなりません。これは、ソフトウェアが作成して関数に渡す構造体です。BlockData には次のフィールドがあります。

フィールド説明
BlockNameカスタム線形化の指定対象となるブロックの名前。
Parametersブロック パラメーター値。Name フィールドと Value フィールドをもつ構造体配列として指定します。Parameters には、blocksub.Value.ParameterNames フィールドと blocksub.Value.ParameterValues フィールドで指定するパラメーターの名前と値が含まれます。
Inputs

線形化の定義対象のブロックへの入力信号。各ブロック入力ごとに構造体を 1 つもつ構造体配列として指定します。Inputs の各構造体には次のフィールドがあります。

フィールド説明
BlockName対応するブロック入力に接続する出力をもつブロックの絶対ブロック パス。
PortIndex対応するブロック入力に接続する、BlockName で指定されるブロックの出力端子。
ValuesBlockName および PortIndex で指定される信号の値。この信号がベクトル信号の場合、Values は同じ次元をもつベクトルです。
nyブロック線形化の出力チャネル数。
nuブロック線形化の入力チャネル数。
BlockLinearizationブロックの現在の既定の線形化。状態空間モデルとして指定します。BlockLinearization を使用して既定の線形化に依存するブロック線形化を指定できます。

カスタム関数は nu の入力と ny の出力をもつモデルを返さなければなりません。このモデルは次のいずれかでなければなりません。

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

  • Control System Toolbox LTI モデル オブジェクト

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

たとえば、次の関数は現在の既定のブロック線形化を Td = 0.5 秒の遅延で乗算します。遅延はサンプル時間 Ts = 0.1 の Thiran フィルターで表されます。遅延とサンプル時間は BlockData に保存されているパラメーターです。

function sys = myCustomFunction(BlockData)
    Td = BlockData.Parameters(1).Value;
    Ts = BlockData.Parameters(2).Value;
    sys = BlockData.BlockLinearization*Thiran(Td,Ts);
end 

この関数を MATLAB パス上の場所に保存します。

この関数をブロックまたはサブシステムのカスタム線形化として使用するには、blocksub.Value.Specification フィールドと blocksub.Value.Type フィールドを指定します。

blocksub.Value.Specification = 'myCustomFunction';
blocksub.Value.Type = 'Function';

遅延およびサンプル時間のパラメーター値を設定するには、blocksub.Value.ParameterNames フィールドと blocksub.Value.ParameterValues フィールドを指定します。

blocksub.Value.ParameterNames = {'Td','Ts'};
blocksub.Value.ParameterValues = [0.5 0.1];

アルゴリズム

すべて折りたたむ

線形化のモデル プロパティ

既定では、linearize によって以下の Simulink モデル プロパティが自動的に設定されます。

  • BufferReuse = 'off'

  • RTWInlineParameters = 'on'

  • BlockReductionOpt = 'off'

  • SaveFormat = 'StructureWithTime'

線形化の後、Simulink は元のモデル プロパティを復元します。

ブロックごとの線形化

Simulink Control Design™ ソフトウェアは、ブロックごとの手法を使用してモデルを線形化します。Simulink モデル内の各ブロックを個別に線形化し、これらのブロックの線形化を組み合わせる方法でシステム全体の線形化を行います。

ソフトウェアは操作点から各ブロックの入力と状態のレベルを判断し、これらのレベルでの各ブロックのヤコビアンを取得します。

ブロックによっては、この方法ではソフトウェアが解析的な線形化を計算できないことがあります。以下に例を示します。

  • 一部の非線形性にはヤコビアンが定義されていません。

  • ステート チャートや Triggered Subsystem など、一部の離散ブロックはゼロに線形化される傾向があります。

  • 一部のブロックはヤコビアンを実装しません。

  • S-Function ブロックや MATLAB Function ブロックなどのカスタム ブロックには解析的なヤコビアンがありません。

そのようなブロックについては、想定される線形化がわかっている場合にはカスタム線形化を指定できます。カスタム線形化を指定しない場合、ソフトウェアはブロックの入力と状態を摂動させて、その摂動への応答を測定することによりモデルを線形化します。それぞれの入力および状態について、既定の摂動レベルは次のとおりです。

  • 倍精度値の場合、105(1+|x|)

  • 単精度値の場合、0.005(1+|x|)

ここで、x は操作点における対応する入力または状態の値です。個々のブロックの摂動レベルを変更する方法の詳細については、線形化時に摂動するブロックの摂動レベルの変更を参照してください。

詳細については、非線形モデルの線形化および正確な線形化アルゴリズムを参照してください。

全モデルの数値摂動法

全モデルの数値摂動法を使ってシステムを線形化できます。ここで、ソフトウェアはルートレベルの入力と状態の値に摂動を与えることによってモデル全体の線形化を計算します。そのためには、linearizeOptions オブジェクトを作成して LinearizationAlgorithm プロパティを次のいずれかに設定します。

  • 'numericalpert' — 前進差分を使用して入力と状態に摂動を与えます。つまり、入力と状態の値に摂動を加えます。この摂動法は、通常 'numericalpert2' 法よりも高速です。

  • 'numericalpert2' — 中心差分を使用して入力と状態に摂動を与えます。つまり、入力と状態の値に正と負の両方向の摂動を加えます。この摂動法は、通常 'numericalpert' 法よりも正確です。

それぞれの入力と状態につき、ソフトウェアはモデルに摂動を与え、これらの摂動へのモデル応答に基づく線形モデルを計算します。NumericalPertRel 線形化オプションを使用して、状態と入力の摂動レベルを構成できます。

ブロックごとの線形化には、全モデルの数値摂動法よりも優れた点がいくつかあります。

  • 大半の Simulink ブロックには線形化が事前にプログラムされており、ブロックの正確な線形化を提供します。

  • 線形解析ポイントを使用して、線形化するモデルの部分を指定できます。

  • モデルのシミュレーションに影響を与えずにカスタム線形化を使用するようにブロックを設定できます。

  • 構造的な非最小状態は自動的に削除されます。

  • 不確かさを伴う線形化を指定できます (Robust Control Toolbox ソフトウェアが必要)。

  • 詳細な診断情報を取得できます。

  • マルチレート モデルを線形化する場合、異なるレート変換法を使用できます。全モデルの数値摂動法は、ゼロ次ホールドのレート変換のみを使用できます。

詳細については、非線形モデルの線形化および正確な線形化アルゴリズムを参照してください。

代替方法

関数 linearize に替わる方法として、次のいずれかの方法でモデルを線形化することができます。

ブロックごとの線形化は Simulink Control Design ソフトウェアと Simulink 関数 linmod の両方で実行されますが、Simulink Control Design の線形化機能ではより柔軟なユーザー インターフェイスが提供され、Control System Toolbox の数値アルゴリズムも使用されます。詳細については、Simulink Control Design を使用した線形化と Simulink を使用した線形化の比較を参照してください。

バージョン履歴

R2006a で導入

すべて展開する