メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

getIOTransfer

R2026a

slLinearizer または slTuner インターフェイスを使用して指定された I/O セットの伝達関数

説明

linsys = getIOTransfer(s,in,out) は、slLinearizer または slTuner インターフェイス s に関連付けられたモデルの指定された入力および出力の伝達関数を返します。

ソフトウェアでは、linsys を計算する際、s に対して指定した永続的な開始点はすべて強制適用されます。getIOTransfer が in および out を処理する方法の詳細については、伝達関数を参照してください。s.Parameters、s.OperatingPoints、またはその両方を設定している場合、getIOTransfer は複数の線形化を実行し、伝達関数の配列を返します。

例

linsys = getIOTransfer(s,in,out,temp_opening) は、temp_opening で指定された点にある追加の一時的な開始点を考慮に入れます。開始点を使用して、たとえば、フィードバック ループが開いた状態でプラントのある直列のコントローラーの伝達関数を取得します。

例

linsys = getIOTransfer(s,ios) は、s に関連付けられたモデルの ios で指定された入力と出力の伝達関数を返します。ios を作成するには、linio コマンドを使用します。ソフトウェアは、linsys を計算する際に、ios で指定された各信号の線形化 I/O タイプを適用します。また、s に対して指定されたすべての永続ループ開始点も適用されます。

linsys = getIOTransfer(___,mdl_index) は、バッチ線形化の結果のサブセットを返します。上記の構文の任意の入力引数に加えて、mdl_index は対象の線形化のインデックスを指定します。

バッチ線形化の結果のサブセットのみの伝達関数を取得する場合、この構文を使用して効率的な線形化を行います。

例

[linsys,info] = getIOTransfer(___) は追加の線形化情報を返します。

例

例

すべて折りたたむ

ex_scd_simple_fdbk モデルで基準信号 r からプラント出力 y への閉ループ伝達関数を取得します。

ex_scd_simple_fdbk モデルを開きます。

mdl = 'ex_scd_simple_fdbk';
open_system(mdl);

このモデルには次の項目が含まれています。

$$\begin{array}{l}
K(s) = {K_p} = 3\\
G(s) = \frac{1}{{s + 5}}
\end{array}$$

モデルの slLinearizer インターフェイスを作成します。

sllin = slLinearizer(mdl);

基準信号 r からプラント出力 y への閉ループ伝達関数を取得するには、両方の点を sllin に追加します。

addPoint(sllin,{'r','y'});

r から y への閉ループ伝達関数を取得します。

sys = getIOTransfer(sllin,'r','y');
tf(sys)
ans =
 
  From input "r" to output "y":
    3
  -----
  s + 8
 
Continuous-time transfer function.

ソフトウェアは、r で線形化入力 dr を追加し、y で線形化出力を追加します。

sys は dr から y への伝達関数であり、$(I+GK)^{-1}GK$ と等価です。

ex_scd_simple_fdbk モデルで、プラント モデル伝達関数 G を取得します。

ex_scd_simple_fdbk モデルを開きます。

mdl = 'ex_scd_simple_fdbk';
open_system(mdl);

このモデルには次の項目が含まれています。

$$\begin{array}{l}
K(s) = {K_p} = 3\\
G(s) = \frac{1}{{s + 5}}.
\end{array}$$

モデルの slLinearizer インターフェイスを作成します。

sllin = slLinearizer(mdl);

プラント モデルの伝達関数を取得するには、入力ポイントとして u、出力ポイントとして y を使用します。フィードバックの影響を取り除くには、ループを中断しなければなりません。ループは、u、e、または y で中断できます。この例では、u でループを中断します。これらの点を sllin に追加します。

addPoint(sllin,{'u','y'});

プラント モデル伝達関数を取得します。

sys = getIOTransfer(sllin,'u','y','u');
tf(sys)
ans =
 
  From input "u" to output "y":
    1
  -----
  s + 5
 
Continuous-time transfer function.

2 番目の入力引数で入力として u を指定し、4 番目の入力引数で一時的ループ開始点として u を指定します。

sys は du から y への伝達関数であり、$G$ と等価です。

複数の伝達関数に対して scdcascade モデルをバッチ線形化するとします。ほとんどの線形化では、C2 コントローラーの比例ゲイン (Kp2) と積分ゲイン (Ki2) を 10% の範囲で変化させます。この例では、Kp2 および Ki2 の最大値について、e2 から y2 への内側のループの開ループ応答伝達関数を計算します。

scdcascade モデルを開きます。

mdl = 'scdcascade';
open_system(mdl)

モデルの slLinearizer インターフェイスを作成します。

