Copy or invert one scalar input, or collapse one nonscalar input
Math Operations
The Divide and Product blocks are variants of the Product of Elements block.
The Product of Elements block inputs one scalar, vector, or matrix. You can use the block to:
Copy a scalar input unchanged
Invert a scalar input (divide 1 by it)
Collapse a vector or matrix to a scalar by multiplying together all elements or taking successive inverses of the elements
Collapse a matrix to a vector by multiplying together the elements of each row or column or taking successive inverses of the elements of each row or column
The Product of Elements block is functionally a Product block that has two preset parameter values:
Multiplication: Elementwise(.*)
Number of inputs: *
Setting nondefault values for either of those parameters can change a Product of Elements block to be functionally equivalent to a Product block or a Divide block. See the documentation of those two blocks for more information.
The Product of Elements block uses the following algorithms to perform elementwise operations on inputs of floatingpoint, builtin integer, and fixedpoint types:
Input  ElementWise Operation  Algorithm 

Real scalar,  Multiplication  y = u 
Division  y = 1/u  
Real vector or matrix, with elements  Multiplication  y = u1*u2*u3*...*uN 
Division  y = ((((1/u1)/u2)/u3).../uN)  
Complex scalar,  Multiplication  y = u 
Division  y = 1/u  
Complex vector or matrix, with elements  Multiplication  y = u1*u2*u3*...*uN 
Division  y = ((((1/u1)/u2)/u3).../uN) 
If the specified dimension for elementwise multiplication or division is a row or column of a matrix, the algorithm applies to that row or column. For example, consider the following model:
The top Product of Elements block collapses the matrix input to a scalar by taking successive inverses of the four elements:
y = ((((1/2+i)/3)/4i)/5)
The bottom Product of Elements block collapses the matrix input to a vector by taking successive inverses along the second dimension:
y(1) = ((1/2+i)/3)
y(2) = ((1/4i)/5)
Control two properties of the block:
The number of input ports on the block
Whether each input is multiplied or divided into the output
Default: *
1 or *
Copies a scalar input unchanged
Collapses a vector input to a scalar by multiplying all elements together
Collapses a matrix input to a scalar or vector by multiplying elements together based on the Multiply over parameter
For more information, see Algorithm.
/
Outputs the arithmetic inverse of a scalar input
Collapses a vector input to a scalar by taking successive inverses of the elements
Collapses a matrix input to a scalar or vector by taking successive inverses of elements based on the Multiply over parameter
For more information, see Algorithm.
Integer value > 1
Has the number of inputs given by the integer value. The block becomes a product block and the input are multiplied together in elementwise mode or matrix mode, as specified by the Multiplication parameter. See Elementwise Mode and Matrix Mode in the Product documentation for more information.
Unquoted string of two or more *
and /
characters
Has the number of inputs given by the length of the string.
The block becomes a product or divide block and multiplies each input
that corresponds to a *
character into the output.
Each input that corresponds to a /
character is
divided into the output. The operations occur in Elementwise mode
or Matrix mode, as specified by the Multiplication parameter.
See Elementwise Mode and Matrix Mode in the Product block reference
page for more information.
Setting Number of inputs to *
and
selecting Elementwise(.*)
for Multiplication enables
the following Multiply over parameter.
See BlockSpecific Parameters for the commandline information.
Specify whether the Product block operates in Elementwise mode or Matrix mode.
Default: Elementwise(.*)
Elementwise(.*)
Operate in Elementwise mode.
Matrix(*)
Operate in Matrix mode.
Selecting Elementwise(.*)
and setting Number
of inputs to *
enable the following
parameter:
Multiply over
See BlockSpecific Parameters for the commandline information.
Affect multiplication on matrix input.
Default: All dimensions
All dimensions
Output a scalar that is product of all elements of the matrix, or the product of their inverses, depending on the value of Number of inputs.
Specified dimension
Output a vector, the composition of which depends on the value of the Dimension parameter.
Enable this parameter by selecting Elementwise(.*)
for Multiplication and
setting Number of inputs to *
or 1
or /
.
Setting this parameter to Specified dimension
enables
the Dimension parameter.
See BlockSpecific Parameters for the commandline information.
Affect multiplication on matrix input.
Default: 1
Minimum: 1
Maximum: 2
1
Output a vector that contains an element for each column of the input matrix.
2
Output a vector that contains an element for each row of the input matrix.
Each element of the output vector contains the product of all elements in the corresponding column or row of the input matrix, or the product of the inverses of those elements, depending on the value of Number of inputs:
1
or *
Multiply the values of the column or row elements
/
Multiply the inverses of the column or row elements
Enable this parameter by selecting Specified dimension
for Multiply
over.
See BlockSpecific Parameters for the commandline information.
Note:
This parameter is not visible in the block dialog box unless
it is explicitly set to a value other than 
Require that all inputs have the same data type.
Default: Off
Require that all inputs have the same data type.
Do not require that all inputs have the same data type.
See BlockSpecific Parameters for the commandline information.
Lower value of the output range that Simulink^{®} checks.
Default: []
(unspecified)
Specify this number as a finite, real, double, scalar value.
Simulink uses the minimum to perform:
Parameter range checking (see Control Block Parameter Value Ranges) for some blocks
Simulation range checking (see Signal Ranges and Enabling Simulation Range Checking)
Automatic scaling of fixedpoint data types
Note: Output minimum does not saturate or clip the actual output signal. Use the Saturation block instead. 
Parameter: OutMin 
Type: string 
Value: '[ ]' 
Default: '[ ]' 
Upper value of the output range that Simulink checks.
Default: []
(unspecified)
Specify this number as a finite, real, double, scalar value.
Simulink uses the maximum value to perform:
Parameter range checking (see Control Block Parameter Value Ranges) for some blocks
Simulation range checking (see Signal Ranges and Enabling Simulation Range Checking)
Automatic scaling of fixedpoint data types
Note: Output maximum does not saturate or clip the actual output signal. Use the Saturation block instead. 
Parameter: OutMax 
Type: string 
Value: '[ ]' 
Default: '[ ]' 
Specify the output data type.
Default: Inherit:
Inherit via internal rule
Inherit: Inherit via internal rule
Simulink chooses a data type to balance numerical accuracy, performance, and generated code size, while taking into account the properties of the embedded target hardware. If you change the embedded target settings, the data type selected by the internal rule might change. It is not always possible for the software to optimize code efficiency and numerical accuracy at the same time. If the internal rule doesn't meet your specific needs for numerical accuracy or performance, use one of the following options:
Specify the output data type explicitly.
Use the simple choice of Inherit: Same
as first input
.
Explicitly specify a default data type such as fixdt(1,32,16)
and
then use the FixedPoint Tool to propose data types for your model.
For more information, see fxptdlg
.
To specify your own inheritance rule, use Inherit:
Inherit via back propagation
and then use a Data Type Propagation block. Examples
of how to use this block are available in the Signal Attributes library Data
Type Propagation Examples block.
Inherit: Inherit via back propagation
Use data type of the driving block.
Inherit: Same as first input
Use data type of the first input signal.
double
Output data type is double
.
single
Output data type is single
.
int8
Output data type is int8
.
uint8
Output data type is uint8
.
int16
Output data type is int16
.
uint16
Output data type is uint16
.
int32
Output data type is int32
.
uint32
Output data type is uint32
.
fixdt(1,16,0)
Output data type is fixed point fixdt(1,16,0)
.
fixdt(1,16,2^0,0)
Output data type is fixed point fixdt(1,16,2^0,0)
.
<data type expression>
Use a data type object, for example, Simulink.NumericType
.
See BlockSpecific Parameters for the commandline information.
For more information, see Control Signal Data Types.
Display the Data Type Assistant.
The Data Type Assistant helps you set the Output data type parameter.
For more information, see Control Signal Data Types.
Select the category of data to specify.
Default: Inherit
Inherit
Inheritance rules for data types. Selecting Inherit
enables
a second menu/text box to the right. Select one of the following choices:
Inherit via internal rule
(default)
Inherit via back propagation
Same as first input
Built in
Builtin data types. Selecting Built in
enables
a second menu/text box to the right. Select one of the following choices:
double
(default)
single
int8
uint8
int16
uint16
int32
uint32
Fixed point
Fixedpoint data types.
Expression
Expressions that evaluate to data types. Selecting Expression
enables
a second menu/text box to the right, where you can enter the expression.
Clicking the Show data type assistant button enables this parameter.
See BlockSpecific Parameters for the commandline information.
See Specify Data Types Using Data Type Assistant.
Specify data type override mode for this signal.
Default: Inherit
Inherit
Inherits the data type override setting from its context, that
is, from the block, Simulink.Signal
object or Stateflow^{®} chart
in Simulink that is using the signal.
Off
Ignores the data type override setting of its context and uses the fixedpoint data type specified for the signal.
The ability to turn off data type override for an individual data type provides greater control over the data types in your model when you apply data type override. For example, you can use this option to ensure that data types meet the requirements of downstream blocks regardless of the data type override setting.
This parameter appears only when the Mode is Built
in
or Fixed point
.
Specify whether you want the fixedpoint data as signed or unsigned.
Default: Signed
Signed
Specify the fixedpoint data as signed.
Unsigned
Specify the fixedpoint data as unsigned.
Selecting Mode > Fixed
point
enables this parameter.
For more information, see Specifying a FixedPoint Data Type.
Specify the bit size of the word that holds the quantized integer.
Default: 16
Minimum: 0
Maximum: 32
Selecting Mode > Fixed
point
enables this parameter.
For more information, see Specifying a FixedPoint Data Type.
Specify the method for scaling your fixedpoint data to avoid overflow conditions and minimize quantization errors.
Default: Best
precision
Binary point
Specify binary point location.
Slope and bias
Enter slope and bias.
Best precision
Specify bestprecision values.
Selecting Mode > Fixed
point
enables this parameter.
Selecting Binary point
enables:
Fraction length
Calculate BestPrecision Scaling
Selecting Slope and bias
enables:
Slope
Bias
Calculate BestPrecision Scaling
For more information, see Specifying a FixedPoint Data Type.
Specify fraction length for fixedpoint data type.
Default: 0
Binary points can be positive or negative integers.
Selecting Scaling > Binary
point
enables this parameter.
For more information, see Specifying a FixedPoint Data Type.
Specify slope for the fixedpoint data type.
Default: 2^0
Specify any positive real number.
Selecting Scaling > Slope
and bias
enables this parameter.
For more information, see Specifying a FixedPoint Data Type.
Specify bias for the fixedpoint data type.
Default: 0
Specify any real number.
Selecting Scaling > Slope
and bias
enables this parameter.
For more information, see Specifying a FixedPoint Data Type.
Select to lock the output data type setting of this block against changes by the FixedPoint Tool and the FixedPoint Advisor.
Default: Off
Locks the output data type setting for this block.
Allows the FixedPoint Tool and the FixedPoint Advisor to change the output data type setting for this block.
Parameter: LockScale 
Type: string 
Value: 'off'  'on' 
Default: 'off' 
For more information, see Use Lock Output Data Type Setting.
Specify the rounding mode for fixedpoint operations.
Default: Floor
Ceiling
Rounds positive and negative numbers toward positive infinity.
Equivalent to the MATLAB^{®} ceil
function.
Convergent
Rounds number to the nearest representable value. If a tie occurs,
rounds to the nearest even integer. Equivalent to the FixedPoint Designer™ convergent
function.
Floor
Rounds positive and negative numbers toward negative infinity.
Equivalent to the MATLAB floor
function.
Nearest
Rounds number to the nearest representable value. If a tie occurs,
rounds toward positive infinity. Equivalent to the FixedPoint Designer nearest
function.
Round
Rounds number to the nearest representable value. If a tie occurs,
rounds positive numbers toward positive infinity and rounds negative
numbers toward negative infinity. Equivalent to the FixedPoint Designer round
function.
Simplest
Chooses between rounding toward floor and rounding toward zero to generate rounding code that is as efficient as possible.
Zero
Rounds number toward zero. Equivalent to the MATLAB fix
function.
See BlockSpecific Parameters for the commandline information.
For more information, see Rounding.
Specify whether overflows saturate.
Default: Off
Overflows saturate to either the minimum or maximum value that the data type can represent.
For example, an overflow associated with a signed 8bit integer can saturate to 128 or 127.
Overflows wrap to the appropriate value that the data type can represent.
For example, the number 130 does not fit in a signed 8bit integer and wraps to 126.
Consider selecting this check box when your model has a possible overflow and you want explicit saturation protection in the generated code.
Consider clearing this check box when you want to optimize efficiency of your generated code.
Clearing this check box also helps you to avoid overspecifying how a block handles outofrange signals. For more information, see Checking for Signal Range Errors.
When you select this check box, saturation applies to every internal operation on the block, not just the output or result.
In general, the code generation process can detect when overflow is not possible. In this case, the code generator does not produce saturation code.
Parameter: SaturateOnIntegerOverflow 
Type: string 
Value: 'off'  'on' 
Default: 'off' 
This table shows the output of the Product of Elements block for example inputs using default block parameter values, except as shown in the table.
Parameter Values  Examples 

Multiplication: Number
of inputs: 

Multiplication: Number
of inputs: 

Multiplication: Number
of inputs: 

Multiplication: Number
of inputs: Multiply
over: 

Multiplication: Number
of inputs: Multiply over: Dimension: 

Multiplication: Number
of inputs: Multiply
over: Dimension: 

Data Types  Double  Single  Boolean  Base Integer  FixedPoint 
Multidimensional Signals  Yes 
VariableSize Signals  Yes 
Code Generation  Yes 