Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

Product, Matrix Multiply

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

  • Product block

库:
Simulink / Commonly Used Blocks
Simulink / Math Operations
Simulink / Matrix Operations
HDL Coder / Commonly Used Blocks
HDL Coder / HDL Floating Point Operations
HDL Coder / Math Operations

描述

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

  • 乘法:按元素(.*)

  • 输入的数目2

下表显示了 Product 模块使用默认模块参数值的的输出。

输入和行为示例

标量 X 标量

输出两个输入的乘积。

标量 X 非标量

输出与非标量输入具有相同维度的非标量。非标量输出中的每个元素是标量输入与非标量输入中对应元素的乘积。

非标量 X 非标量

输出与输入具有相同维度的非标量。输出中的每个元素是与输入中对应元素的乘积。

DivideProduct of Elements 模块是 Product 模块的变体。

  • 有关 Divide 模块的信息,请参阅 Divide

  • 有关 Product of Elements 模块的信息,请参阅 Product of Elements

Product 模块(或者经过适当配置的 Divide 模块或 Product of Elements 模块)可以:

  • 对任意多个标量、向量或矩阵输入进行数值乘除运算

  • 对任意多个矩阵输入执行矩阵乘除运算

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

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

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

按元素模式

乘法设置为按元素(.*) 时,Product 模块即处于按元素模式,在这种模式下,模块将对任何非标量输入的单个数值元素执行运算。这相当于 MATLAB® 中的 .* 运算符。在按元素模式下,Product 模块可以执行各种乘法、除法和算术逆运算。

输入的数目参数的值控制存在多少个输入,以及是乘以还是除以每个输入以得到输出。当 Product 模块在按元素模式下且只有一个输入时,它的功能相当于 Product of Elements 模块。当模块具有多个输入时,任何非标量输入都必须具有相同的维度,而模块将输出具有这些维度的非标量。为了计算输出,模块首先将任何标量输入展开为与非标量输入具有相同维度的非标量。

下表显示了 Product 模块对于使用指定的输入的数目参数值的的输出。

参数值示例

输入的数目2

输入的数目*/

输入的数目/**/

输入的数目**

输入的数目*/*

矩阵模式

乘法参数的值为矩阵(*) 时,Product 模块即处于矩阵模式,在这种模式下,模块按矩阵处理非标量输入。这相当于 MATLAB 中的 * 运算符。在矩阵模式下,Product 模块可以对单个方阵进行逆运算,或者对任意多个具有维度的矩阵(通过数学方式为它们定义了结果)进行乘法或除法运算。

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

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

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

  • 1*/

    模块有一个输入端口。在按元素模式下,模块按照 Product of Elements 模块说明处理输入。在矩阵模式下,如果参数值为 1*,则模块将输出输入值。如果值为 /,则输入必须为方阵(包括作为简并情况的标量),模块将输出逆矩阵。有关详细信息,请参阅按元素模式矩阵模式

  • 大于 1 的整数值

    模块的输入的数量由整数值指定。输入依乘法参数指定的按元素模式或矩阵模式相乘。有关详细信息,请参阅按元素模式矩阵模式

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

    模块的输入的数量由字符向量长度指定。乘以与 * 字符相对应的每个输入来得到输出。除以与 / 字符相对应的每个输入来得到输出。依乘法参数指定的按元素模式或矩阵模式进行运算。有关详细信息,请参阅按元素模式矩阵模式

仿真与代码生成之间的预期差异

对于复数浮点输入的按元素运算,仿真和代码生成结果在接近溢出情况下可能会有所差异。尽管在“配置参数”对话框的代码生成 > 接口窗格上选中了复数且取消选中了非有限数,代码生成器也不会为中间溢出生成特殊情况代码。此方法可以提高嵌入式运算在不含极值的一般情况下的效率。如果输入可能包含极值,必须显式处理这些情况。

如果 NaNinf 值在数学上没有意义,则生成的代码可能不会为这些值生成与仿真相同的模式。例如,如果仿真输出包含 NaN,生成的代码的输出也会包含 NaN,但不一定在相同的位置。