sllin = slLinearizer(mdl);

C2 コントローラーの比例ゲイン (Kp2) および積分ゲイン (Ki2) を 10% の範囲で変化させます。

Kp2_range = linspace(0.9*Kp2,1.1*Kp2,3);
Ki2_range = linspace(0.9*Ki2,1.1*Ki2,5);

[Kp2_grid,Ki2_grid] = ndgrid(Kp2_range,Ki2_range);

params(1).Name = 'Kp2';
params(1).Value = Kp2_grid;

params(2).Name = 'Ki2';
params(2).Value = Ki2_grid;

sllin.Parameters = params;

内側のループの開ループ伝達関数を計算するには、e2 および y2 を解析ポイントとして使用します。外側のループの影響を取り除くには、e2 でループを中断します。解析ポイントとして e2 と y2 を sllin に追加します。

addPoint(sllin,{'e2','y2'})

Ki2 および Kp2 の最大値のインデックスを決定します。

mdl_index = params(1).Value == max(Kp2_range) & params(2).Value == max(Ki2_range);

e2 から y2 への開ループ伝達関数を取得します。

sys = getIOTransfer(sllin,'e2','y2','e2',mdl_index);

Simulink® モデルを開きます。

mdl = 'scdcascade';
open_system(mdl)

線形化オプション セットを作成し、StoreOffsets オプションを設定します。

opt = linearizeOptions('StoreOffsets',true);

slLinearizer インターフェイスを作成します。

sllin = slLinearizer(mdl,opt);

解析ポイントを追加して閉ループ伝達関数を計算します。

addPoint(sllin,{'r','y1m'});

入力/出力伝達関数を計算し、対応する線形化オフセットを取得します。

[sys,info] = getIOTransfer(sllin,'r','y1m');

オフセットを表示します。

info.Offsets
ans = 

  struct with fields:

            dx: [6×1 double]
             x: [6×1 double]
             u: 1
             y: 0
    OutputName: {'y1m'}
     InputName: {'r'}
     StateName: {6×1 cell}
            Ts: 0

入力引数

すべて折りたたむ

Simulink モデルへのインターフェイス。slLinearizer インターフェイスまたは slTuner インターフェイスとして指定します。

入力解析ポイント信号名。以下で指定します。

  • 文字ベクトルまたは string — 解析ポイント信号名。

    解析ポイントに関連付けられた信号名を確認するには、s と入力します。MATLAB® コマンド ウィンドウに s の内容が表示されます。これには、解析ポイント信号名、ブロック名および端子番号が含まれます。解析ポイントに信号名がなく、ブロック名と端子番号のみがあるとします。ブロック名として in を指定できます。s の解析ポイントのリストにないポイントを使用するには、最初に addPoint を使用してポイントを追加します。

    完全な信号名またはブロック名の一意的に一致する部分として in を指定できます。解析ポイントの完全な信号名が 'LoadTorque' であるとします。'Torque' が s の他の解析ポイントの信号名の一部でない限り、in を 'Torque' と指定できます。

    たとえば、in = 'y1m' とします。

  • 文字ベクトルの cell 配列または string 配列 — 複数の解析ポイント名を指定します。たとえば、in = {'y1m','y2m'} とします。

出力解析ポイント信号名。以下で指定します。

  • 文字ベクトルまたは string — 解析ポイント信号名。

    解析ポイントに関連付けられた信号名を確認するには、s と入力します。MATLAB コマンド ウィンドウに s の内容が表示されます。これには、解析ポイント信号名、ブロック名および端子番号が含まれます。解析ポイントに信号名がなく、ブロック名と端子番号のみがあるとします。ブロック名として out を指定できます。s の解析ポイントのリストにないポイントを使用するには、最初に addPoint を使用してポイントを追加します。

    完全な信号名またはブロック名の一意的に一致する部分として out を指定できます。解析ポイントの完全な信号名が 'LoadTorque' であるとします。'Torque' が s の他の解析ポイントの信号名の一部でない限り、out を 'Torque' と指定できます。

    たとえば、out = 'y1m' とします。

  • 文字ベクトルの cell 配列または string 配列 — 複数の解析ポイント名を指定します。たとえば、out = {'y1m','y2m'} とします。

