メインコンテンツ

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

getLoopTransfer

R2026a

slLinearizer または slTuner インターフェイスを使用した指定点での開ループ伝達関数

説明

linsys = getLoopTransfer(s,pt) は、slLinearizer または slTuner インターフェイス s に関連付けられたモデルの指定された解析ポイントにおける点と点を結ぶ開ループ伝達関数を返します。

ソフトウェアでは、linsys を計算する際、s に対して指定した永続的なループ開始点はすべて強制適用されます。s.Parameters、s.OperatingPoints、またはその両方を設定している場合、getLoopTransfer は複数の線形化を実行し、ループ伝達関数の配列を返します。

例

linsys = getLoopTransfer(s,pt,sign) は、開ループ応答を計算するためのフィードバック符号を指定します。既定の設定では、linsys は正のフィードバックの開ループ伝達関数です。

linsys の負のフィードバック定義を仮定した適用について負のフィードバックの開ループ伝達関数を計算するには、sign を -1 に設定します。ナイキストや根軌跡設計法など、多くの古典の設計および解析の手法では、負のフィードバックが使用されます。

pt での閉ループ感度は feedback(1,linsys,sign) と同じです。

例

linsys = getLoopTransfer(s,pt,temp_opening) は、temp_opening で指定された点にある追加の一時的な開始点を考慮に入れます。開始点を使用して、たとえば、外側のループが開いた状態で、プラント入力で測定される内側のループのループ伝達関数を計算します。

例

linsys = getLoopTransfer(s,pt,temp_opening,sign) は、一時的開始点およびフィードバック符号を指定します。

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

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

例

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

例

例

すべて折りたたむ

ex_scd_simple_fdbk モデルの e で計算されたループ伝達関数を取得します。

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);

e でのループ伝達関数を取得するには、この点を解析ポイントとして sllin に追加します。

addPoint(sllin,'e');

e でのループ伝達関数を取得します。

sys = getLoopTransfer(sllin,'e');
tf(sys)
ans =
 
  From input "e" to output "e":
   -3
  -----
  s + 5
 
Continuous-time transfer function.

ソフトウェアは e で線形化出力を追加して、ループを中断し、線形化入力 de を追加します。

sys は、de から e への伝達関数です。ソフトウェアは正のフィードバックを仮定しているため、sys を $-GK$ として返します。

ex_scd_simple_fdbk モデルの e で計算された負のフィードバック ループ伝達関数を取得します。

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);

e でのループ伝達関数を取得するには、この点を解析ポイントとして sllin に追加します。

addPoint(sllin,'e');

e でのループ伝達関数を取得します。

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

ソフトウェアは e で線形化出力を追加して、ループを中断し、線形化入力 de を追加します。

sys は、de から e への伝達関数です。3 番目の入力引数は負のフィードバックを示すため、ソフトウェアは sys を $GK$ として返します。

scdcascade モデルの e2 で計算された内側のループのループ伝達関数を取得します。

scdcascade モデルを開きます。

mdl = 'scdcascade';
open_system(mdl)

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

sllin = slLinearizer(mdl);

内側のループのループ伝達関数を計算するには、e2 信号を解析ポイントとして使用します。外側のループの影響を取り除くには、y1m で外側のループを中断します。これらの点を sllin に追加します。

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

e2 での内側のループのループ伝達関数を取得します。

sys = getLoopTransfer(sllin,'e2','y1m');

ここで、3 番目の入力引数 'y1m' は、一時的なループの開始点を指定します。ソフトウェアは sys を計算する際に、正のフィードバックを仮定します。

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

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 信号を解析ポイントとして使用します。外側のループの影響を取り除くには、y1m で外側のループを中断します。これらの点を sllin に追加します。

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

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

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

外側のループが開いた状態で、e2 での内側のループのループ伝達関数を取得します。

sys = getLoopTransfer(sllin,'e2','y1m',-1,mdl_index);

4 番目の入力引数では、ループ伝達の計算用の負のフィードバックを指定します。

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

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

opt = linearizeOptions('StoreOffsets',true);

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

sllin = slLinearizer(mdl,opt);

タンクの出力端子で解析ポイントを追加します。

addPoint(sllin,'watertank/Water-Tank System');

解析ポイントでループ伝達関数を計算し、対応する線形化オフセットを取得します。

[sys,info] = getLoopTransfer(sllin,'watertank/Water-Tank System');

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

info.Offsets
ans = 

  struct with fields:

            dx: [2×1 double]
             x: [2×1 double]
             u: 1
             y: 1
    OutputName: {'watertank/Water-Tank System'}
     InputName: {'watertank/Water-Tank System'}
     StateName: {2×1 cell}
            Ts: 0

入力引数

すべて折りたたむ

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

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

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

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

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

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

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

linsys を計算するために、ソフトウェアは pt で線形化出力を追加し、その後にループの中断と線形化入力を追加します。以下のモデルを考えます。

'u' として pt を指定します。

ソフトウェアは、du から u への伝達関数として linsys を計算します。

pt を複数の信号として指定する場合 (たとえば、pt = {'u','y'})、ソフトウェアは各点で線形化出力、ループの中断および線形化入力を追加します。

du と dy は線形化入力で、u と y は線形化出力です。ソフトウェアは、各線形化入力から各線形化出力への伝達関数をもつ MIMO 伝達関数として linsys を計算します。

フィードバック符号。以下のいずれかの値として指定します。

  • +1 (既定) — getLoopTransfer は正のフィードバック開ループ伝達関数を返します。

  • -1 — getLoopTransfer は、負のフィードバックの開ループ伝達関数を返します。負のフィードバックの伝達関数は、正のフィードバックの伝達関数に -1 を掛け合わせたものです。

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

  • 文字ベクトルまたは 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'} とします。

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

  • 論理値の配列 — 対象の線形化の論理配列のインデックス。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 の各エントリの線形インデックスを返します。

出力引数

すべて折りたたむ

点と点を結ぶ開ループ伝達関数。以下の説明のように返されます。

  • 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 オブジェクトの配列として返されます。ただし、モデルの pt で定義された線形化パスに次のいずれかのブロックが含まれている場合、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 で導入

すべて展開する