Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

For Each

入力信号またはマスク パラメーターの要素またはサブ配列を処理する

  • ライブラリ:
  • Ports & Subsystems

  • For Each block

説明

For Each ブロックは、For Each Subsystem ブロックの制御ブロックとして機能します。具体的には、For Each ブロックを使用することで、入力信号またはマスク パラメーターのいずれかの要素を For Each Subsystem 内のブロックで個別に処理できるようになります。状態をもつこのサブシステム内の各ブロックは、処理対象の各要素またはサブ配列ごとに独立した状態セットを維持します。サブシステム内のブロック セットが要素またはサブ配列を処理するとき、サブシステムは結果を連結して出力信号を形成します。

For Each Subsystem を使用して、入力やマスク パラメーターを変更した後に出力を反復計算します。これを行うには、For Each ブロックのダイアログ ボックスで入力信号またはマスク パラメーターの分割を設定します。

入力信号のサブシステムへの分割

各反復に分割する入力信号を For Each Subsystem で指定するには、For Each ブロックのダイアログ ボックスの [入力分割] タブを使用します。分割する信号を指定するときは、[分割次元] パラメーター、[分割幅] パラメーター、[分割オフセット] パラメーターを指定します。

サブシステムのマスク パラメーターの分割

For Each Subsystem ブロックのマスク パラメーターは分割できます。分割は、システムの構造は変えずにパラメーターの値を変えて反復処理する場合に便利です。この場合、パラメーターごとにモデルを変更して追加の入力信号を分割する方法では煩雑になります。代わりに、For Each Subsystem にマスク パラメーターを追加します。詳細については、簡単なマスクの作成を参照してください。分割するマスク パラメーターを選択するには、For Each ブロックのダイアログ ボックスの [パラメーターの分割] タブを使用します。詳細については、以下の分割パラメーターの選択を参照してください。

出力の連結

結果を連結する次元を定義するには、[出力連結] タブで [連結の次元] を指定します。

サブ配列ごとにブロックによって生成された結果は、連結次元に沿って積み上げられます。既定では、次元 1 (y 軸) が使用され、結果が垂直に積み上げられることを意味します。ただし、連結の次元を 2 に指定すると、結果は水平方向 (x 軸) に連結されます。したがって、行ベクトルが処理されると、連結された結果は、最初のケースは行列になり、2 番目のケースは行ベクトルになります。

分割パラメーターの選択

分割する入力信号またはサブシステムのマスク パラメーターを選択するときは、それらを各反復用に要素またはサブ配列に分解する方法を指定しなければなりません。これを行うには、[分割次元] パラメーターと [分割幅][分割オフセット] パラメーターで整数値を設定します。

例として、次の形式の入力信号行列 A について考えてみます。

ラベル d1 と d2 は、それぞれ次元 1 と次元 2 を定義します。分割次元と分割幅の両方に対して既定の設定 1、分割オフセットに 0 が保持されると、Simulink® は分割幅に等しい幅つまり 1 要素分の幅で分割次元 1 に対して直角にスライスします。

行列 A は、次の 3 つの行ベクトルに分解されます。

代わりに分割次元 2 を指定すると、Simulink は次元 2 に対して直角にスライスして、次の 3 つの列ベクトルを形成します。

[分割次元]2 に設定する以外に、[分割幅]2 および [分割オフセット]-1 に設定すると、Simulink は 2 つのオーバーラップする 3 行 2 列の分割を処理に使用します。

[分割オフセット] パラメーターの使用例については、モデル slexForEachOverlapExample を開いてください。

既定では、入力信号またはマスク パラメーターのすべての分割が処理されます。分割のサブセットを処理するには、処理する分割数を [反復回数] として入力します。上記の行列の例では、[分割オフセット]0 (既定の設定) に、[反復回数]2 に設定すると、入力行列 A の最初の 2 行または 2 列のみが処理されます。

メモ

Simulink で 1 次元と見なされるのは信号だけです。マスク パラメーターは、方向に応じて行ベクトルか列ベクトルのどちらかになります。行ベクトルを分割するには、分割次元を 2 (列方向) に指定します。列ベクトルを分割するには、分割次元を 1 (行方向) に指定します。

端子

出力

すべて展開する

現在の分割のインデックス (ゼロから始まる)。スカラーとして返されます。

依存関係

この端子を表示するには、[分割インデックスの出力端子を表示] をオンにします。

データ型: int32 | double

パラメーター

すべて展開する

[入力分割] タブ

分割する各入力信号を選択し、対応する [分割次元] パラメーター、[分割幅] パラメーター、および [分割オフセット] パラメーターを指定します。詳細は、Inport ブロックのリファレンス ページを参照してください。

For Each Subsystem ブロックに接続された入力端子のリスト。

サブ配列または要素に分割する For Each Subsystem ブロックに接続された入力端子信号を選択します。

依存関係

このパラメーターを選択すると、選択されている入力端子信号の [分割次元] パラメーター、[分割幅] パラメーター、および [分割オフセット] パラメーターが有効になります。

プログラムでの使用

ブロック パラメーター: InputPartition
: 文字ベクトル
: 'off' | 'on'
既定の設定: 'off'

