このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
linearize
Simulink モデルまたはサブシステムの線形近似
構文
説明
は、前述の任意の構文で線形化されたモデルにおける状態の順序を指定します。linsys
= linearize(___,'StateOrder',stateorder
)
例
指定された I/O セットを使用したモデルの線形化
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 = 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';
線形化時にオフセットを保存するには、線形化のオプション セットを作成して StoreOffsets
を true
に設定します。
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
入力引数
model
— Simulink モデル名
文字ベクトル | string
Simulink モデル名。文字ベクトルまたは string として指定します。モデルは現在の作業フォルダー内または MATLAB パス上になければなりません。
io
— 解析ポイント
線形化 I/O オブジェクト | 線形化 I/O オブジェクトのベクトル | string | 文字ベクトル
モデルを線形化するための解析ポイント。以下のいずれかとして指定します。
線形化 I/O オブジェクト、または線形化 I/O オブジェクトのベクトル — 1 つ以上の入力、出力、およびループ開始点を指定します。解析ポイントのリストを作成するには、以下のようにします。
string または文字ベクトル — 線形化するブロックまたはサブシステムの絶対パスを指定します。ソフトウェアは、指定されたブロックの入力端子と出力端子を開ループの入力と出力として扱うため、そのブロックは線形化の前にモデルの残りの部分から分離されます。
io
で定義された解析ポイントは、Simulink モデル model
またはモデルの階層構造におけるノーマル モードのモデル参照に対応していなければなりません。
io
を省略した場合、linearize
はモデルのルート レベルの入力端子と出力端子を解析ポイントとして使用します。
線形化の入力、出力、開始点の指定の詳細については、モデルの一部を線形化するよう指定を参照してください。
op
— 操作点
OperatingPoint
オブジェクト | OperatingPoint
オブジェクトの配列 | 正のスカラーのベクトル
線形化の操作点。次のいずれかとして指定します。
OperatingPoint
オブジェクト。次を使用して作成します。OperatingPoint
オブジェクトの配列。複数の操作点を指定するものです。OperatingPoint
オブジェクトの配列を作成するには、次の方法があります。findop
を使用して複数のスナップショット時間で操作点を抽出します。複数の操作点仕様を使用してモデルをバッチ平衡化します。詳細については、複数の仕様に対する定常状態の操作点のバッチ計算を参照してください。
パラメーターの変化を使用してモデルをバッチ平衡化します。詳細については、パラメーターが変化する定常状態の操作点のバッチ計算を参照してください。
1 つ以上のシミュレーション スナップショット時間を表す正のスカラーのベクトル。ソフトウェアは
sys
をシミュレートして、指定されたスナップショット時間でモデルを線形化します。param
を使用してパラメーターの変化も指定する場合、ソフトウェアはスナップショット時間とパラメーター グリッド点の各組み合わせに対してモデルをシミュレートします。この操作では、計算量が増大する場合があります。
param
を使用してパラメーターの変化を指定する場合、次のようにします。
パラメーターがモデルの操作点に影響する場合、
op
を、パラメーター値のグリッドと同じ次元をもつ操作点の配列として指定します。パラメーター値の組み合わせに対応する操作点を取得するには、線形化の前にparam
を使用してモデルをバッチ平衡化します。詳細については、パラメーターの変化から派生した複数の操作点でのモデルのバッチ線形化を参照してください。パラメーターがモデルの操作点に影響しない場合、
op
を単一の操作点として指定します。
blocksub
— ブロックおよびサブシステムの代替の線形化
構造体 | 構造体配列
ブロックおよびサブシステムの代替の線形化。構造体または n 行 1 列の構造体配列として指定します。n は、線形化を指定するブロックの数です。blocksub
を使用して、ブロックまたはサブシステムのカスタム線形化を指定します。たとえば、不連続性や Triggered Subsystem のあるブロックのように解析的な線形化をもたないブロックに線形化を指定できます。
ブロックの線形化を変化させることで生じるモデルのダイナミクスへの影響を調べるには、ブロックに複数の代替の線形化を指定してモデルをバッチ線形化することができます。
線形化を元のブロックまたはサブシステムと異なるサンプル時間に置き換える場合は、全体の線形化サンプル時間 (options
.SampleTime
) を既定以外の値に設定することをお勧めします。
代替線形化の各構造体には次のフィールドがあります。
Name
— ブロック パス
文字ベクトル | string
線形化を指定するブロックのブロック パス。文字ベクトルまたは string として指定します。
Value
— 代替の線形化
double | double の配列 | LTI モデル | モデル配列 | 構造体
ブロックの代替の線形化。次のいずれかとして指定します。
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'
であり、かつブロックの線形化関数が入力パラメーターを必要とする場合にのみ指定します。
param
— パラメーター サンプル
構造体 | 構造体配列
線形化のパラメーター サンプル。次のいずれかとして指定します。
構造体 — 次のフィールドをもつ構造体としてパラメーターを指定して、単一パラメーターの値を変化させます。
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
を使用してオフセットを抽出できます。
options
— 線形化アルゴリズム オプション
linearizeOptions
オプション セット
線形化アルゴリズムのオプション。linearizeOptions
オプション セットとして指定します。
出力引数
linsys
— 線形化の結果
状態空間モデル | 状態空間モデルの配列
線形化の結果。状態空間モデル、または状態空間モデルの配列として返されます。
ほとんどのモデルでは、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 のモデル配列になります。
モデル配列の詳細については、モデル配列を参照してください。
linop
— 操作点
OperatingPoint
オブジェクト | OperatingPoint
オブジェクトの配列
モデルが線形化された操作点。OperatingPoint
オブジェクト、または linsys
と同じ次元をもつ OperatingPoint
オブジェクトの配列として返されます。linop
の各要素は、その対応する linsys
モデルが取得された操作点です。
op
を単一の操作点の OperatingPoint
オブジェクトまたは OperatingPoint
オブジェクトの配列として指定する場合、linop
は op
のコピーになります。op
を単一の操作点オブジェクトとして指定し、param
を使用してパラメーターの変化も指定する場合、linop
は、パラメーター グリッドと同じ次元をもつ配列です。この場合、linop
の要素は op
のスカラー拡張されたコピーです。
モデルが妥当な操作点で線形化されたかどうかを判断するには、linop
にある状態と入力を確認します。
info
— 線形化の情報
構造体
線形化の情報。次のフィールドを含む構造体として返されます。
Offsets
— 線形化のオフセット
[]
(既定値) | 構造体 | 構造体配列
モデルが線形化された操作点に対応する線形化のオフセット。options.StoreOffsets
が false
の場合 []
として返されます。それ以外の場合、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 システムの配列を使用した非線形動作の近似を参照してください。
Advisor
— 線形化の診断情報
[]
(既定値) | LinearizationAdvisor
オブジェクト | LinearizationAdvisor
オブジェクトの配列
線形化の診断情報。options.StoreAdvisor
が false
の場合は []
として返されます。それ以外の場合、Advisor
は次のいずれかとして返されます。
linsys
が単一の状態空間モデルの場合、Advisor
はLinearizationAdvisor
オブジェクトになります。linsys
が状態空間モデルの配列の場合、Advisor
はlinsys
と同じ次元をもつLinearizationAdvisor
オブジェクトの配列になります。
LinearizationAdvisor
オブジェクトは個々の線形化ブロックについての線形化の診断情報を格納します。LinearizationAdvisor
オブジェクトを使用して線形化の結果をトラブルシューティングする例は、コマンド ラインを使用した線形化の結果のトラブルシューティングを参照してください。
詳細
カスタムの線形化関数
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'
RTWInlineParameters = 'on'
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 で導入R2020b: Simulink モデルをスパース状態空間モデルに線形化
Sparse Second Order ブロックまたは Descriptor State-Space ブロックを含む Simulink モデルからスパース モデルを線形化および取得できます。
Simulink モデルで Sparse Second Order を使用する場合の
mechss
モデル。Descriptor State-Space ブロックを使用し、[スパース モデルに線形化する] ブロック パラメーターを選択する場合の
sparss
モデル。
詳細については、スパース モデルの基礎を参照してください。例については、スパース 2 次モデル オブジェクトへの Simulink モデルの線形化を参照してください。
R2016b: 線形化時にモデルの入力、出力、状態、および状態微分の操作点のオフセットを計算
Simulink モデルを線形化する際にモデルの入力、出力、状態、および状態微分の操作点のオフセットを計算できます。3 つのオフセットにより、線形パラメーター変動 (LPV) システムの作成が合理化します。
操作点のオフセットを取得するには、まず linearizeOptions
オブジェクトを作成して、StoreOffsets
オプションを true
に設定します。その後、モデルを線形化します。
info
出力引数からオフセットを抽出し、関数 getOffsetsForLPV
を使用して LPV System ブロックの必要な形式に変換できます。
R2014a: ブロックの置換の入力引数
関数 linearize
の blocksub
入力引数を使用して、Simulink ブロックまたはサブシステムの代替の線形化を指定できます。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)