端口

输入

全部展开

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

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

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

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

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

依存关系

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

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

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

依存关系

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

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

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

依存关系

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

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

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

依存关系

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

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

输出

全部展开

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

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

参数

全部展开

常设

控制模块的两个属性:

  • 模块上的输入端口数

  • 是乘以还是除以每个输入来得到输出

如果您指定:

  • 1*/

    模块有一个输入端口。在按元素模式下,模块按照 Product of Elements 模块说明处理输入。在矩阵模式下,如果参数值为 1*,则模块将输出输入值。如果值为 /,则输入必须为方阵(包括作为简并情况的标量),模块将输出逆矩阵。有关详细信息,请参阅按元素模式矩阵模式

  • 大于 1 的整数值

    模块的输入的数量由整数值指定。输入依乘法参数指定的按元素模式或矩阵模式相乘。有关详细信息,请参阅按元素模式矩阵模式

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

    模块的输入的数量由字符向量长度指定。乘以与 * 字符相对应的每个输入来得到输出。除以与 / 字符相对应的每个输入来得到输出。依乘法参数指定的按元素模式或矩阵模式进行运算。有关详细信息,请参阅按元素模式矩阵模式

编程用法

模块参数Inputs
类型:字符向量
值:'2' | '**' | '*/' | '*/*' | ...
默认值:'2'

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

编程用法

模块参数Multiplication
类型:字符向量
值:'Element-wise(.*)' | 'Matrix(*)'
默认值:'Element-wise(.*)'

指定要乘以的维度是所有维度还是指定的维度。当选择指定的维度时,您可以将维度指定为 12

依存关系

要启用此参数,请将输入的数目设置为 * 并将乘法设置为按元素(.*)

编程用法

模块参数CollapseMode
类型:字符向量
值:'All dimensions' | 'Specified dimension'
默认值:'All dimensions'

要进行乘法运算的维度需指定为小于或等于输入信号的维度数量的整数。

依存关系

要启用此参数,请进行如下设置:

  • 输入的数目设置为 *

  • 乘法设置为按元素(.*)

  • 乘法运算维度设置为指定的维度

编程用法

模块参数CollapseDim
类型:字符向量
值:'1' | '2' | ...
默认值:'1'

指定采样时间间隔。要继承采样时间,请将此参数设置为 -1。有关详细信息,请参阅指定采样时间

依存关系

仅当您将此参数设置为 -1 以外的值时才可见。要了解详细信息,请参阅不建议设置采样时间的模块

编程用法

模块参数:SampleTime
类型:字符串标量或字符向量
默认值:"-1"

信号属性

指定输入信号是否必须全部具有相同的数据类型。如果启用此参数,则在输入信号类型不同时,仿真过程中会发生错误。

编程用法

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

Simulink® 检查的输出范围的下限值。

Simulink 使用最小值执行下列操作:

注意

输出最小值不会饱和或剪切实际输出信号。请改用 Saturation 模块。

编程用法

模块参数OutMin
类型:字符向量
'[ ]'| 标量
默认值'[ ]'

Simulink 检查的输出范围的上限值。

Simulink 使用最大值执行下列操作:

注意

输出最大值不会饱和或剪切实际输出信号。请改用 Saturation 模块。

编程用法

模块参数OutMax
类型:字符向量
'[ ]'| 标量
默认值'[ ]'

为输出选择数据类型。该类型可以继承、直接指定或表示为数据类型对象,如 Simulink.NumericType。有关详细信息,请参阅 控制信号的数据类型

