# Product


标量和非标量的乘除运算或者矩阵的乘法和逆运算

  • 库: Sysblock / MathOperation

# 描述

Product 模块输出两个输入(两个标量、一个标量和一个非标量,或者具有相同维度的两个非标量)的相乘结果。指定此行为的默认参数值包括:

  • 乘法: 按元素 (.*)
  • 输入的数目:2

Product 模块可以执行标量或矩阵乘法运算,具体取决于乘法参数的值。此模块接受一个或多个输入,具体取决于输入的数目参数。输入的数目参数还指定要对每个输入执行的运算。

Product 模块可以输入标量、向量和矩阵的任意组合,对于这些输入,执行的运算必须具有数学定义的结果。该模块对输入执行指定的运算,然后输出结果。

Product 模块有两种模式:按元素模式,按元素处理非标量输入元素;矩阵模式,以矩阵方式处理非标量输入。

# 按元素模式

乘法设置为按元素 (.*) 时,Product 模块即处于按元素模式,在这种模式下,模块将对任何非标量输入的单个数值元素执行运算。

输入的数目参数的值控制存在多少个输入,以及是乘以还是除以每个输入以得到输出。当模块具有多个输入时,任何非标量输入都必须具有相同的维度,而模块将输出具有这些维度的非标量。为了计算输出,模块首先将任何标量输入展开为与非标量输入具有相同维度的非标量。

# 矩阵模式

乘法参数的值为矩阵 (*) 时,Product 模块即处于矩阵模式,在这种模式下,模块按矩阵处理非标量输入。

输入的数目参数的值既控制存在多少个输入,也控制是乘以还是除以每个输入矩阵以得到输出。输入的数目的语法与按元素模式相同。这两个模式的不同之处在于发生的乘法和除法的类型。

# 模块输入和模式之间的交互

Product 模块输入与其乘法模式之间的交互如下:

  • 1 或 \ 或 /

  • 大于 1 的整数值

  • 不带引号的含有两个或更多 \ 和 / 字符的字符串

# 示例

对两个常量值进行相乘。将两个 Constant 模块设置为 2 分别连接到 Product 模块的两个输入端。

参考示例模型

# 端口

# 输入

u1 — 要进行乘法或除法运算的第一个输入
标量 | 向量 | 矩阵 | N 维数组

要进行乘法或除法运算的第一个输入,作为标量、向量、矩阵或 N 维数组提供。

数据类型: float | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

u2 — 要进行乘法或除法运算的第 N 个输入
标量 | 向量 | 矩阵 | N 维数组

要进行乘法或除法运算的第 N 个输入,作为标量、向量、矩阵或 N 维数组提供。

数据类型: float | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

X — 要相乘的输入信号
标量 | 向量 | 矩阵 | N 维数组

要与其他输入相乘的输入信号。

# 依存关系

要启用一个或多个 X 端口,请为输入的数目参数指定一个或多个 * 字符,并将乘法参数设置为按元素 (.*)

数据类型: float | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

÷ — 要进行除法或逆运算的输入信号
标量 | 向量 | 矩阵 | N 维数组

要进行除法或逆运算的输入信号。

# 依存关系

要启用一个或多个 ÷ 端口,请为输入的数目参数指定一个或多个 / 字符,并将乘法参数设置为按元素 (.*)

数据类型: float | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

* — 要相乘的输入信号
标量 | 向量 | 矩阵 | N 维数组

要与其他输入相乘的输入信号。

# 依存关系

要启用一个或多个 * 端口,请为输入数目参数指定一个或多个 * 字符,并将乘法参数设置为矩阵 (*)

数据类型: float | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

Inv — 要进行除法或逆运算的输入信号
标量 | 向量 | 矩阵 | N 维数组

要进行除法或逆运算的输入信号。

# 依存关系

要启用一个或多个 Inv 端口,请为输入数目参数指定一个或多个 / 字符,并将乘法参数设置为矩阵 (*)

数据类型: float | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

# 输出

y — 通过对输入进行乘法、除法或逆运算来计算得出输出
标量 | 向量 | 矩阵 | N 维数组

通过对输入进行乘法、除法或逆运算来计算得出输出。

数据类型: float | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

# 参数

# 主要

输入的数目 — 控制输入的数量和运算的类型
**(默认) | 标量 | 对每个输入端口应用 * 或 /

控制模块的两个属性:

  • 模块上的输入端口数
  • 是乘以还是除以每个输入来得到输出
乘法 — 按元素 (.* ) 或矩阵 (* )
乘法 按元素(.* )(默认) | 矩阵(*)

指定模块是执行按元素 (.*) 还是矩阵 (*) 乘法。

# 信号属性

输出数据类型 — 指定输出数据类型
Inherit: internalRule(默认) | Inherit: keepMSB | Inherit: matchScaling | Inherit: backPropagation | Inherit: sameAsFirstInput | double | float | int8 | uint8 | int16 | uint16 | int32 | uint32 | fixdt(1,16,0) | fixdt(1,16,2^0,0) | fixdt(1,16,1.0,0,0.0)

为输出选择数据类型。该类型可以继承、直接指定或表示为数据类型对象。

对整数溢出进行饱和处理 — 溢出操作的方法
off(默认) | on

指定对溢出是进行饱和处理还是绕回处理。

操作 原理说明 对溢出的影响 示例
选中此复选框 (on)。 您的模型可能有溢出,并且您希望在生成的代码中具有显式饱和保护。 将溢出饱和处理为数据类型能够表示的最小值或最大值。 int8(有符号 8 位整数)数据类型可以表示的最大值为 127。任何大于此最大值的模块运算结果都会导致 8 位整数溢出。如果选中此复选框,模块输出将在达到 127 时饱和。类似地,模块输出将在达到最小输出值 -128 时饱和。
不选中此复选框 (off)。 您需要优化所生成代码的效率。您希望避免过度地指定信号超出范围时的处理方式。 溢出会绕回到由数据类型表示的适当值。 int8(有符号 8 位整数)数据类型可以表示的最大值为 127。任何大于此最大值的模块运算结果都会导致 8 位整数溢出。清除该复选框时,软件会将导致溢出的值解释为 int8,这可能产生意外结果。例如,以 int8 表示的模块结果 130(二进制 1000 0010)为 -126。

如果选中此复选框,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。通常,代码生成过程可以检测何时不会发生溢出。在这种情况下,代码生成器不会生成饱和代码。

# 版本历史记录

  • 在 2024b 之前推出

# 限制信息

不支持部分

  1. 参数-主要-乘法运算维度 — 所有维度或指定维度
  2. 参数-主要-维度 — 要进行乘法运算的维度
  3. 参数-主要-采样时间 — -1 以外的采样时间值
  4. 参数-信号属性-要求所有输入具有相同的数据类型 — 要求所有输入具有相同的数据类型
  5. 参数-信号属性-输出最小值 — 范围检查的最小输出值
  6. 参数-信号属性-输出最大值 — 范围检查的最大输出值
  7. 参数-信号属性-锁定输出数据类型设置以防止被定点工具更改 — 防止定点工具覆盖输出数据类型
  8. 参数-信号属性-整数舍入模式 — 定点运算的舍入模式

# 另请参阅

DotProduct