Main Content

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

getStateIndex

操作点の仕様の状態要素のインデックスを取得

説明

操作点の仕様の States プロパティは、各モデル状態の平衡化仕様を含む配列です。Simulink® モデルのカスタマイズされた平衡化のためにマッピング関数を定義する場合、getStateIndex を使用して、対応するブロック パスまたは状態名に基づいて状態仕様のインデックスを取得できます。

最適化ベースの探索を使用して Simulink モデルを平衡化する場合、一部のアプリケーションでは最適化探索のパラメーターの定義においてさらに柔軟性が必要となります。そのようなシステムには、カスタム制約およびカスタム目的関数を指定できます。複雑なモデルの場合、マッピングを定義してモデルの状態、入力、および出力の部分集合を選択し、カスタムの制約および目的関数に渡すことができます。詳細については、カスタムの制約と目的関数を使用した操作点の計算を参照してください。

index = getStateIndex(op,name) は、操作点の仕様 opStates プロパティで name に対応する状態仕様のインデックスを返します。

index = getStateIndex(op,name,element) は、複数の状態をもつブロックの状態仕様内にある指定された element のインデックスを返します。

すべて折りたたむ

Simulink モデルを開きます。

mdl = 'scdindex1';
open_system(mdl)

モデルに操作点の仕様を作成します。

opspec = operspec(mdl);

opspec にはモデルの状態仕様の配列が含まれます。

opspec.States
ans = 

     x         Known    SteadyState     Min         Max        dxMin       dxMax   
___________ ___________ ___________ ___________ ___________ ___________ ___________
                                                                                   
(1.) scdindex1/system1
     0         false       true        -Inf         Inf        -Inf         Inf    
     0         false       true        -Inf         Inf        -Inf         Inf    
     0         false       true        -Inf         Inf        -Inf         Inf    
(2.) scdindex1/system2
     0         false       true        -Inf         Inf        -Inf         Inf    

system2 ブロックに対応する状態仕様のインデックスを取得します。

index2 = getStateIndex(opspec,'scdindex1/system2')
index2 =

     2     1

index2(1) は、opspec.States 内での system2 の状態仕様オブジェクトのインデックスです。このブロックは単一の状態をもつので、index2 は 1 つの行をもち、index2(2)1 です。

ブロックに複数の状態がある場合、対応する状態仕様のすべての状態のインデックスを取得できます。

index1 = getStateIndex(opspec,'scdindex1/system1')
index1 =

     1     1
     1     2
     1     3

index1 の各行には system2 ブロック内の 1 つの状態のインデックスが含まれます。各行の最初の列には、opspec.States 内の状態仕様のインデックスが含まれます。2 列目には仕様内での各状態要素のインデックスが含まれます。

Simulink モデルを開きます。

mdl = 'scdindex1';
open_system(mdl)

モデルに操作点の仕様を作成します。

opspec = operspec(mdl);

ブロックに複数の状態がある場合、要素インデックスを指定することで、対応する状態仕様内の特定の状態のインデックスを取得できます。たとえば、system1 ブロックの仕様内にある 2 番目の状態のインデックスを取得します。

index1 = getStateIndex(opspec,'scdindex1/system1',2)
index1 =

     1     2

要素インデックスをベクトルとして指定して、ブロックの状態のサブセットのインデックスを取得することもできます。たとえば、system1 ブロックの仕様内にある 1 番目と 3 番目の状態のインデックスを取得します。

index2 = getStateIndex(opspec,'scdindex1/system1',[1 3])
index2 =

     1     1
     1     3

Simulink モデルを開きます。

mdl = 'scdindex2';
open_system(mdl)

system1 ブロックは、positionvelocityacceleration という名前付きの 3 状態をもつ状態空間システムです。

モデルに操作点の仕様を作成します。

opspec = operspec(mdl);

操作点の仕様オブジェクトの States プロパティは、system1 にある名前付きの各状態につき 1 つのエントリを含んでいます。

opspec.States
ans = 

     x         Known    SteadyState     Min         Max        dxMin       dxMax   
___________ ___________ ___________ ___________ ___________ ___________ ___________
                                                                                   
(1.) position
     0         false       true        -Inf         Inf        -Inf         Inf    
(2.) velocity
     0         false       true        -Inf         Inf        -Inf         Inf    
(3.) acceleration
     0         false       true        -Inf         Inf        -Inf         Inf    

ブロック内の名前付きの状態に対応する状態仕様のインデックスを取得するには、状態名を指定します。

index1 = getStateIndex(opspec,'velocity')
index1 =

     2     1

index1 の最初の列には、opspec.States プロパティ内の対応する状態仕様のインデックスが含まれます。2 列目は、名前付き状態の 1 です。

モデルを開きます。

mdl = 'scdTanks_simscape';
open_system(mdl)

モデルに操作点の仕様を作成します。

opspec = operspec(mdl);

操作点の仕様オブジェクトの States プロパティは、モデル内の各 Simscape 状態につき 1 つの状態仕様を含んでいます。

Simscape 状態に対応する仕様のインデックスを取得するには、状態名を指定します。たとえば、Tank3 の圧力状態のインデックスを取得します。

idx = getStateIndex(opspec,'scdTanks_simscape.Tank3.pressure')
idx =

    18     1

idx の最初の列には、opspec.States 内の対応する状態仕様のインデックスが含まれます。2 列目は Simscape 状態の 1 です。

opspec.States でのこの状態の仕様を表示します。

opspec.States(idx(1))
ans = 

     x         Known    SteadyState     Min         Max        dxMin       dxMax   
___________ ___________ ___________ ___________ ___________ ___________ ___________
                                                                                   
(1.) scdTanks_simscape.Tank3.pressure
     0         false       true        -Inf         Inf        -Inf         Inf    

入力引数

すべて折りたたむ

Simulink モデルの操作点の仕様または操作点。OperatingSpecOperatingPoint、または OperatingReport オブジェクトとして指定します。

opStates プロパティ内で状態仕様に対応するブロック パスまたは状態名。次のいずれかのパスを含む文字ベクトルまたは string として指定します。

  • Simulink モデル内にある名前なしの状態を含むブロックのブロック パス。

  • Simulink ブロックまたは Simscape™ ブロック内にある名前付きの状態の名前。

状態仕様をもつすべての状態を表示するには、opStates プロパティを表示します。

op.States

状態要素のインデックス。name で指定されたブロックまたは状態内にある状態要素の数以下の正の整数、またはそのような整数のベクトルとして指定します。既定では、element を指定しない場合、getStateIndex は選択された状態仕様のすべての要素のインデックスを返します。例については、操作点の仕様の指定された状態要素のインデックスの取得を参照してください。

出力引数

すべて折りたたむ

状態インデックス。element が整数の場合は 2 要素の行ベクトル、element がベクトルの場合は 2 列の配列として返されます。index の各行には単一のモデル状態のインデックスが含まれます。

index の最初の列には、opStates プロパティ内の対応する状態仕様のインデックスが含まれます。2 列目には状態仕様内での要素インデックスが含まれます。

index を使用して、Simulink モデルのカスタマイズされた平衡化のためのカスタム マッピングの状態部分を指定できます。詳細については、operspecCustomMappingFcn プロパティを参照してください。

バージョン履歴

R2017a で導入