入力信号配列をスライスする次元を指定します。結果として得られるスライスは、指定する次元と直交します。スライスによって配列がサブ配列または要素に適切に分割されます。

1

1 の次元を指定します。

整数

次元を指定します。最小値 1

プログラムでの使用

ブロック パラメーター: InputPartitionDimension
: 文字ベクトル
: '1' | '<integer>'
既定の設定: '1'

入力信号の各分割スライスの幅を指定します。

1

1 つの要素の幅。

整数

幅を指定します。最小値 1

プログラムでの使用

ブロック パラメーター: InputPartitionWidth
: 文字ベクトル
: '1' | '<integer>'
既定の設定: '1'

入力信号の各分割スライスのオフセットを指定します。

0

分割スライス間のオフセットはありません。

整数

分割幅と分割オフセットの合計が正の整数になるように、分割オフセットを指定します。

たとえば、[分割幅]3 で、[分割オフセット]-2 であると、3 要素のスライスがそれぞれ隣接するスライスと 2 要素分オーバーラップすることを示します。また、[分割幅]2 で、[分割オフセット]1 であると、1 要素の幅のギャップが隣接する 2 要素の幅のスライスのそれぞれのペアの間にあることを示します。

プログラムでの使用

ブロック パラメーター: InputPartitionOffset
: 文字ベクトル
: '0' | '<integer>'
既定の設定: '0'

[パラメーターの分割] タブ

分割する各マスク パラメーターを選択し、対応する [分割次元] パラメーターと [分割幅] パラメーターを指定します。このリストには、親の For Each Subsystem のマスクに編集可能なパラメーターを追加している場合にのみパラメーターが表示されます。

For Each Subsystem ブロックのマスク パラメーターのリスト。

サブ配列または要素に分割する For Each Subsystem ブロックのマスク パラメーターを選択します。

オフ

マスク パラメーターをクリアします。

オン

分割するマスク パラメーターを選択します。

依存関係

このパラメーターを選択すると、選択されているマスク パラメーターの [分割次元] パラメーターと [分割幅] パラメーターが有効になります。

プログラムでの使用

ブロック パラメーター: SubsysMaskParameterPartition
: 文字ベクトル
: 'off' | 'on'
既定の設定: 'off'

マスク パラメーター配列をスライスする次元を指定します。結果として得られるスライスは、指定する次元と直交します。スライスによって配列がサブ配列または要素に適切に分割されます。

プログラムでの使用

ブロック パラメーター: SubsysMaskParameterPartitionDimension
: 文字ベクトル
: '1' | '<integer>'
既定の設定: '1'

マスク パラメーター配列の各分割スライスの幅を指定します。

プログラムでの使用

ブロック パラメーター: SubsysMaskParameterPartitionWidth
: 文字ベクトル
: '1' | '<integer>'
既定の設定: '1'

[出力連結] タブ

各出力端子に対して、For Each Subsystem ブロックの結果を積み上げる (連結する) 次元を指定します。詳細は、Outport ブロックのリファレンス ページを参照してください。

For Each Subsystem ブロックに接続された出力端子のリスト。

For Each Subsystem ブロックの結果を積み上げる次元を指定します。

1

結果は d1 方向に積みあがっていきます。ブロックが列ベクトルを生成すると、連結処理によって 1 つの列ベクトルが生成されます。ブロックが行ベクトルを生成すると、連結処理によって 1 つの行列が生成されます。

2

結果は d2 方向に積みあがっていきます。ブロックが行ベクトルを生成すると、連結処理によって 1 つの行ベクトルが生成されます。ブロックが行ベクトルを生成すると、連結処理によって 1 つの行列が生成されます。

プログラムでの使用

ブロック パラメーター: OutputConcatenationDimension
: 文字ベクトル
: '1' | '<integer>'
既定の設定: '1'

その他のパラメーター

分割インデックスの出力端子の表示を制御します。

オフ

出力端子を非表示にします。

オン

ブロックの出力端子を表示します。

依存関係

このパラメーターを選択すると、[分割インデックスの出力データ型] パラメーターが有効になります。

プログラムでの使用

ブロック パラメーター: ShowIterationIndex
: 文字ベクトル
: 'off' | 'on'
既定の設定: 'off'

出力端子の分割インデックスのデータ型の指定

int32

符号付き 32 ビット整数を選択します。

double

double の実数を選択します。

プログラムでの使用

ブロック パラメーター: IterationIndexDataType
: 文字ベクトル
: 'int32' | 'double'
既定の設定: 'int32'

データのサブセットを処理するには、処理する入力信号またはマスク パラメーター配列の分割スライスの数を指定するか、-1 を指定してすべてのスライスを処理します。この数字は、使用可能なスライスの合計数を超えてはなりません。

-1

すべてのスライスを処理する

整数

処理するスライス数

たとえば、[反復回数]3 である場合、最初の 3 スライスのみが処理されることを示します。

プログラムでの使用

ブロック パラメーター: SpecifiedNumIters
: 文字ベクトル
: '-1' | '<integer>'
既定の設定: '-1'

モデルの例

R2010a で導入