Main Content

ssInterpolant

状態空間データからグリッド付きの LTV モデルまたは LPV モデルを作成

R2023a 以降

説明

ssInterpolant は、時間またはパラメーター空間でサンプリングした局所的な ss モデルの集合について、線形時変 (LTV) または線形パラメーター変動 (LPV) の大域的な動作に LTI の局所的な動作を内挿する LTV モデルまたは LPV モデルを作成します。ssInterpolant を使用して、解析的な LTV モデルまたは LPV モデルをグリッド付きの LTV モデルまたは LPV モデルにしたり、グリッド付きの LTV モデルまたは LPV モデルをリサンプリングしたりすることもできます。

sys = ssInterpolant(ssArray) は、状態空間モデルの配列 ssArray から LTV または LPV の内挿を作成します。この配列の ssArray.SamplingGrid プロパティで、基になる時間またはパラメーターのグリッドを指定します。四角形のグリッドか散布サンプルで構成されるグリッドを指定できます。さらに、ssArray.Offsets で線形化オフセットを指定します。 (R2024a 以降)

sys = ssInterpolant(ssArray,offsets) は、微分、状態、入力、および出力の線形化オフセットを含む構造体配列 offsets としてオフセットを明示的に指定します。この構文は、次と等価です。

ssArray.Offsets = offsets;
vsys = ssInterpolant(ssArray);

sys = ssInterpolant(vSys,S) は、既存の LTV モデルまたは LPV モデル vSysS で指定された時間またはパラメーターの値のグリッドでサンプリングして内挿を作成します。

sys = ssInterpolant(___,IMethod,EMethod) は、内挿法と外挿法の両方を指定します。これらの手法は、前述の任意の構文で最後の入力引数として指定できます。

すべて折りたたむ

この例では、貯水槽の Simulink® モデルのバッチ線形化から取得した状態空間モデルの配列と関連オフセットから LPV モデルを作成する方法を示します。

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

線形化をオフセットと共に計算します。

options = linearizeOptions('StoreOffsets',true);
[linsys,~,info] = linearize(mdl,io,op,options);

高さの値のグリッドを指定し、LPV モデルを作成します。このモデルでは、高さは最初の状態です。

h = zeros(size(tlin));
for ct=1:numel(h)
   h(ct) = op(ct).States(1).x;
end
linsys.SamplingGrid.H = h;
linsys.Offsets = info.Offsets;
gLPV = ssInterpolant(linsys,'spline')
Continuous-time state-space LPV model with 1 outputs, 1 inputs, 1 states, and 1 parameters.

watertank モデルをシミュレートします。

h0 = 15;
sim(mdl);
usim = getElement(logsOut,'V');
hsim = getElement(logsOut,'H');

正確なパラメーターの軌跡を使用して LPV モデルをシミュレートします。

t = linspace(0,150,200);
p = @(t,x,u) x(1);
u = interp1(usim.Values.Time,usim.Values.Data,t);
ylpv = lsim(gLPV,u,t,h0,p);

結果をプロットします。

plot(hsim.Values.Time,hsim.Values.Data,t,ylpv,'--')
legend('Simulink model','LPV model')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Simulink model, LPV model.

LPV モデルは非線形モデルの良好な近似を示しています。

この例では、dataFcnMaglev.m で磁気浮上システムの行列とオフセットを定義します。ボールに対する磁力を発生させるコイル電流を使用して、磁気浮上で浮遊するボールの高さを制御します。

LPV モデルを作成します。

h0 = 1;
lpvSys = lpvss('h',@dataFcnMaglev,0,0,h0)
Continuous-time state-space LPV model with 1 outputs, 1 inputs, 2 states, and 1 parameters.
lpvSys.StateName = {'h','hdot'};
lpvSys.InputName = 'current';
lpvSys.InputName = 'height';

高さ h について、パラメーターの変化を定義します。

hmin = 0.05;
hmax = 0.25;
hcd = linspace(hmin,hmax,5);
SamplingGrid.h = hcd;

グリッド付きモデルに変換します。

