Main Content

For Each

For Each 子系统的控制模块

  • For Each block

描述

For Each 模块用作 For Each Subsystem 模块的控制模块。具体来说,For Each 模块可以使 For Each 子系统内的模块能够独立处理输入信号或封装参数的元素。此子系统内每个具有状态的模块维护它所处理的每个元素或子数组的一组单独状态。随着该子系统中的模块集对元素(或子数组)的处理,该子系统串联结果以形成输出信号。

For Each Subsystem block icon, displayed alongside contents of for-each subsystem

在更改输入或封装参数后使用 For Each 子系统迭代计算输出。为此,请在 For Each 模块对话框中配置输入信号或封装参数的分区。

将输入信号分区到子系统

要为 For Each 子系统中的每次迭代指定要对哪些输入信号分区,请使用 For Each 模块的对话框中的输入分区选项卡。在指定要分区的信号时,指定分区维度分区宽度分区偏移量参数。

对子系统的封装参数进行分区

您可以对 For Each Subsystem 模块的封装参数进行分区。对于在每次迭代中结构相同但参数值不同的系统,分区非常有用。在这种情况下,针对每个参数更改模型来对额外输入参数进行分区非常繁琐。请改为将封装参数添加到 For Each 子系统中。有关详细信息,请参阅创建简单封装。要选择封装参数进行分区,请使用 For Each 模块对话框中的参数分区选项卡。有关详细信息,请参阅下文的选择分区参数

串联输出

通过在输出串联选项卡中指定串联维度来定义沿哪个维度串联结果。

模块为每个子数组生成的结果沿串联维度 1 堆叠。默认情况下,使用维度 1(y 轴),这意味着结果垂直堆叠。但是,如果指定的串联维度为 2,结果将沿水平方向(x 轴)串联。因此,如果该过程生成行向量,则串联的结果在第一种情况下是矩阵,在第二个种情况下是行向量。

选择分区参数

当选择要分区的输入信号或子系统封装参数时,您需要为每次迭代指定如何将其分解为元素或子数组。通过为分区维度分区宽度分区偏移量参数设置整数值来执行此操作。

作为说明,以如下形式的输入信号矩阵 A 为例:

3-by-3 matrix A with all 9 elements displayed, showing d1 as the vertical dimension and d2 as the horizontal dimension

标签 d1 和 d2 分别定义维度 1 和 2。如果为分区维度和分区宽度均保留默认设置 1,为分区偏移量保留默认设置 0,则 Simulink® 会垂直于分区维度 1 以等于分区宽度(一个元素)的宽度进行切片:

3-by-3 matrix A, with all 9 elements showing, partitioned into rows

矩阵 A 分解为以下三个行向量:

3-by-3 matrix A, decomposed into 3 3-element row vectors

如果改为将 2 指定为分区维度,则 Simulink 将垂直于维度 2 进行切片来形成以下三个列向量:

3-by-3 matrix A, decomposed into 3 3-element column vectors

除了将分区维度设置为 2 之外,如果再将分区宽度设置为 2 并将分区偏移量设置为 -1,Simulink 会将矩阵处理为两个重叠的 3×2 分区。

3-by-3 matrix A, decomposed into 2 overlapping 3-by-2 matrices

默认情况下,处理输入信号或封装参数的所有分区。要处理部分分区,请在迭代次数中输入要处理的分区的数量。在上面的矩阵示例中,如果分区偏移量设置为 0(默认值),并且迭代次数设置为 2,则仅处理输入矩阵 A 的前 2 行或前 2 列。

注意

在 Simulink 中,只有信号被视为一维。封装参数是行向量或列向量,具体取决于其方向。要对行向量进行分区,请将分区维度指定为 2(沿列进行)。要对列向量进行分区,请将分区维度指定为 1(沿行进行)。

端口

输出

全部展开

当前分区的索引(从 0 开始),以标量形式返回。

依存关系

要启用此端口,请选择显示分区索引输出端口

数据类型: int32 | double

参数

全部展开

“输入分区”选项卡

选择要分区的每个输入信号,并指定对应的分区维度分区宽度分区偏移量参数。有关详细信息,请参阅 Inport 模块参考页。

此 参数 为只读。

连接到 For Each Subsystem 模块的输入端口的列表。

选择连接到 For Each Subsystem 模块的输入端口信号以将其分区为子数组或元素。对于端口列中列出的每个端口,选中对应的复选框来对该信号进行分区。

编程用法

模块参数InputPartition
类型:字符向量
'off' | 'on'
默认值'off'