一時的開始点信号名。以下で指定します。

  • 文字ベクトルまたは string — 解析ポイント信号名。

    temp_opening では、s の解析ポイントのリストに存在する解析ポイントを指定しなければなりません。解析ポイントに関連付けられた信号名を確認するには、s と入力します。MATLAB コマンド ウィンドウに s の内容が表示されます。これには、解析ポイント信号名、ブロック名および端子番号が含まれます。解析ポイントに信号名がなく、ブロック名と端子番号のみがあるとします。ブロック名として temp_opening を指定できます。s の解析ポイントのリストにないポイントを使用するには、最初に addPoint を使用してポイントを追加します。

    完全な信号名またはブロック名の一意的に一致する部分として temp_opening を指定できます。解析ポイントの完全な信号名が 'LoadTorque' であるとします。'Torque' が s の他の解析ポイントの信号名の一部でない限り、temp_opening を 'Torque' と指定できます。

    たとえば、temp_opening = 'y1m' とします。

  • 文字ベクトルの cell 配列または string 配列 — 複数の解析ポイント名を指定します。たとえば、temp_opening = {'y1m','y2m'} とします。

linio を使用して作成された線形化 I/O。線形化 I/O オブジェクトとして指定します。

ios は、s の解析ポイントのリストにある信号を指定しなければなりません。解析ポイントのリストを表示するには、s と入力します。s の解析ポイントのリストにないポイントを使用するには、最初に addPoint を使用してポイントをリストに追加しなければなりません。

以下に例を示します。

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

ここでは、ios(1) で入力を指定し、ios(2) で出力を指定します。

対象の線形化のインデックス。以下で指定します。

  • 論理値の配列 — 対象の線形化の論理配列のインデックス。2 つのパラメーター par1 と par2 を変化させ、par1 > 0.5 と par2 <= 5 の組み合わせで線形化を抽出するとします。使用:

    params = s.Parameters;
    mdl_index = params(1).Value>0.5 & params(2).Value <= 5;

    式 params(1).Value>0.5 & params(2).Value<5 は論理インデックス付けを使用して、logical 配列を返します。この logical 配列は、params(1).Value および params(2).Value と同じサイズです。各エントリには、params(1).Value および params(2).Value 内の対応するエントリの式の論理評価が含まれます。

  • 正の整数のベクトル — 対象の線形化の線形インデックス。2 つのパラメーター par1 と par2 を変化させ、par1 > 0.5 と par2 <= 5 の組み合わせで線形化を抽出するとします。使用:

    params = s.Parameters;
    mdl_index = find(params(1).Value>0.5 & params(2).Value <= 5);

    式 params(1).Value>0.5 & params(2).Value<5 は logical 配列を返します。find はその logical 配列の true の各エントリの線形インデックスを返します。

出力引数

すべて折りたたむ

指定された I/O の伝達関数。以下の説明のように返されます。

  • s.Parameters および s.OperatingPoints を設定していない場合、ソフトウェアは既定のモデル パラメーター値を使用して linsys を計算します。ソフトウェアはモデルの初期条件を線形化の操作点として使用します。linsys は状態空間モデルとして返されます。

  • s.Parameters のみを設定している場合、ソフトウェアはそれぞれのパラメーター グリッド点の線形化を計算します。linsys は、パラメーター グリッドと同じサイズの状態空間モデル配列として返されます。

  • s.OperatingPoints のみを設定している場合、ソフトウェアは指定されたそれぞれの操作点の線形化を計算します。linsys は、s.OperatingPoints と同じサイズの状態空間モデル配列として返されます。

  • s.Parameters を設定しており、s.OperatingPoints を単一の操作点として指定している場合、ソフトウェアはそれぞれのパラメーター グリッド点の線形化を計算します。ソフトウェアは、指定された操作点を線形化の操作点として使用します。linsys は、パラメーター グリッドと同じサイズの状態空間モデル配列として返されます。

  • s.Parameters を設定しており、s.OperatingPoints を複数の操作点オブジェクトとして指定している場合、ソフトウェアはそれぞれのパラメーター グリッド点の線形化を計算します。s.OperatingPoints は s.Parameters で指定されたパラメーター グリッドと同じサイズでなければなりません。ソフトウェアは、対応する操作点およびパラメーター グリッド点を使用してそれぞれの線形化を計算します。linsys はパラメーター グリッドと同じサイズの状態空間モデル配列として返されます。

  • s.Parameters を設定しており、s.OperatingPoints を複数のシミュレーション スナップショット時間として指定している場合、ソフトウェアはスナップショット時間とパラメーター グリッド点のそれぞれの組み合わせに対してモデルをシミュレートして線形化します。サイズ p のパラメーター グリッドと N 個のスナップショット時間を指定するとします。linsys は、サイズが N 行 p 列の状態空間モデル配列として返されます。

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

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

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

線形化のオフセット。s.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 システムの配列を使用した非線形動作の近似を参照してください。

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

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

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

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

詳細

すべて折りたたむ

バージョン履歴

R2013b で導入

すべて展開する