メインコンテンツ

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 =

  3×1 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 =

  3×1 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 = 'watertankNLModel';
open_system(mdl)

水位の初期条件を指定します。

h0 = 10;

モデルの線形解析ポイントを指定します。

io(1) = linio('watertankNLModel/Step',1,'input');
io(2) = linio('watertankNLModel/H',1,'output');

モデルをシミュレートし、時間スナップショットで操作点を抽出します。

tlin = [0 30 40 50 60 70 80];
op = findop(mdl,tlin);

線形化時にオフセットを保存するには、線形化のオプション セットを作成して StoreOffsets"struct" に設定します。これにより、linearizeinfo 出力引数に線形化のオフセットが返されます。

options = linearizeOptions(StoreOffsets="struct");

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

[linsys,~,info] = linearize(mdl,io,op,options);
info.Offsets
ans=7×1 struct array with fields:
    dx
    x
    u
    y
    OutputName
    InputName
    StateName
    Ts

LPV System ブロックの構成時に info.Offsets のオフセットを使用できます。そのためには、getOffsetsForLPV関数を使用して、サポートされる形式でオフセットを抽出する必要があります。さらに、ssInterpolant関数を使用するときには、追加入力引数として info.Offsets を明示的に指定しなければなりません。

あるいは、線形化された ss モデルの Offsets プロパティにオフセットを直接保存できます。そのためには、StoreOffsets オプションを "system" に設定します。(R2025a 以降)

options.StoreOffsets = "system";
linsys2 = linearize(mdl,io,op,options);
linsys2.Offsets
ans=7×1 struct array with fields:
    dx
    x
    u
    y

オフセットをシステムに直接保存すると、LPV モデリングのワークフローが簡略化され、Simulink® モデルの非線形応答と線形化された応答の比較が容易になります。このシステムを使用し、ssInterpolant を使用して線形パラメーター変動モデルを直接作成する方法の例については、バッチ線形化の結果からの LPV モデルの作成を参照してください。

R2025a 以降

この例では、バッチ線形化を使用するときに、状態の整合性が一様な状態空間モデルの配列を取得する方法を説明します。バッチ線形化を使用して取得した状態空間配列から線形パラメーター変動 (LPV) モデルを作成するには、線形化グリッド全体で、状態の次元、遅延モデリング、およびオフセットの処理が、整合性があり一様でなければなりません。

この例では、実体振子のモデルについて考えます。振子の角度の初期条件は、反時計回りに 45 度で、加えられるトルクはゼロです。さらに、振子の角速度の初期条件は 0 deg/s です。パラメーターを指定してモデルを読み込みます。

tau0 = 0;
mgl = 1;
inv_inert = 1;
c = 0.1;
theta0 = pi/4;
dtheta0 = 0;
mdl = "scdPendulumNoWrap";
load_system(mdl);

この例では、Saturation ブロックをゲインとして扱わないように線形化を設定します。このモデルの Saturation ブロックは合計トルクの入力を -1 ~ 1 の値に制限します。したがって、信号入力値がこの範囲外の場合、線形化ではこのブロックを解析的にゼロに線形化します。

set_param(mdl+"/clip","LinearizeAsGain","off");

Saturation ブロックの入力を線形化入力に、theta を出力に指定します。

io(1) = linio(mdl+"/tau0",1,"input");
io(2) = linio(mdl+"/pendulum",1,"output");

線形化のために、2 つの操作点を作成します。2 番目の操作点では、飽和の範囲外にある入力レベルを指定します。

op1 = operpoint(mdl);
op2 = copy(op1);
op2.Inputs(1).u = 2;
op = [op1,op2];

まず、BatchConsistency オプションを false に設定してシステムを線形化します。

lin_opt = linearizeOptions(StoreOffsets="system",BlockReduction="on",BatchConsistency=false);
sys = linearize(mdl,io,op,lin_opt);
sys
sys(:,:,1,1) =
 
  A = 
                  theta  theta_dot
   theta              0          1
   theta_dot    -0.7071       -0.1
 
  B = 
              tau0
   theta         0
   theta_dot     1
 
  C = 
                     theta  theta_dot
   pendulum/the          1          0
 
  D = 
                 tau0
   pendulum/the     0
 

sys(:,:,2,1) =
 
  D = 
                 tau0
   pendulum/the     0
 
2x1 array of continuous-time state-space models.
Model Properties

バッチの線形化の結果は、定義した操作点に対応する 2 行 1 列の状態空間モデルの配列として返されます。配列内の最初のモデルには 2 つの状態がありますが、2 番目のモデルは、入力レベルが飽和の範囲外にあるため、ゼロに線形化されます。BatchConsistency が無効の場合、線形化では配列内の各モデルが可能な限り低次元化されます。

次に、BatchConsistency オプションを有効にし、同じ操作条件でモデルを再度線形化します。

