Документация Engee

Divide

Умножение и деление скаляров и нескаляров.

Divide

divide

Product

product

Product of Elements

product of elements

Описание

Блок Divide выводит результат умножения или деления входных сигналов.

Значок блока, выполняемая операция и количество портов меняются в зависимости от значения параметров Multiplication и Number of inputs.

В этой таблице показаны выходные данные блока Divide для примерных входных данных с использованием значений параметров блока:

  • Multiplication: Element-wise(.*)

  • Number of inputs: */

Входные данные Поведение блока

скаляр ÷ скаляр

Выводит результат деления первого входного скаляра на второй.

скаляр ÷ нескаляр

Выводит нескаляр, имеющий те же размеры, что и входной нескаляр. Каждый элемент выходного нескаляра является результатом деления входного скаляра на соответствующий элемент входного нескаляра.

нескаляр ÷ нескаляр

Выводит нескаляр, имеющий те же размеры, что и входные данные. Каждый элемент выходных данных является результатом деления элемента первого входного нескаляра на соответствующий элемент второго входного нескаляра.

Блок Divide может:

  • Численно умножать и делить любое количество скалярных, векторных или матричных входных данных.

  • Выполнять матричное умножение и деление на любом количестве матричных входных данных.

Блок Divide выполняет поэлементное или матричное умножение или деление, в зависимости от значения параметра Multiplication. Блок принимает один или несколько потоков входных данных, в зависимости от параметра Number of inputs. Параметр Number of inputs также определяет операцию, которую необходимо выполнить для каждого входа.

Входными данными для блока Divide может быть любая комбинация скаляров, векторов и матриц, для которых выполняемая операция имеет математически определенный результат. Блок выполняет указанные операции над входными данными, затем выводит результат.

Блок Divide имеет два режима:

  • Element-wise mode, который обрабатывает нескалярные входные данные поэлементно.

  • Matrix mode, который обрабатывает нескалярные входные данные в виде матриц.

Element-Wise Mode

Когда вы устанавливаете Multiplication на Element-wise(.*), блок Divide находится в режиме Element-wise mode, в котором он работает с отдельными числовыми элементами любых нескалярных входных данных. В режиме Element-wise mode блок Divide может выполнять различные операции умножения, деления и арифметической инверсии.

Значение параметра Number of inputs определяет как количество входных данных, так и то, будет ли каждый из них умножен или разделен для формирования выходных данных.

Когда блок Divide находится в режиме Element-wise mode и имеет только один вход, он работает так, как описано в разделе Алгоритмы.

Чтобы вычислить выходные данные, блок сначала расширяет все входы до единого размера (используя стандартный broadcast), а затем выполняет поэлементные действия.

В этой таблице показаны выходные данные блока Divide для примерных входных данных с использованием указанных значений для параметра Number of inputs.

Значения параметра Пример

Number of inputs: 2

pp two scalars

Number of inputs: */

pd two scalars

Number of inputs: /**/

dppd four scalars

Number of inputs: **

pp scalar vector

