linearize
Simulink モデルまたはサブシステムの線形近似
構文
説明
は、前述の任意の構文で線形化されたモデルにおける状態の順序を指定します。linsys = linearize(___,'StateOrder',stateorder)
例
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');
sys を 10 秒間シミュレートして、モデルを線形化します。
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);
Name と Value のフィールドをもつパラメーター値構造体を作成します。
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" に設定します。これにより、linearize の info 出力引数に線形化のオフセットが返されます。
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.Offsetsans=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 フィルターはむだ時間全体を近似できます。線形化オプション opt の opt.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 つ以上の入力、出力、およびループ開始点を指定します。解析ポイントのリストを作成するには、以下のようにします。
string または文字ベクトル — 線形化するブロックまたはサブシステムの絶対パスを指定します。ソフトウェアは、指定されたブロックの入力端子と出力端子を開ループの入力と出力として扱うため、そのブロックは線形化の前にモデルの残りの部分から分離されます。
io で定義された解析ポイントは、Simulink モデル model またはモデルの階層構造におけるノーマル モードのモデル参照に対応していなければなりません。
io を省略した場合、linearize はモデルのルート レベルの入力端子と出力端子を解析ポイントとして使用します。
線形化の入力、出力、開始点の指定の詳細については、モデルの一部を線形化するよう指定を参照してください。
線形化の操作点。次のいずれかとして指定します。
OperatingPointオブジェクト。次を使用して作成します。OperatingPointオブジェクトの配列。複数の操作点を指定するものです。OperatingPointオブジェクトの配列を作成するには、次の方法があります。findopを使用して複数のスナップショット時間で操作点を抽出します。複数の操作点仕様を使用してモデルをバッチ平衡化します。詳細については、複数の仕様に対する定常状態の操作点のバッチ計算を参照してください。
パラメーターの変化を使用してモデルをバッチ平衡化します。詳細については、パラメーターが変化する定常状態の操作点のバッチ計算を参照してください。
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 構成は、カスタム線形化を指定しているブロックの構成に一致しなければなりません。次のように指定します。
次のフィールドをもつ構造体。
フィールド 説明 Specificationブロックの線形化。次のいずれかを含む文字ベクトルとして指定します。
MATLAB 式
現在の作業フォルダー内または MATLAB パス上にあるカスタムの線形化関数の名前
指定された式または関数が次のいずれかを返さなければなりません。
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.StoreOffsets を true に設定します。その後、追加の線形化情報を info に返し、getOffsetsForLPV を使用してオフセットを抽出できます。
線形化アルゴリズムのオプション。linearizeOptions オプション セットとして指定します。
出力引数
線形化の結果。状態空間モデル、または状態空間モデルの配列として返されます。
ほとんどのモデルでは、linsys は ss オブジェクトまたは ss オブジェクトの配列として返されます。ただし、model の io で定義された線形化パスに次のいずれかのブロックが含まれている場合、linsys は指定されたタイプの状態空間モデルを返します。
| ブロック | linsys のタイプ |
|---|---|
genss オブジェクトまたは調整可能なモデル オブジェクトとして指定された置換をもつブロック | genss |
uss などの不確かさをもつモデルとして指定された置換をもつブロック | uss (Robust Control Toolbox) |
| Sparse Second Order ブロック | mechss |
| スパース モデルに線形化するように構成された Descriptor State-Space ブロック | sparss |
linsys の次元は、指定されたパラメーターの変化とブロックの置換、およびモデルを線形化する操作点に依存します。
| パラメーターの変化 | ブロックの置換 | 線形化のタイミング | 結果の linsys の次元 |
|---|---|---|---|
| パラメーター変化なし | ブロック置換なし | モデルの操作点 | 単一の状態空間モデル |
単一の操作点。op を使用する OperatingPoint オブジェクトまたはスナップショット時間として指定します。 | |||
op で指定される N1×...×Nm の OperatingPoint オブジェクトの配列 | 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×...×Nm の OperatingPoint オブジェクトの配列 | |||
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 オブジェクトの配列として指定する場合、linop は op のコピーになります。op を単一の操作点オブジェクトとして指定し、param を使用してパラメーターの変化も指定する場合、linop は、パラメーター グリッドと同じ次元をもつ配列です。この場合、linop の要素は op のスカラー拡張されたコピーです。
モデルが妥当な操作点で線形化されたかどうかを判断するには、linop にある状態と入力を確認します。
線形化の情報。次のフィールドを含む構造体として返されます。
モデルが線形化された操作点に対応する線形化のオフセット。options.StoreOffsets が "none" の場合、[] として返されます。options.StoreOffsets が "struct" の場合、Offsets は次のいずれかとして返されます。
linsysが単一の状態空間モデルの場合、Offsetsは構造体になります。linsysが状態空間モデルの配列の場合、Offsetsはlinsysと同じ次元をもつ構造体配列になります。
オフセットの各構造体には次のフィールドがあります。
| フィールド | 説明 |
|---|---|
x | 線形化に使用された状態のオフセット。長さ nx の列ベクトルとして返されます。nx は linsys にある状態の数です。 |
y | 線形化に使用された出力のオフセット。長さ ny の列ベクトルとして返されます。ny は linsys にある出力の数です。 |
u | 線形化に使用された入力のオフセット。長さ nu の列ベクトルとして返されます。nu は linsys にある入力の数です。 |
dx | 連続時間システムの微分オフセット、または離散時間システムの更新された状態値。長さ nx の列ベクトルとして返されます。 |
StateName | 状態名。linsys.StateName の名前に一致する nx 個の要素をもつ cell 配列として返されます。 |
InputName | 入力名。linsys.InputName の名前に一致する nu 個の要素をもつ cell 配列として返されます。 |
OutputName | 出力名。linsys.OutputName の名前に一致する ny 個の要素をもつ cell 配列として返されます。 |
Ts | 線形化されたシステムのサンプル時間。linsys.Ts のサンプル時間に一致するスカラーとして返されます。連続時間システムの場合、Ts は 0 です。 |
Offsets が構造体配列の場合、オフセットを使用して LPV System ブロックを構成できます。これを行うには、まず getOffsetsForLPV を使用してオフセットを必要な形式に変換します。例については、LTI システムの配列を使用した非線形動作の近似を参照してください。
さらに、ss モデルおよび sparss モデルの Offsets プロパティにオフセットを直接返す場合は、options.StoreOffsets を "system" に設定します。 (R2025a 以降)
線形化の診断情報。options.StoreAdvisor が false の場合は [] として返されます。それ以外の場合、Advisor は次のいずれかとして返されます。
linsysが単一の状態空間モデルの場合、AdvisorはLinearizationAdvisorオブジェクトになります。linsysが状態空間モデルの配列の場合、Advisorはlinsysと同じ次元をもつLinearizationAdvisorオブジェクトの配列になります。
LinearizationAdvisor オブジェクトは個々の線形化ブロックについての線形化の診断情報を格納します。LinearizationAdvisor オブジェクトを使用して線形化の結果をトラブルシューティングする例は、コマンド ラインを使用した線形化の結果のトラブルシューティングを参照してください。
制限
ローカル ソルバーを使用するように構成されている参照モデルが含まれているモデルの階層構造では、線形化はサポートされていません。
ローカル ソルバーを使用するように構成されている Simscape™ ネットワークでは、線形化はサポートされていません。
詳細
MATLAB パスでカスタム関数を使用して、Simulink モデル内のブロックまたはサブシステムの代替の線形化を指定できます。
カスタムの線形化関数は 1 つの入力引数 BlockData をもたなければなりません。これは、ソフトウェアが作成して関数に渡す構造体です。BlockData には次のフィールドがあります。
| フィールド | 説明 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
BlockName | カスタム線形化の指定対象となるブロックの名前。 | ||||||||
Parameters | ブロック パラメーター値。Name フィールドと Value フィールドをもつ構造体配列として指定します。Parameters には、blocksub.Value.ParameterNames フィールドと blocksub.Value.ParameterValues フィールドで指定するパラメーターの名前と値が含まれます。 | ||||||||
Inputs | 線形化の定義対象のブロックへの入力信号。各ブロック入力ごとに構造体を 1 つもつ構造体配列として指定します。
| ||||||||
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'BlockReductionOpt = 'off'SaveFormat = 'StructureWithTime'
線形化の後、Simulink は元のモデル プロパティを復元します。
Simulink Control Design™ ソフトウェアは、ブロックごとの手法を使用してモデルを線形化します。Simulink モデル内の各ブロックを個別に線形化し、これらのブロックの線形化を組み合わせる方法でシステム全体の線形化を行います。
ソフトウェアは操作点から各ブロックの入力と状態のレベルを判断し、これらのレベルでの各ブロックのヤコビアンを取得します。
ブロックによっては、この方法ではソフトウェアが解析的な線形化を計算できないことがあります。以下に例を示します。
一部の非線形性にはヤコビアンが定義されていません。
ステート チャートや Triggered Subsystem など、一部の離散ブロックはゼロに線形化される傾向があります。
一部のブロックはヤコビアンを実装しません。
S-Function ブロックや MATLAB Function ブロックなどのカスタム ブロックには解析的なヤコビアンがありません。
そのようなブロックについては、想定される線形化がわかっている場合にはカスタム線形化を指定できます。カスタム線形化を指定しない場合、ソフトウェアはブロックの入力と状態を摂動させて、その摂動への応答を測定することによりモデルを線形化します。それぞれの入力および状態について、既定の摂動レベルは次のとおりです。
倍精度値の場合、。
単精度値の場合、。
ここで、x は操作点における対応する入力または状態の値です。個々のブロックの摂動レベルを変更する方法の詳細については、線形化時に摂動するブロックの摂動レベルの変更を参照してください。
詳細については、非線形モデルの線形化および正確な線形化アルゴリズムを参照してください。
全モデルの数値摂動法を使ってシステムを線形化できます。ここで、ソフトウェアはルートレベルの入力と状態の値に摂動を与えることによってモデル全体の線形化を計算します。そのためには、linearizeOptions オブジェクトを作成して LinearizationAlgorithm プロパティを次のいずれかに設定します。
'numericalpert'— 前進差分を使用して入力と状態に摂動を与えます。つまり、入力と状態の値に摂動を加えます。この摂動法は、通常'numericalpert2'法よりも高速です。'numericalpert2'— 中心差分を使用して入力と状態に摂動を与えます。つまり、入力と状態の値に正と負の両方向の摂動を加えます。この摂動法は、通常'numericalpert'法よりも正確です。
それぞれの入力と状態につき、ソフトウェアはモデルに摂動を与え、これらの摂動へのモデル応答に基づく線形モデルを計算します。NumericalPertRel 線形化オプションを使用して、状態と入力の摂動レベルを構成できます。
ブロックごとの線形化には、全モデルの数値摂動法よりも優れた点がいくつかあります。
大半の Simulink ブロックには線形化が事前にプログラムされており、ブロックの正確な線形化を提供します。
線形解析ポイントを使用して、線形化するモデルの部分を指定できます。
モデルのシミュレーションに影響を与えずにカスタム線形化を使用するようにブロックを設定できます。
構造的な非最小状態は自動的に削除されます。
不確かさを伴う線形化を指定できます (Robust Control Toolbox ソフトウェアが必要)。
詳細な診断情報を取得できます。
マルチレート モデルを線形化する場合、異なるレート変換法を使用できます。全モデルの数値摂動法は、ゼロ次ホールドのレート変換のみを使用できます。
詳細については、非線形モデルの線形化および正確な線形化アルゴリズムを参照してください。
代替方法
関数 linearize に替わる方法として、次のいずれかの方法でモデルを線形化することができます。
モデルを対話的に線形化するには、モデル線形化器アプリを使用します。例については、Simulink モデルのモデル操作点での線形化を参照してください。
伝達関数ごとにモデルを変更したり解析ポイント セットを作成することなく、複数の伝達関数を取得するには、
slLinearizerインターフェイスを使用します。例については、パラメーター値を変化させて複数の伝達関数を取得を参照してください。
ブロックごとの線形化は Simulink Control Design ソフトウェアと Simulink 関数 linmod の両方で実行されますが、Simulink Control Design の線形化機能ではより柔軟なユーザー インターフェイスが提供され、Control System Toolbox の数値アルゴリズムも使用されます。詳細については、Simulink Control Design を使用した線形化と Simulink を使用した線形化の比較を参照してください。
バージョン履歴
R2006a で導入Simulink Control Design ソフトウェアで使用できる線形化ツールでは、線形化に関して次の強化機能が提供されるようになりました。
スパース線形化 — ソフトウェアでは、スパース対応ブロックのブロック置換に依存することなく、1 次スパース (
sparss) モデルを返すことができるようになりました。以前は、linearizeOptionsとslTunerOptionsのBlockReductionオプションが"on"に設定されている場合にのみスパース線形化を実行できました。レート変換オプションの強化 —
linearizeOptionsオブジェクトおよびslTunerOptionsオブジェクトは、新しいRateConversionOptionsプロパティの下にレート変換に関するオプションを保存できるようになりました。さらに、レート変換のオプションにはDelayModelingおよびThiranOrderが含まれるようになりました。DelayModelingオプションを使用すると、離散化からの追加遅延を内部遅延と追加状態のどちらとしてモデル化するかを指定できます。ThiranOrderオプションは、Tustin 離散化の非整数の遅延の近似に使用される Thiran フィルターの次数を指定します。これらのプロパティを設定するには、ドット表記を使用します。opt = linearizeOptions; opt.RateConversionOptions.Method = "tustin"; opt.RateConversionOptions.DelayModeling = "delay"; opt.RateConversionOptions.ThiranOrder = 3;
オフセットの計算と保存 — ソフトウェアでは、オプションの新しい値
"system"を使用して、線形化したssモデルおよびsparssモデルのOffsetsプロパティにオフセットを直接保存できるようになりました。opt = linearizeOptions(StoreOffsets="system")さらに、スナップショットの線形化中にオフセットを計算できるようになりました。シミュレーション中のオフセットの計算は、連続時間ブロックおよび線形離散時間ブロックに限定されます。以下に例を示します。
tsnap = 7.5; sys = linearize(mdl,io,tsnap,opt);
整合性のあるブロックの低次元化 — バッチ線形化を実行するときに
linearizeOptionsおよびslTunerOptionsのBatchConsistencyオプションを使用して、操作点のグリッドにあるすべてのモデルで可能な状態のみを低次元化できるようになりました。さらに、ソフトウェアでは任意のレート変換または遅延のモデル化で、この整合性を維持します。
これらの変更は、LPV モデリングのワークフローも簡略化します。MATLAB および Simulink で LPV モデルを作成するには、線形化グリッド全体で、状態の次元、遅延モデリング、およびオフセットの処理が、整合性があり一様でなければなりません。バッチ線形化結果からの LPV モデルの作成の詳細については、ssInterpolant を参照してください。
線形化ワークフローの改善結果として、linearizeOptions のオフセットおよびレート変換に関するオプションの指定方法が変更されました。次の表でワークフローの変更を説明します。
| R2025a より前 | R2025a |
|---|---|
| オフセット
| オフセット
|
| レート変換
| レート変換
|
Sparse Second Order ブロックまたは Descriptor State-Space ブロックを含む Simulink モデルからスパース モデルを線形化および取得できます。
Simulink モデルで Sparse Second Order を使用する場合の
mechssモデル。Descriptor State-Space ブロックを使用し、[スパース モデルに線形化する] ブロック パラメーターを選択する場合の
sparssモデル。
詳細については、スパース モデルの基礎を参照してください。例については、スパース 2 次モデル オブジェクトへの Simulink モデルの線形化を参照してください。
Simulink モデルを線形化する際にモデルの入力、出力、状態、および状態微分の操作点のオフセットを計算できます。3 つのオフセットにより、線形パラメーター変動 (LPV) システムの作成が合理化します。
操作点のオフセットを取得するには、まず linearizeOptions オブジェクトを作成して、StoreOffsets オプションを true に設定します。その後、モデルを線形化します。
info 出力引数からオフセットを抽出し、関数 getOffsetsForLPV を使用して LPV System ブロックの必要な形式に変換できます。
関数 linearize の blocksub 入力引数を使用して、Simulink ブロックまたはサブシステムの代替の線形化を指定できます。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)