指定用于对所选输入信号数组进行切片的维度。生成的切片垂直于您指定的维度。切片会视情况将数组分区为子数组或元素。

1

沿列对输入数组进行切片。

2

沿行对输入数组进行切片。

n

沿维度 n 对输入数组进行切片。

依存关系

要启用此参数,请为相关输入端口选择分区

编程用法

模块参数InputPartitionDimension
类型:字符向量
'1' | '2' | '<positive integer>'
默认值'1'

指定所选输入信号的每个分区切片的宽度。

依存关系

要启用此参数,请为相关输入端口选择分区

编程用法

模块参数 InputPartitionWidth
类型:字符向量
'1' | '<integer>'
默认值'1'

指定所选输入信号的每个分区切片的偏移量。

0

分区切片之间无偏移,即分区切片之间没有间隙且不重叠。

整数

指定分区偏移量,使用正整数指定切片之间的间隙,或使用负整数表示重叠。分区宽度分区偏移量之和必须为正整数。

例如,分区宽度3分区偏移量-2 表示每个 3 元素切片中都有 2 个元素与其相邻切片重叠;而分区宽度2分区偏移量1 表示每对相邻的宽度为 2 个元素的切片之间存在宽度为 1 个元素的间隙。

依存关系

要启用此参数,请为相关输入端口选择分区

编程用法

模块参数InputPartitionOffset
类型:字符向量
'0' | '<integer>'
默认值'0'

“参数分区”选项卡

选择您要分区的每个封装参数,并指定相应的分区维度分区宽度参数。

此 参数 为只读。

For Each Subsystem 模块的封装参数的列表。仅当您向 For Each Subsystem 模块的封装添加可编辑参数后,列表中才会显示封装参数。请参阅Author Block Masks

选择 For Each Subsystem 模块的封装参数以将其分区为子数组或元素。对于参数列中列出的每个端口,选中对应的复选框来对该封装参数进行分区。

编程用法

模块参数SubsysMaskParameterPartition
类型:字符向量
'off' | 'on'
默认值'off'

指定用于对所选封装参数数组进行切片的维度。生成的切片垂直于您指定的维度。切片会视情况将数组分区为子数组或元素。

1

沿列对封装参数数组进行切片。

2

沿行对封装参数数组进行切片。

n

沿维度 n 对封装参数数组进行切片。

依存关系

要启用此参数,请为相关封装参数选择分区

编程用法

模块参数SubsysMaskParameterPartitionDimension
类型:字符向量
'1' | '<integer>'
默认值'1'

指定所选封装参数数组的每个分区切片的宽度。

依存关系

要启用此参数,请为相关封装参数选择分区

编程用法

模块参数SubsysMaskParameterPartitionWidth
类型:字符向量
'1' | '<positive integer>'
默认值'1'

“输出串联”选项卡

对于每个输出端口,指定堆叠(串联)For Each Subsystem 模块结果所沿的维度。有关详细信息,请参阅 Outport 模块参考页。

此 参数 为只读。

连接到 For Each Subsystem 模块的输出端口的列表。

对于每个输出端口,指定堆叠 For Each Subsystem 模块的结果所沿的维度。

1

结果在 d1 方向堆叠,即垂直堆叠。如果模块生成列向量,则串联过程会生成单个列向量。如果模块生成行向量,则串联过程会生成矩阵。

2

结果在 d2 方向堆叠,即水平堆叠。如果模块生成行向量,则串联过程会生成单个行向量。如果模块生成行向量,则串联过程会生成矩阵。

n

结果在 dn 方向堆叠。

编程用法

模块参数OutputConcatenationDimension
类型:字符向量
'1' | '<integer>'
默认值'1'

其他参数

控制分区索引输出端口的显示。

off

隐藏输出端口。

on

在模块上显示输出端口。

编程用法

模块参数ShowIterationIndex
类型:字符向量
'off' | 'on'
默认值'off'

指定输出端口的分区索引数据类型。

int32

选择 32 位有符号整数。

double

选择双精度实数。

依存关系

要启用此参数,请选择显示分区索引输出端口

编程用法

模块参数IterationIndexDataType
类型:字符向量
'int32' | 'double'
默认值'int32'

要处理数据子集,请指定要处理的输入信号或封装参数数组的分区切片数;或者,请指定 -1 以处理所有切片。该数量不能大于可用切片的总数。

-1

处理所有切片

整数

要处理的切片数

例如,迭代次数3 表示只处理前 3 个切片。

编程用法

模块参数SpecifiedNumIters
类型:字符向量
'-1' | '<integer>'
默认值'-1'

扩展功能

版本历史记录

在 R2010a 中推出