Number of inputs: */*

product pdp vsv

Matrix Mode

Когда значение параметра Multiplication равно Matrix(*), блок Divide находится в режиме Matrix mode, в котором он обрабатывает нескалярные входные данные в виде матриц. В этом режиме блок Divide может инвертировать одну квадратную матрицу или умножать и делить любое количество матриц, размеры которых определены математически.

Значение параметра Number of inputs определяет как количество существующих входных данных, так и то, будет ли каждая входная матрица умножена или разделена для формирования выходных данных. Синтаксис Number of inputs такой же, как и в Element-wise mode. Разница между режимами заключается в типе умножения и деления.

Взаимодействия между входами блока и режимами

Взаимодействия между входными данными блока Divide и его режимами Multiplication:

  • * или /

    Блок имеет один входной порт. В режиме Element-wise mode блок обрабатывает входные данные, как описано в разделе Алгоритмы. В режиме Matrix mode, если значение параметра равно 1 или *, блок выводит входное значение. Если значение равно /, входные данные должны быть квадратной матрицей (включая скаляр в качестве вырожденного случая), и блок выводит обратную матрицу. Дополнительные сведения см. в разделах Element-Wise Mode и Matrix Mode.

  • Целое значение > 1

    Блок имеет количество входных данных, заданное целочисленным значением. Входные данные умножаются вместе в режиме Element-wise mode или в режиме Matrix mode, как указано параметром Multiplication. Дополнительные сведения см. в разделах Element-Wise Mode и Matrix Mode.

  • Строка без кавычек, состоящая из двух или более символов * и /

    Блок имеет количество входных данных, заданное длиной символьного вектора. Каждый входной сигнал, соответствующий символу *, умножается на выходной сигнал. Каждый выходной сигнал, соответствующий символу /, делится на входной. Операции выполняются в режиме Element-wise mode или в режиме Matrix mode, как указано параметром Multiplication. Дополнительные сведения см. в разделах Element-Wise Mode и Matrix Mode.

Порты

Вход

x — входной сигнал для умножения
скаляр | вектор | матрица

Входной сигнал для умножения на другие входные сигналы.

Зависимости

Чтобы использовать один или несколько портов x, укажите один или несколько символов * для параметра Number of inputs и установите для параметра Multiplication значение Element-wise(.*).

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Fixed, Bool

Поддержка комплексных чисел: Да

÷ — входной сигнал для деления
скаляр | вектор | матрица

Входной сигнал для операций деления или инверсии.

Зависимости

Чтобы использовать один или несколько портов ÷, укажите один или несколько символов / для параметра Number of inputs и установите для параметра Multiplication значение Element-wise(.*).

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Fixed, Bool

Поддержка комплексных чисел: Да

* — входной сигнал для умножения
скаляр | вектор | матрица

Входной сигнал для умножения на другие входные сигналы.

Зависимости

Чтобы использовать один или несколько портов *, укажите один или несколько символов * для параметра Number of inputs и установите для параметра Multiplication значение Matrix(*).

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Fixed, Bool

Поддержка комплексных чисел: Да

Inv — входной сигнал для деления или инвертирования
скаляр | вектор | матрица

Входной сигнал для операций деления или инверсии.

Зависимости

Чтобы использовать один или несколько портов Inv, укажите один или несколько символов / для параметра Number of inputs и установите для параметра Multiplication значение Matrix(*).

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Fixed, Bool

Поддержка комплексных чисел: Да

Выход

Port_1 — выходной сигнал
скаляр | вектор | матрица

Выходной сигнал, вычисляемый путем умножения или деления входных сигналов.

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Bool, Fixed

Поддержка комплексных чисел: Да

Параметры

Main

Number of inputs — количество и названия входных портов и тип операции
*/ (по умолчанию)

Операции, выполняемые блоком: умножение или деление.

Когда вы указываете:

  • * или /*

Программное использование

Параметр блока

Inputs

Значения

*/ | целое значение >1 | ** | */ | */* |…​

По умолчанию

*/

Multiplication — тип умножения
Element-wise(.*) (по умолчанию) | Matrix(*)

Укажите, в каком режиме блок выполняет умножение или деление Element-wise(.*) или Matrix(*).

Дополнительные сведения см. в разделах Element-Wise Mode и Matrix Mode.

Программное использование

Параметр блока

Multiplication

Значения

Element-wise(.*) | Matrix(*)

По умолчанию

Element-wise(.*)

Signal Attributes

Output data type — тип выходных данных
Inherit: auto | Same as first input | Int8 | Int16 | Int32 | Int64 | Int128 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128 | Float16 | Float32 | Float64 | Bool | Fixed point

Укажите тип выходных данных. Тип может быть унаследован, указан напрямую или выражен как объект типа данных.

Программное использование

Параметр блока

OutDataTypeStr

Значение

Inherit: auto | Same as first input | Int8 | Int16 | Int32 | Int64 | Int128 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128 | Float16 | Float32 | Float64 | Bool | Fixed point

По умолчанию

Inherit: auto

Output fixed-point type – выходной тип чисел с фиксированной точкой
Fixed{Int16, 0} (по умолчанию) | описание типа данных с фиксированной точкой

Укажите выходной тип чисел с фиксированной точкой.

Зависимости

Включается, когда параметр Output data type установлен в значение Fixed point.

Программное использование

Параметр блока

OutputDataTypeStrFixed