当您选择继承的选项时,模块的行为如下所示:

  • 继承: 从内部规则继承 - Simulink 在考虑嵌入式目标硬件的属性的同时,会选择相应的数据类型来平衡数值准确性、性能和生成的代码大小。如果更改了嵌入式目标的设置,则依内部规则选择的数据类型可能会发生变化。例如,如果该模块将 int8 类型的输入乘以 int16 的增益,并且将 ASIC/FPGA 指定为目标硬件类型,则输出数据类型为 sfix24。如果指定未指定(假定通用 32 位)(即通用 32 位微处理器)为目标硬件,则输出数据类型为 int32。如果目标微处理器不能提供适应输出范围的字长,Simulink 软件将在诊断查看器中显示错误。

  • 继承: Keep MSB - Simulink 选择一种能够保持运算的完整范围的数据类型,然后将输出精度降低到适合嵌入式目标硬件的大小。

    提示

    要获得更高效的生成代码,请取消选择对整数溢出进行饱和处理参数。

    此规则从不产生溢出。

  • 继承: Match scaling - Simulink 选择一种数据类型,其定标与输入类型的定标相匹配。如果该类型的完整范围不适合嵌入式目标硬件,则该范围会缩小,从而生成适合嵌入式目标硬件的类型。此规则可能产生溢出。此规则不支持复信号之间的乘法运算

    Inherit: Keep MSBInherit: Match scaling 规则不支持复信号或非零偏差信号之间的乘法运算。这些规则仅支持两个输入之间的乘法和除法('**''*/''/*')、两个输入的矩阵乘法以及一个向量中两个元素的折叠积。

    有时软件不能同时满足优化代码效率和保证数值准确性这两个需求。如果内部规则不能满足您对数值准确性或性能的特定需求,请使用下列选项之一:

    • 显式指定输出数据类型。

    • 使用简单的选项继承: 与输入相同

    • 显式指定默认数据类型(例如 fixdt(1,32,16)),然后使用定点工具为您的模型提供数据类型建议。有关详细信息,请参阅 fxptdlg (Fixed-Point Designer)

    • 要指定您自己的继承规则,请使用继承: 通过反向传播继承,然后使用 Data Type Propagation 模块。有关如何使用此模块的示例说明,请参阅 Signal Attributes 模块库中的 Data Type Propagation Examples 模块。

  • 继承: 通过反向传播继承 - 使用驱动模块的数据类型。

  • 继承: 与第一个输入相同 - 使用第一个输入信号的数据类型。

依存关系

当输入是小于单精度的浮点数据类型时,继承: 从内部规则继承输出数据类型取决于 Inherit floating-point output type smaller than single precision 配置参数的设置。当对数据类型进行编码所需的位数小于对单精度数据类型编码所需的 32 位时,数据类型小于单精度。例如,halfint16 小于单精度。

编程用法

模块参数OutDataTypeStr
类型:字符向量
'Inherit: Inherit via internal rule | 'Inherit: Keep MSB'| 'Inherit: Match scaling'| 'Inherit: Same as first input' | 'Inherit: Inherit via back propagation' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'uint64'|'int64'|'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)' | '<data type expression>'
默认值'Inherit: Inherit via internal rule'

选择此参数可防止定点工具覆盖您在模块上指定的输出数据类型。有关详细信息,请参阅Use Lock Output Data Type Setting (Fixed-Point Designer)

编程用法

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

选择定点运算的舍入模式。您可以选择:

向上

朝正无穷方向舍入正数和负数。等同于 MATLAB ceil 函数。

收敛

将数值舍入到最邻近的可表示值。如果出现结值,则舍入到最邻近的偶数整数。等同于 Fixed-Point Designer™ convergent 函数。

向下

朝负无穷方向舍入正数和负数。等同于 MATLAB floor 函数。

最邻近值

将数值舍入到最邻近的可表示值。如果出现结值,则朝正无穷方向舍入。等同于 Fixed-Point Designer nearest 函数。

舍入

将数值舍入到最邻近的可表示值。如果出现结值,则将正数朝正无穷方向舍入,将负数朝负无穷方向舍入。等同于 Fixed-Point Designer round 函数。

最简

在向负无穷大方向舍入和向零舍入之间选择,以生成尽可能有效的舍入代码。

将数值向零舍入。等同于 MATLAB fix 函数。

有关详细信息,请参阅舍入 (Fixed-Point Designer)

模块参数始终舍入到最邻近的可表示值。要控制模块参数的舍入方法,请在封装字段中使用 MATLAB 舍入函数输入表达式。

编程用法

