For Each
For Each Subsystem の制御ブロック
説明
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 列の分割を処理に使用します。
既定では、入力信号またはマスク パラメーターのすべての分割が処理されます。分割のサブセットを処理するには、処理する分割数を [反復回数] として入力します。上記の行列の例では、[分割オフセット] を 0
(既定の設定) に、[反復回数] を 2
に設定すると、入力行列 A
の最初の 2 行または 2 列のみが処理されます。
メモ
Simulink で 1 次元と見なされるのは信号だけです。マスク パラメーターは、方向に応じて行ベクトルか列ベクトルのどちらかになります。行ベクトルを分割するには、分割次元を 2 (列方向) に指定します。列ベクトルを分割するには、分割次元を 1 (行方向) に指定します。
例
端子
出力
パラメーター
拡張機能
バージョン履歴
R2010a で導入