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