glpvSys1 = ssInterpolant(lpvSys,SamplingGrid)
Continuous-time state-space LPV model with 1 outputs, 1 inputs, 2 states, and 1 parameters.

このコマンドは、同じパラメーター空間でサンプリングされたローカル モデルの配列からグリッド付きモデルを作成することと等価です。

ssArray = psample(lpvSys,SamplingGrid);
glpvSys2 = ssInterpolant(ssArray);

この例では、バッチ線形化の結果からの LPV モデルの作成の例で貯水槽の Simulink® モデルのバッチ線形化から取得した状態空間モデルの配列と関連オフセットについて考えます。

この貯水槽システムのダイナミクスは次の方程式で記述されます。

AdHdt=bV-aH

線形化の結果を読み込みます。

load watertankLinModel.mat

内挿法 spline と外挿法 clip を使用してグリッド付きモデルを作成します。

glpv1 = ssInterpolant(linsys,info.Offsets,"spline","clip");

外挿 spline を使用してグリッド付きモデルを作成します。

glpv2 = ssInterpolant(linsys,info.Offsets,"spline","spline");

作成するグリッドの外の点から初期の高さが始まる場合における、両方のグリッド付きモデルのシミュレーション結果を比較します。水槽がほぼ空になるように高さを設定します。

h0 = 0.4; 
sim("watertankNLModel.slx");
usim = getElement(logsOut,"V");
hsim = getElement(logsOut,"H");

正確なパラメーターの軌跡を使用して LPV モデルをシミュレートします。

t = linspace(0,150,200);
p = @(t,x,u) x(1);
u = interp1(usim.Values.Time,usim.Values.Data,t);
ylpv1 = lsim(glpv1,u,t,h0,p);
ylpv2 = lsim(glpv2,u,t,h0,p);
plot(t,ylpv1,t,ylpv2,"--",hsim.Values.Time,hsim.Values.Data,".-")
legend("clip extrapolation","spline extrapolation", ...
    "nonlinear simulation",Location="best")

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent clip extrapolation, spline extrapolation, nonlinear simulation.

水槽がほぼ空になったときの非線形性による傾きの急な変化について、clip メソッドよりも spline メソッドで適切に取得されています。

入力引数

すべて折りたたむ

状態空間 (ss) モデルの配列。状態空間オブジェクトの SamplingGrid プロパティを使用して、ssArray のモデルの時間とパラメーターの依存性を指定し、各モデルに時間とパラメーターの値を割り当てます。時間依存性の記述と解釈されるフィールド Time を除き、SamplingGrid のフィールドの名前は LPV モデルのパラメーターになります。フィールドが Time のみの場合、ssInterpolant は LTV モデルを返します。定数値のフィールドは関数で無視されます。

さらに、ssArrayOffsets プロパティを使用して、微分、状態、入力、および出力の線形化オフセットを指定できます (R2024a 以降)SamplingGrid プロパティと Offsets プロパティの詳細については、ss のリファレンス ページを参照してください。

ssArray および対応する offsets は、次のいずれかの方法でも取得できます。

  • Simulink® モデルのバッチ線形化を StoreOffsets オプションを指定して実行する。詳細については、linearize (Simulink Control Design) および linearizeOptions (Simulink Control Design) を参照してください。

  • 既存の LTV モデルまたは LPV モデルをサンプリングする。詳細については、sample を参照してください。

モデルのオフセット。ssArray と同じ次元の構造体配列として指定します。オフセットの各構造体には次のフィールドが必要です。

フィールド説明
x状態のオフセット。長さ nx の列ベクトルとして指定します。nxssArray にある状態の数です。
dx微分のオフセット。長さ nx の列ベクトルとして指定します。nxssArray にある状態の数です。
u入力のオフセット。長さ nu の列ベクトルとして指定します。nussArray にある入力の数です。
y出力のオフセット。長さ ny の列ベクトルとして指定します。nyssArray にある出力の数です。

ssArray および対応する offsets は、次のいずれかの方法でも取得できます。

  • Simulink モデルのバッチ線形化を StoreOffsets オプションを指定して実行する。詳細については、linearize (Simulink Control Design) および linearizeOptions (Simulink Control Design) を参照してください。

  • 既存の LTV モデルまたは LPV モデルをサンプリングする。詳細については、sample を参照してください。

