Диаграммы Stateflow ® в моделях Simulink ® имеют свойство языка действий, которое определяет синтаксис, используемый для вычисления векторов и матриц. Свойства языка действий:
MATLAB ® в качестве языка действий.
C как язык действий.
Дополнительные сведения см. в разделе Различия между MATLAB и C как синтаксисом языка действий.
В диаграммах, использующих MATLAB в качестве языка действий, ссылаются на элементы вектора или матрицы, используя индексирование на основе одного элемента, разделенное скобками. Разделяйте индексы для различных измерений запятыми.
В диаграммах, использующих C в качестве языка действий, ссылаются на элементы вектора или матрицы, используя индексирование на основе нуля, ограниченное скобками. Заключить индексы для различных размеров в собственную пару кронштейнов.
| Пример | MATLAB как язык действий | C как язык действий |
|---|---|---|
Первый элемент вектора V | V(1) | V[0] |
i-й элемент вектора V | V(i) | V[i-1] |
Элемент в строке 4 и столбец 5 матрицы M | M(4,5) | M[3][4] |
Элемент в строке i и столбец j матрицы M | M(i,j) | M[i-1][j-1] |
Эта таблица суммирует интерпретацию всех двоичных операций над векторными и матричными операндами в соответствии с их порядком приоритета (1 = самый высокий, 3 = самый низкий). Бинарные операции остаются ассоциативными, так что в любом выражении операторы с одинаковым приоритетом вычисляются слева направо. За исключением матричных операторов умножения и деления в диаграммах, использующих MATLAB в качестве языка действий, все бинарные операторы выполняют операции по элементам.
Операция | Предшествование | MATLAB как язык действий | C как язык действий |
|---|---|---|---|
| 1 | Умножение матрицы. | Умножение по элементам. Для умножения матрицы используйте |
| 1 | Умножение по элементам. | Не поддерживается. Использовать операцию |
| 1 | Правое деление матрицы. | Правое деление на элементы. Для правого деления матрицы используйте |
| 1 | Правое деление на элементы. | Не поддерживается. Использовать операцию |
| 1 | Матрица левого деления. | Не поддерживается. Используйте |
| 1 | Левоэлементное деление. | Не поддерживается. Используйте |
| 2 | Дополнение. | Дополнение. |
| 2 | Вычитание. | Вычитание. |
| 3 | Сравнение, равно. | Сравнение, равно. |
| 3 | Сравнение, не равное. | Сравнение, не равное. |
| 3 | Не поддерживается. Использовать операцию | Сравнение, не равное. |
| 3 | Не поддерживается. Использовать операцию | Сравнение, не равное. |
Эта таблица суммирует интерпретацию всех унарных операций и действий над векторными и матричными операндами. Унарные операции:
Имеют более высокий приоритет, чем двоичные операторы.
Являются правыми ассоциативными, так что в любом выражении они вычисляются справа налево.
Выполнять операции по элементам.
Пример | MATLAB как язык действий | C как язык действий |
|---|---|---|
| Логический NOT. Для побитового NOT используйте |
Дополнительные сведения см. в разделах Bitwise Operations и Enable C-bit operations. |
| Не поддерживается. Использовать операцию | Логический NOT. |
| Отрицательный. | Отрицательный. |
| Не поддерживается. | Приращение всех элементов вектора или матрицы. Эквивалентно |
| Не поддерживается. | Уменьшение всех элементов вектора или матрицы. Эквивалентно |
Эта таблица суммирует интерпретацию операций назначения для векторных и матричных операндов.
Операция | MATLAB как язык действий | C как язык действий |
|---|---|---|
| Простое назначение. | Простое назначение. |
| Не поддерживается. Использовать выражение | Эквивалентно |
| Не поддерживается. Использовать выражение | Эквивалентно |
| Не поддерживается. Использовать выражение | Эквивалентно |
| Не поддерживается. Использовать выражение | Эквивалентно |
Можно назначить значение отдельной записи вектора или матрицы, используя синтаксис индексирования, соответствующий языку действий диаграммы.
| Пример | 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 | Результат |
|---|---|---|
| Скаляр | Скаляр | Скалярное расширение не происходит. |
| Скаляр | Вектор или матрица | Диаграмма создает ошибку несоответствия размеров. |
| Вектор или матрица | Скаляр | Диаграмма использует скалярное расширение для назначения скалярного выходного значения y[i][j] = f(u) |
| Вектор или матрица | Вектор или матрица | Диаграмма использует скалярное расширение для вычисления выходного значения для каждого элемента y[i][j] = f(u[i][j]) y и u не имеют одинакового размера, диаграмма создает ошибку несоответствия размеров. |
Для функций с несколькими выходами применяются одни и те же правила, если все выходы и входы не являются векторами или матрицами. В этом случае диаграмма генерирует ошибку несоответствия размеров, и скалярное расширение не происходит.
Диаграммы, использующие 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 в качестве языка действий, операции *, /, и \ выполнить стандартное умножение и деление матрицы. Эти операции можно использовать непосредственно в действиях состояния и перехода.