lin_optc = linearizeOptions(StoreOffsets="system",BlockReduction="on",BatchConsistency=true);
sysc = linearize(mdl,io,op,lin_optc);
sysc
sysc(:,:,1,1) =
 
  A = 
                  theta  theta_dot
   theta              0          1
   theta_dot    -0.7071       -0.1
 
  B = 
              tau0
   theta         0
   theta_dot     1
 
  C = 
                     theta  theta_dot
   pendulum/the          1          0
 
  D = 
                 tau0
   pendulum/the     0
 

sysc(:,:,2,1) =
 
  A = 
                  theta  theta_dot
   theta              0          1
   theta_dot    -0.7071       -0.1
 
  B = 
              tau0
   theta         0
   theta_dot     0
 
  C = 
                     theta  theta_dot
   pendulum/the          1          0
 
  D = 
                 tau0
   pendulum/the     0
 
2x1 array of continuous-time state-space models.
Model Properties

このバッチ線形化では、両方のモデルが 2 つの状態をもつ配列が生成されます。BatchConsistency オプションを有効にすると、線形化ではバッチ線形化配列内の "すべて" のモデルの入出力マップに寄与しない状態と遅延のみを取り除くため、すべてのモデルについて整合性が保持されます。これは特に、グリッド付き LPV モデルを作成するときに役立ちます。

この振子の LPV モデルを作成する方法を示す例については、Create LPV Pendulum Model Using Batch Linearizationを参照してください。

R2025a 以降

この例では、離散化中に発生する追加の遅延をモデル化する方法を説明します。通常、モデルのサンプル時間の整数倍ではない入力遅延または出力遅延をもつモデルを離散化すると、離散の入力遅延と出力遅延のほかに追加の遅延が発生することがあります。linearize では、これらの遅延を内部遅延または追加の状態としてモデル化するかを指定できます。

2 つの状態と入力遅延 2.7 秒をもつ LTI システムを含むシンプルな Simulink® モデルを考えます。

sys = tf([1,2],[1,4,2],InputDelay=2.7);
mdl = "linDelayModeling";
load_system(mdl)

サンプル時間 1 秒でモデルを線形化します。さらに、離散化方法を Tustin (双一次) に設定し、3 次 Thiran フィルターを指定して、非整数の遅延をモデル化します。

opt = linearizeOptions(...
    SampleTime=1,...
    UseExactDelayModel=true);
opt.RateConversionOptions.Method = "tustin";
opt.RateConversionOptions.ThiranOrder = 3;
linsys = linearize(mdl,opt)
linsys =
 
  A = 
              ?          ?          ?          ?          ?
   ?    -0.4286    -0.5714   -0.00265    0.06954      2.286
   ?     0.2857     0.7143  -0.001325    0.03477      1.143
   ?          0          0    -0.2432     0.1449    -0.1153
   ?          0          0       0.25          0          0
   ?          0          0          0      0.125          0
 
  B = 
            in
   ?  0.002058
   ?  0.001029
   ?         8
   ?         0
   ?         0
 
  C = 
                ?          ?          ?          ?          ?
   out     0.2857     0.7143  -0.001325    0.03477      1.143
 
  D = 
              in
   out  0.001029
 
Sample time: 1 seconds
Discrete-time state-space model.
Model Properties

線形化により、3 次 Thiran フィルターに対応する 3 つの追加状態を含む離散化されたモデルが返されます。むだ時間をサンプル時間で除算すると 2.7 になるため、3 次 Thiran フィルターはむだ時間全体を近似できます。線形化オプション optopt.RateConversionOptions.DelayModeling プロパティは、追加の遅延をモデル化する方法を決定します。既定では、これは "state" に設定され、追加の遅延は追加の状態としてモデル化されます。代わりに追加の遅延を内部遅延としてモデル化するには、DelayModeling"delay" に設定します。

opt.RateConversionOptions.DelayModeling = "delay";

モデルを再度線形化します。

linsys2 = linearize(mdl,opt)
linsys2 =
 
  A = 
            ?        ?
   ?  -0.4286  -0.5714
   ?   0.2857   0.7143
 
  B = 
          in
   ?  0.5714
   ?  0.2857
 
  C = 
             ?       ?
   out  0.2857  0.7143
 
  D = 
            in
   out  0.2857
 
  (values computed with all internal delays set to zero)

  Internal delays (sampling periods): 1  1  1 
 
Sample time: 1 seconds
Discrete-time state-space model.
Model Properties

線形化では、追加の遅延を離散化モデルの内部遅延としてモデル化できるようになりました。

入力引数

すべて折りたたむ

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 ブロックの線形化を nuny 列のゲイン値の配列として指定します。ここで 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.StoreOffsets"none" の場合、[] として返されます。options.StoreOffsets"struct" の場合、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 システムの配列を使用した非線形動作の近似を参照してください。

さらに、ss モデルおよび sparss モデルの Offsets プロパティにオフセットを直接返す場合は、options.StoreOffsets"system" に設定します。 (R2025a 以降)

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

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

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

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

制限

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

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

詳細

すべて折りたたむ

アルゴリズム

すべて折りたたむ

代替方法

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

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

バージョン履歴

R2006a で導入

すべて展開する