いずれのフィールドについても、モデルにオフセットがない場合は [] に設定できます。

LTV モデルまたは LPV モデル。ltvss オブジェクトまたは lpvss オブジェクトとして指定します。

vSysltvss オブジェクトまたは lpvss オブジェクトの場合、ssInterpolant は、S を使用して指定されたグリッドの値でグリッド付きの LTV モデルまたは LPV モデルを作成します。

サンプリング グリッドの値。構造体として指定します。S は、vSys をサンプリングする時間/パラメーターの値のグリッドを定義します。グリッド付きの LTV モデルまたは LPV モデルは、それらのグリッド点間を内挿します。

  • LTV モデルの場合、S はフィールド Time をもつ構造体配列です。たとえば、配列 Tvalues でサンプリング時間が指定されている場合、S の構造体は次のようになります。

    S = struct('Time',Tvalues)
  • LPV モデルの場合、S は LPV モデル vSysParameterName プロパティに対応するパラメーター名のフィールドと Time をもつ構造体です。たとえば、四角形のグリッドを作成するために、ndgrid を使用してこの構造体の値を生成できます。たとえば、vSys'speed' および 'altitude' という名前の 2 つのパラメーターがあり、それらの値が配列 P1vals および P2vals を使用して指定されている場合、S の構造体は次のようになります。

    [P1,P2] = ndgrid(P1vals,P2vals);
    S = struct('speed',P1,'altitude',P2)

    LPV モデルのダイナミクスに時間に対する明示的な依存性がない場合は、S にフィールド Time を指定しないでください。

離散時間の場合、サンプリング周期 Ts の数をカウントする整数インデックス値 k として Time を指定します。絶対時間は t = k*Ts で与えられます。

内挿法。パラメーター グリッドのタイプに応じて、次のいずれかとして指定します。

  • 四角形のグリッド — 'linear''nearest''next''previous''pchip''cubic''spline'、または 'makima'。詳細については、griddedInterpolant を参照してください。

  • 散布型のグリッド — 'linear''nearest'、または 'natural'。詳細については、scatteredInterpolant を参照してください。

IMethodEMethod の両方の引数を省略した場合の既定値は、IMethod'linear'EMethod'clip' です。

外挿法。パラメーター グリッドのタイプに応じて、次のいずれかとして指定します。'clip''linear''nearest''next''previous''pchip''cubic''spline'、または 'makima' のいずれかです。さらに、'none' を指定できます。この場合、グリッドの領域の外側をクエリすると NaN 値が返されます。

  • 四角形のグリッド — 'clip''linear''nearest''next''previous''pchip''cubic''spline'、または 'makima'。さらに、'none' を指定できます。この場合、グリッドの領域の外側をクエリすると NaN 値が返されます。詳細については、griddedInterpolant を参照してください。

  • 散布型のグリッド — 'linear''nearest'、または 'none'。詳細については、scatteredInterpolant を参照してください。

IMethodEMethod の両方の引数を省略した場合の既定値は、IMethod'linear'EMethod'clip' です。

'clip' メソッドでは、各パラメーターの値がグリッド内で [pmin,pmax] の範囲に制限されます。このメソッドは、Simulink のルックアップ テーブル ブロックの 'Clip' メソッドに似ています。

出力引数

すべて折りたたむ

グリッド付きの LTV モデルまたは LPV モデル。それぞれ GriddedLTVSS オブジェクトまたは GriddedLPVSS オブジェクトとして返されます。

GriddedLTVSS オブジェクトおよび GriddedLPVSS オブジェクトには、ltvss オブジェクトおよび lpvss オブジェクトのプロパティに加え、GridInterpolationExtrapolation の各プロパティがあります。これらは、グリッド付きモデルの作成に使用されるグリッドの値、内挿法、外挿法をそれぞれ指定します。

制限

散布内挿 (R2023b 以降)は、3 次元までのパラメーター グリッドでのみサポートされます。

バージョン履歴

R2023a で導入

すべて展開する

参考

| | | | | (Simulink Control Design)