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

For Each

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

  • ライブラリ:
  • Ports & Subsystems

説明

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

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

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

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

For Each ブロックの分割パラメーター

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

出力の連結

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

サブ配列ごとにブロックによって生成された結果は、連結次元 d1 (y 軸) に沿って積み重なっていきます。それに対して、連結次元が 2 に設定されて d2 が指定されると、結果は d2 方向 (x 軸) に連結されます。したがって、行ベクトルが処理されると、連結された結果は行ベクトルになります。

分割パラメーターの選択

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

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

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

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

2 が入力されて、分割次元として d2 が指定された場合には、Simulink は d2 に対して直角にスライスして、次の 3 つの列ベクトルを形成します。

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

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

メモ

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

端子

入力

すべて展開する

Inport ブロックをサブシステム ブロック内に配置することで、ブロックへの外部入力端子が追加されます。端子ラベルは Inport ブロックの名前と一致します。

ローカル環境から信号を取得するには、Inport ブロックを使用します。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean | fixed point | enumerated | bus

出力

すべて展開する

Outport ブロックをサブシステム ブロック内に配置することで、ブロックの出力端子が追加されます。サブシステム ブロック上の端子ラベルは Outport ブロックの名前です。

信号をローカル環境に送信するには、Outport ブロックを使用します。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean | fixed point | enumerated | bus

パラメーター

すべて展開する

[入力分割] タブ

分割する各入力信号を選択し、対応する [分割次元] パラメーターと [分割幅] パラメーターを指定します。詳細は、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 要素分オーバーラップすることを示します。

プログラムでの使用

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

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

オフ

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

オン

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

依存関係

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

プログラムでの使用

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

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

int32

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

double

double の実数を選択します。

プログラムでの使用

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

[出力連結] タブ

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

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

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

1

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

integer

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

プログラムでの使用

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

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

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

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

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

オフ

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

オン

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

依存関係

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

プログラムでの使用

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

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

プログラムでの使用

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

入力信号の各分割スライスの幅を 1 以上の整数で指定します。

プログラムでの使用

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

モデルの例

R2010a で導入