Значение

валидное описание типа с фиксированной точкой

По умолчанию

Fixed{Int16, 0}

Integer rounding mode — режим округления для операций с фиксированной точкой
Floor (по умолчанию) | Ceiling | Convergent | Nearest | Round | Zero

Выберите режим округления для операций с фиксированной точкой. Вы можете выбрать:

  • Floor — округляет как положительные, так и отрицательные числа в меньшую сторону (в сторону отрицательной бесконечности).

  • Ceiling — округляет как положительные, так и отрицательные числа в большую сторону (в сторону положительной бесконечности).

  • Convergent — округляет число до ближайшего представимого значения. В случае если дробная часть числа оканчивается на 5, число округляется до ближайшего четного целого числа.

  • Nearest — округляет число до ближайшего представимого значения. В случае если дробная часть числа оканчивается на 5, число округляется в большую сторону (в сторону положительной бесконечности).

  • Round — округляет число до ближайшего представимого значения. В случае если дробная часть числа оканчивается на 5, положительные числа округляются в большую сторону (в сторону положительной бесконечности), а отрицательные – в меньшую (в сторону отрицательной бесконечности).

  • Zero — округляет число в сторону нуля.

Параметры блока всегда округляют до ближайшего представимого значения.

Программное использование

Параметр блока

RndMeth

Значения

Ceiling | Convergent | Floor | Nearest | Round | Zero

По умолчанию

Floor

Saturate on integer overflow — насыщение до целого при переполнении
выключено (по умолчанию) | включено

Флажок, при установке которого используется арифметика насыщения для целых чисел и чисел с фиксированной точкой: при переполнении результат автоматически заменяется максимально возможным (по модулю) для типа данных значением.

Действие Обоснование Влияние на переполнение Пример

Флажок Saturate on integer overflow установлен (включен).

Для вашей модели возможно переполнение, и вы хотите, чтобы в сгенерированном коде была явная защита от переполнения.

При переполнении результат автоматически заменяется максимально возможным (по модулю) для типа данных значением.

Максимальное значение, которое может представлять тип данных Int8 (знаковое, 8-битное целое), равно 127.

Любой результат операции с блоком, превышающий это максимальное значение, приводит к переполнению 8-битного целого числа. При установленном флажке выходной сигнал блока насыщается до 127. Аналогично, выходной сигнал блока насыщается при минимальном выходном значении -128.

Флажок Saturate on integer overflow не установлен (выключен).

Вы хотите оптимизировать эффективность вашего сгенерированного кода.

Вы хотите избежать чрезмерного определения того, как блок обрабатывает сигналы, находящиеся вне диапазона.

Переполнения переносятся в соответствующее значение, которое может быть представлено типом данных.

Максимальное значение, которое может представлять тип данных Int8 (знаковое, 8-битное целое), равно 127.

Любой результат операции с блоком, превышающий это максимальное значение, приводит к переполнению 8-битного целого числа. Если флажок снят, программное обеспечение интерпретирует значение, вызывающее переполнение, как Int8, что может привести к непреднамеренному результату. Например, результат блока 130 (двоичный код 1000 0010), выраженный как Int8, равен -126.

Когда вы устанавливаете этот флажок, насыщение применяется ко всем внутренним операциям в блоке, а не только к входным/выходным данным или результату.

Когда тип входных данных блока является типом с плавающей точкой, блок игнорирует этот параметр.

Программное использование

Параметр блока

SaturateOnIntegerOverflow

Значения

выключено | включено

По умолчанию

выключено

Require all inputs to have the same data type — режим одинакового типа данных для всех входов
выключено (по умолчанию) | включено

Установите этот флажок, чтобы задать одинаковый тип данных для всех входных портов.

Алгоритмы

Блок Divide с одним входом в режиме Element-Wise использует представленные ниже алгоритмы для выполнения поэлементных операций над входными данными:

Входные данные Поэлементная операция Алгоритм

Действительный скаляр,

Умножение

Деление

Действительный вектор или матрица с элементами,

Умножение

Деление

Комплексный скаляр,

Умножение

Деление

Комплексный вектор или матрица с элементами,

Умножение

Деление

Дополнительные возможности

Генерация Си кода: Да

Примеры