模块参数RndMeth
类型:字符向量
值:'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero'
默认值:'Floor'

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

操作原理说明对溢出的影响示例

选中此复选框 (on)。

您的模型可能有溢出,并且您希望在生成的代码中具有显式饱和保护。

将溢出饱和处理为数据类型能够表示的最小值或最大值。

int8(有符号 8 位整数)数据类型可以表示的最大值为 127。任何大于此最大值的模块运算结果都会导致 8 位整数溢出。如果选中此复选框,模块输出将在达到 127 时饱和。类似地,模块输出将在达到最小输出值 -128 时饱和。

不选中此复选框 (off)。

您需要优化所生成代码的效率。

您希望避免过度地指定信号超出范围时的处理方式。有关详细信息,请参阅信号范围错误故障排除

溢出会绕回到由数据类型表示的适当值。

int8(有符号 8 位整数)数据类型可以表示的最大值为 127。任何大于此最大值的模块运算结果都会导致 8 位整数溢出。清除该复选框时,软件会将导致溢出的值解释为 int8,这可能产生意外结果。例如,以 int8 表示的模块结果 130(二进制 1000 0010)为 -126。

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

编程用法

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

选择要指定的数据类别。

  • 继承 - 数据类型的继承规则。选择 Inherit 将在右侧启用另一个菜单/文本框,您可以在其中选择继承模式。

  • 内置 - 内置数据类型。选择 Built in 将在右侧启用另一个菜单/文本框,您可以在其中选择内置数据类型。

  • 定点 - 定点数据类型。选择定点将启用可用于指定定点数据类型的其他参数。

  • 表达式 - 计算结果为数据类型的表达式。选择 Expression 将在右侧启用另一个菜单/文本框,您可以在其中输入表达式。

有关详细信息,请参阅使用数据类型助手指定数据类型

依存关系

要启用此参数,请点击显示数据类型助手按钮。

为此信号选择数据类型覆盖模式。

  • 当您选择 inherit 时,Simulink 从信号的上下文(即:从 Simulink 中使用该信号的模块、Simulink.Signal 对象或 Stateflow® 图)中继承数据类型覆盖设置。

  • 当您选择 off 时,Simulink 忽略信号上下文的数据类型覆盖设置,并使用为信号指定的定点数据类型。

有关详细信息,请参阅 Simulink 文档中的使用数据类型助手指定数据类型

依存关系

要启用此参数,请将模式设置为内置定点

提示

由于能够关闭单个数据类型的数据类型覆盖,您可以在应用数据类型覆盖时更好地控制模型中的数据类型。例如,您可以使用此选项确保数据类型满足下游模块的要求,而忽略数据类型覆盖设置。

指定定点数据是有符号还是无符号。有符号数据可以表示正值和负值,无符号数据只表示正值。

  • 有符号,将定点数据指定为有符号数据。

  • 无符号,将定点数据指定为无符号数据。

有关详细信息,请参阅使用数据类型助手指定数据类型

依存关系

要启用此参数,请将模式设置为 Fixed point

指定存储量化整数的字的位大小。有关详细信息,请参阅指定定点数据类型

依存关系

要启用此参数,请将模式设置为定点

将定点数据类型的小数长度指定为正整数或负整数。有关详细信息,请参阅指定定点数据类型

依存关系

要启用此参数,请将定标设置为二进制小数点

指定定点数据的定标方法,以避免发生溢出情况并最大限度地减少量化错误。有关详细信息,请参阅指定定点数据类型

依存关系

要启用此参数,请将模式设置为定点

指定定点数据类型的斜率。有关详细信息,请参阅指定定点数据类型

依存关系

要启用此参数,请将定标设置为斜率和偏置

将定点数据类型的偏置指定为任意实数。有关详细信息,请参阅指定定点数据类型

依存关系

要启用此参数,请将定标设置为斜率和偏置

模块特性

数据类型

Boolean | double | fixed point | half | integer | single

直接馈通

多维信号

可变大小信号

过零检测

扩展功能

C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。

PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。

定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。

版本历史记录

在 R2006a 之前推出