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

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

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

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

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

Индексирование обозначения

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

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

Пример

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

C как язык действий
Первый элемент массива вектора VV(1)V[0]
The ith Элемент массива вектора 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 функция.

  • Bitwise NOT (по умолчанию). Включите эту операцию, выбрав свойство Enable C-bit operations chart.

  • Логический NOT. Включите эту операцию, очистив свойство Enable C-bit operations chart.

Для получения дополнительной информации см. 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 в качестве языка действий, можно использовать scalar expansion, чтобы задать всем элементам массива вектора или матрицы одно и то же значение. Скалярное расширение преобразует скалярные данные, чтобы соответствовать размерностям вектора или матричных данных. Для примера это действие устанавливает все элементы матрицы 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.

Чтобы выполнить эти вычисления в графике С, добавьте функцию 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
Перед вызовом функции задайте свойства для входных и выходных данных, как описано в Set Data Properties.

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

Похожие темы