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

Divide

Выполняет умножение и деление скаляров и нескаляров.

Тип: Product

Divide

Путь в библиотеке:

/Basic/Math Operations/Divide

Product

Путь в библиотеке:

/Basic/Math Operations/Product

Product of Elements

Путь в библиотеке:

/Basic/Math Operations/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(.*) — обрабатывает нескалярные входные данные поэлементно.

  • Matrix(*) — обрабатывает нескалярные входные данные в виде матриц.

Поэлементный режим

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

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

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

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

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

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

Number of inputs: 2

divide 1

Number of inputs: */

divide 2

Number of inputs: /**/

divide 3

Number of inputs: **

divide 4

Number of inputs: */*

divide 5

Матричный режим

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

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

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

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

  • В параметре Number of inputs заданы значения 1, * или /.

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

  • В параметре Number of inputs задано целое значение > 1

    Блок имеет количество входных данных, заданное целочисленным значением. Входные данные умножаются вместе в режиме Element-wise(.*) или в режиме Matrix(*), как указано параметром Multiplication. Дополнительные сведения см. в разделах Поэлементный режим и Матричный режим.

  • В параметре Number of inputs задана строка без кавычек, состоящая из двух или более символов * и /

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

Порты

Выход

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

Details

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

Типы данных

Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Bool, Fixed

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

Да

Вход

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

Details

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

Зависимости

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

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

Типы данных

Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Fixed, Bool

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

Да

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

Details

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

Зависимости

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

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

Типы данных

Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Fixed, Bool

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

Да

Параметры

Основные

# Number of inputs — количество и названия входных портов и тип операции

Details

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

Значение по умолчанию

Имя для программного использования

Inputs

Настраиваемый

Нет

Вычисляемый

Да

# Multiplication — тип умножения
Element-wise(.) | Matrix()

Details

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

Дополнительные сведения см. в разделах Поэлементный режим и Матричный режим.

Значения

Element-wise(.) | Matrix()

Значение по умолчанию

Element-wise(.*)

Имя для программного использования

Multiplication

Настраиваемый

Нет

Вычисляемый

Нет

Настройки выхода

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

Details

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

Значения

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

Значение по умолчанию

Inherit: auto

Имя для программного использования

OutDataTypeStr

Настраиваемый

Нет

Вычисляемый

Нет

# Output fixed-point type — тип выходных данных с фиксированной точкой
Data type

Details

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

Зависимости

Чтобы использовать этот параметр, установите для параметра Output data type значение Fixed-point.

Значение по умолчанию

fixdt(1, 16, 0)

Имя для программного использования

OutDataTypeStrFixed

Настраиваемый

Нет

Вычисляемый

Да

Основные

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

Details

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

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

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

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

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

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

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

Значения

Ceiling | Convergent | Floor | Nearest | Round | Zero

Значение по умолчанию

Floor

Имя для программного использования

RndMeth

Настраиваемый

Нет

Вычисляемый

Нет

# Saturate on integer overflow — метод действия при переполнении
Logical

Details

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

Действие Причины для принятия этого решения Что происходит при переполнении Пример

Установите этот флажок.

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

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

Переполнение, связанное со знаковым 8-битным целым числом, может насытиться до -128 или 127.

Не устанавливайте этот флажок.

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

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

Число 130 не помещается в знаковое 8-битное целое число и сворачивается в -126

Значение по умолчанию

false (выключено)

Имя для программного использования

SaturateOnIntegerOverflow

Настраиваемый

Нет

Вычисляемый

Нет

# Require all inputs to have the same data type — режим одинакового типа данных для всех входов
Logical

Details

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

Значение по умолчанию

false (выключено)

Имя для программного использования

InputSameDT

Настраиваемый

Нет

Вычисляемый

Нет

Алгоритмы

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

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

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

Умножение

Деление

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

Умножение

Деление

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

Умножение

Деление

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

Умножение

Деление

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

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

Примеры