exponenta event banner

Поддерживаемые операции для векторов и матриц

Диаграммы Stateflow ® в моделях Simulink ® имеют свойство языка действий, которое определяет синтаксис, используемый для вычисления векторов и матриц. Свойства языка действий:

  • MATLAB ® в качестве языка действий.

  • C как язык действий.

Дополнительные сведения см. в разделе Различия между MATLAB и C как синтаксисом языка действий.

Индексирование нотации

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

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

Пример

MATLAB как язык действий

C как язык действий
Первый элемент вектора VV(1)V[0]
i элемент вектора VV(i)V[i-1]
Элемент в строке 4 и столбец 5 матрицы MM(4,5)M[3][4]
Элемент в строке i и столбец j матрицы MM(i,j)M[i-1][j-1]

Двоичные операции

Эта таблица суммирует интерпретацию всех двоичных операций над векторными и матричными операндами в соответствии с их порядком приоритета (1 = самый высокий, 3 = самый низкий). Бинарные операции остаются ассоциативными, так что в любом выражении операторы с одинаковым приоритетом вычисляются слева направо. За исключением матричных операторов умножения и деления в диаграммах, использующих MATLAB в качестве языка действий, все бинарные операторы выполняют операции по элементам.

Операция

Предшествование

MATLAB как язык действий

C как язык действий

a * b

1

Умножение матрицы.

Умножение по элементам. Для умножения матрицы используйте * в функции MATLAB. См. раздел Выполнение матричной арифметики с использованием функций MATLAB.

a .* b

1

Умножение по элементам.

Не поддерживается. Использовать операцию a * b.

a / b

1

Правое деление матрицы.

Правое деление на элементы. Для правого деления матрицы используйте / в функции MATLAB. См. раздел Выполнение матричной арифметики с использованием функций MATLAB.

a ./ b

1

Правое деление на элементы.

Не поддерживается. Использовать операцию a / b.

a \ b

1

Матрица левого деления.

Не поддерживается. Используйте \ в функции MATLAB. См. раздел Выполнение матричной арифметики с использованием функций MATLAB.

a .\ b

1

Левоэлементное деление.

Не поддерживается. Используйте .\ в функции MATLAB. См. раздел Выполнение матричной арифметики с использованием функций MATLAB.

a + b

2

Дополнение.

Дополнение.

a - b

2

Вычитание.

Вычитание.

a == b

3

Сравнение, равно.

Сравнение, равно.

a ~= b

3

Сравнение, не равное.

Сравнение, не равное.

a != b

3

Не поддерживается. Использовать операцию a ~= b.

Сравнение, не равное.

a <> b

3

Не поддерживается. Использовать операцию a ~= b.

Сравнение, не равное.

Унарные операции и действия

Эта таблица суммирует интерпретацию всех унарных операций и действий над векторными и матричными операндами. Унарные операции:

  • Имеют более высокий приоритет, чем двоичные операторы.

  • Являются правыми ассоциативными, так что в любом выражении они вычисляются справа налево.

  • Выполнять операции по элементам.

Пример

MATLAB как язык действий

C как язык действий

~a

Логический NOT. Для побитового NOT используйте bitcmp функция.

  • Побитовый НЕТ (по умолчанию). Включите эту операцию, выбрав свойство Включить диаграмму C-разрядных операций.

  • Логический NOT. Включите эту операцию, очистив свойство Включить диаграмму C-разрядных операций.

Дополнительные сведения см. в разделах Bitwise Operations и Enable C-bit operations.

!a

Не поддерживается. Использовать операцию ~a.

Логический NOT.

-a

Отрицательный.

Отрицательный.

a++

Не поддерживается.

Приращение всех элементов вектора или матрицы. Эквивалентно a = a+1.

a--

Не поддерживается.

Уменьшение всех элементов вектора или матрицы. Эквивалентно a = a-1.

Операции назначения

Эта таблица суммирует интерпретацию операций назначения для векторных и матричных операндов.

Операция

MATLAB как язык действий

C как язык действий

a = b

Простое назначение.

Простое назначение.

a += b

Не поддерживается. Использовать выражение a = a+b.

Эквивалентно a = a+b.

a -= b

Не поддерживается. Использовать выражение a = a-b.

Эквивалентно a = a-b.

a *= b

Не поддерживается. Использовать выражение a = a*b.

Эквивалентно a = a*b.

a /= b

Не поддерживается. Использовать выражение a = a/b.

Эквивалентно a = a/b.

Присвоение значений отдельным элементам матрицы

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

Пример

MATLAB как язык действий

C как язык действий
Присвоение значения 10 к первому элементу вектора V.V(1) = 10;V[0] = 10;
Присвойте значение 77 элементу в строке 2 и столбце 9 матрицы M.M(2,9) = 77;M[1][8] = 77;

Присвоение значений всем элементам матрицы

В диаграммах, использующих MATLAB в качестве языка действий, можно использовать одно действие для указания всех элементов вектора или матрицы. Например, это действие назначает каждый элемент матрицы 2 на 3 A для другого значения:

A = [1 2 3; 4 5 6];

В диаграммах, использующих C в качестве языка действий, можно использовать скалярное расширение, чтобы задать одинаковое значение для всех элементов вектора или матрицы. Скалярное расширение преобразует скалярные данные в соответствии с размерами векторных или матричных данных. Например, это действие задает все элементы матрицы A кому 10:

A = 10;

Скалярное расширение применяется ко всем графическим функциям, таблицам истинности, MATLAB и Simulink. Предположим, что формальные аргументы функции определены f как скаляры. В этой таблице описаны правила скалярного расширения для вызова функции y = f(u).

Продукция yВход uРезультат
СкалярСкалярСкалярное расширение не происходит.
СкалярВектор или матрицаДиаграмма создает ошибку несоответствия размеров.
Вектор или матрицаСкаляр

Диаграмма использует скалярное расширение для назначения скалярного выходного значения f(u) каждому элементу y:

y[i][j] = f(u)

Вектор или матрицаВектор или матрица

Диаграмма использует скалярное расширение для вычисления выходного значения для каждого элемента u и присвоить его соответствующему элементу y:

y[i][j] = f(u[i][j])
Если y и u не имеют одинакового размера, диаграмма создает ошибку несоответствия размеров.

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

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

Выполнение матричной арифметики с помощью функций MATLAB

В диаграммах, использующих C в качестве языка действий, операции * и / выполняют элементное умножение и деление. Для выполнения стандартного умножения и деления матрицы на диаграмме C используется функция MATLAB.

Предположим, что необходимо выполнить эти операции с квадратными матрицами u1 и u2:

  • Вычисление стандартного матричного продукта y1 = u1 * u2.

  • Решить уравнение u1 * y2 = u2.

  • Решить уравнение y3 * u1 = u2.

Чтобы выполнить эти вычисления на диаграмме C, добавьте функцию MATLAB, выполняющую этот код:

function [y1, y2, y3] = my_matrix_ops(u1, u2)
%#codegen

y1 = u1 * u2;  % matrix multiplication
y2 = u1 \ u2;  % matrix division from the right
y3 = u1 / u2;  % matrix division from the left
Перед вызовом функции укажите свойства входных и выходных данных, как описано в разделе Задать свойства данных.

В диаграммах, использующих MATLAB в качестве языка действий, операции *, /, и \ выполнить стандартное умножение и деление матрицы. Эти операции можно использовать непосредственно в действиях состояния и перехода.

Связанные темы