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

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

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

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

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

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

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

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

Пример

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

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

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

  • Битовое "НЕ" (значение по умолчанию). Включите эту операцию путем выбора Разрешения свойства диаграммы операций C-bit.

  • Логический НЕТ. Включите эту операцию путем очистки Разрешения свойства диаграммы операций C-bit.

Для получения дополнительной информации смотрите Битовые операции и Включите операции C-bit.

!a

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

Логический НЕТ.

-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.

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

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

Похожие темы