ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

getCompSensitivity

slLinearizer または slTuner インターフェイスを使用する、指定された点での相補感度関数

説明

linsys = getCompSensitivity(s,pt) は、slLinearizer または slTuner インターフェイス s に関連付けられたモデルに対して指定されている解析ポイントでの相補感度関数を返します。

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

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

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

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

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

すべて折りたたむ

ex_scd_simple_fdbk モデルのプラント出力で計算された相補感度関数を取得します。

ex_scd_simple_fdbk モデルを開きます。

mdl = 'ex_scd_simple_fdbk';
open_system(mdl);

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

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

sllin = slLinearizer(mdl);

プラント出力での相補感度関数を計算するには、y 信号を解析ポイントとして使用します。この点を sllin に追加します。

addPoint(sllin,'y');

y での相補感度関数を取得します。

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

ソフトウェアは y に線形化出力を追加し、その後に線形化入力 dy を加えます。

sysdy から y への伝達関数であり、 と等価です。

scdcascade モデルでは、y2 における内側のループの相補感度関数を取得します。

scdcascade モデルを開きます。

mdl = 'scdcascade';
open_system(mdl);

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

sllin = slLinearizer(mdl);

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

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

y2 における内側のループの相補感度関数を取得します。

sys = getCompSensitivity(sllin,'y2','y1m');

ここで、3 番目の入力引数 'y1m' は、外側のループの一時的な開始点を指定します。

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

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;

内側のループの相補感度を計算するには、y2 信号を解析ポイントとして使用します。外側のループの影響を取り除くには、y1m で外側のループを中断します。これら両方の点を sllin に追加します。

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

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

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

y2 で相補感度伝達関数を取得します。

sys = getCompSensitivity(sllin,'y2','y1m',mdl_index);

Simulink モデルを開きます。

mdl = 'watertank';
open_system(mdl)

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

opt = linearizeOptions('StoreOffsets',true);

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

sllin = slLinearizer(mdl,opt);

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

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

y で相補感度関数を計算し、対応する線形化オフセットを取得します。

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

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

info.Offsets
ans = 

  struct with fields:

             x: [2x1 double]
            dx: [2x1 double]
             u: 1
             y: 1
     StateName: {2x1 cell}
     InputName: {'watertank/Water-Tank System'}
    OutputName: {'watertank/Water-Tank System'}
            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 で線形化出力を追加し、その後に線形化入力を追加します。

以下のモデルを考えます。

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

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

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

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

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

  • 文字ベクトルまたは 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 つのパラメーター par1par2 を変化させ、par1 > 0.5par2 <= 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 つのパラメーター par1par2 を変化させ、par1 > 0.5par2 <= 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.OperatingPointss.Parameters で指定されたパラメーター グリッドと同じサイズでなければなりません。ソフトウェアは、対応する操作点およびパラメーター グリッド点を使用してそれぞれの線形化を計算します。linsys はパラメーター グリッドと同じサイズの状態空間モデル配列として返されます。

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

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

線形化のオフセット。s.Options.StoreOffsetsfalse の場合は [] として返されます。それ以外の場合、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 システムの配列を使用した非線形動作の近似を参照してください。

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

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

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

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

詳細

すべて折りたたむ

相補感度関数

ある点での "相補感度関数" とは、その点での加法的な外乱から同じ点での測定への伝達関数のことです。感度関数とは対照的に、測定の "後に" 外乱が追加されます。

解析ポイント x での相補感度関数を計算するために、ソフトウェアは x で線形化出力を追加し、その後に線形化入力 dx を追加します。相補感度関数は、dx から x への伝達関数です。

Simulink モデルでの解析ポイントgetCompSensitivity による解析ポイントの解釈相補感度関数

dx から x への伝達関数

たとえば、y での相補感度関数を計算する次のモデルについて考えます。

ここで、ソフトウェアは y で線形化出力を追加し、その後に線形化入力 dy を追加します。y での相補感度関数 T は、dy から y への伝達関数です。T は、以下のように計算されます。

y=GK(y+dy)y=GKyGKdy(I+GK)y=GKdyy=(I+GK)1GKTdy.

ここで、I は GK と同じサイズの単位行列です。y での相補感度達関数は、r から y への閉ループ伝達関数に -1 を掛け合わせたものと同じです。

一般的には、基準信号からプラント出力まで計算される相補感度関数 T は、I–S と同じです。ここで、S はこの点での感度関数で、I は同じサイズの単位行列です。ただし、getCompSensitivity は、線形化の出力と入力を "同じ点" で追加するため、getCompSensitivity が返す T は、S–I と等しくなります。

ソフトウェアは、相補感度関数を計算する際に Simulink モデルを変更しません。

解析ポイント

"解析ポイント" は、slLinearizerslTuner インターフェイスで使用され、モデル内で線形解析と制御システムの調整に関連する箇所を示します。解析ポイントは、getIOTransfergetLoopTransfergetSensitivitygetCompSensitivity などの線形化コマンドの入力として使用します。線形化コマンドの入力として、解析ポイントによりモデル内の開ループまたは閉ループの伝達関数を指定できます。また、systune などのコマンドを使って制御システムを調整する際に、解析ポイントを使用して設計要件を指定することもできます。

"場所" とは、モデル内の特定のブロック出力端子か、そのような出力端子にあるバス要素を指します。便宜上、この端子から発信する信号の名前を使って解析ポイントを示すことができます。

解析ポイントは、slLinearizer または slTuner インターフェイス s に対して、インターフェイスの作成時に追加できます。以下に例を示します。

s = slLinearizer('scdcascade',{'u1','y1'});

また、addPoint コマンドを使用することもできます。

s のすべての解析ポイントを表示するには、コマンド プロンプトで s と入力してインターフェイスの内容を表示します。s の各解析ポイントの表示には、ブロック名、端子番号、およびこの解析ポイントから発信される信号の名前が含まれます。getPoints を使用して、すべての解析ポイントのリストをプログラムで取得することもできます。

解析ポイントの使用方法の詳細については、制御システムの解析と設計における対象信号のマークおよびバッチ線形化用に対象の信号をマークするを参照してください。

永続的なループ開始点

"永続的な開始点" とは、slLinearizer および slTuner インターフェイスで使用され、ソフトウェアがモデル内で信号の流れを中断する箇所を示します。線形化および調整時に、これらの開始点が強制的に適用されます。永続的な開始点は、ある特定のモデル コンポーネントを分離するために使用します。航空機のダイナミクスを取得する大規模なモデルがあり、機体にのみ線形解析を実行するとします。永続的な開始点を使用すれば、このモデルの他のコンポーネントをすべて除外できます。モデル内にカスケード式ループがあり、特定のループを解析する場合などにも使用できます。

"場所" とは、モデル内の特定のブロック出力端子を指します。便宜上、この端子から発信する信号の名前を使って開始点を示すことができます。

永続的な開始点は、slLinearizer または slTuner インターフェイス s に対して、インターフェイスの作成時に追加するか、addOpening コマンドを使用して追加できます。永続的な開始点のリストから場所を削除するには、removeOpening コマンドを使用します。

s のすべての開始点を表示するには、コマンド プロンプトで s と入力してインターフェイスの内容を表示します。s のそれぞれの永続的な開始点の表示には、ブロック名、端子番号、およびこの場所から発信される信号の名前が含まれます。getOpenings を使用して、すべての永続的なループ開始点のリストをプログラムで取得することもできます。

R2013b で導入