Stateflow® графики в Simulink® модели имеют свойство языка действий, которое задает синтаксис, который вы используете для вычисления с векторами и матрицами. Свойства языка действий:
MATLAB® как язык действий.
C как язык действия.
Для получения дополнительной информации смотрите Различия между MATLAB и C как синтаксис языка действий.
В графиках, которые используют MATLAB в качестве языка действий, обратитесь к элементам массива вектора или матрицы с помощью основанного на одном индексировании, разделенном круглыми скобками. Разделите индексы для различных размерностей запятыми.
В графиках, которые используют C в качестве языка действий, обратитесь к элементам массива вектора или матрицы с помощью основанной на нуле индексации, разделенной скобками. Заключайте индексы для различных размерностей в свою собственную пару скобок.
Пример | MATLAB как язык действий | C как язык действий |
---|---|---|
Первый элемент массива вектора V | V(1) | V[0] |
The i th Элемент массива вектора 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 в качестве языка действий, можно использовать scalar expansion, чтобы задать всем элементам массива вектора или матрицы одно и то же значение. Скалярное расширение преобразует скалярные данные, чтобы соответствовать размерностям вектора или матричных данных. Для примера это действие устанавливает все элементы матрицы 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
.
Чтобы выполнить эти вычисления в графике С, добавьте функцию 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 в качестве языка действий, операции *
, /
, и \
выполните стандартное матричное умножение и деление. Можно использовать эти операции непосредственно в состоянии и переходах.