Работа с simscape.Value и simscape.Unit Объекты

В физическом моделировании параметры блоков, переменные и физические сигналы представлены как значение со связанным модулем. Директор производства Simscape™ автоматически выполняет необходимые модульные операции преобразования при решении физической сети. simscape.Value и simscape.Unit объекты по существу реализуют MATLAB® интерфейс, который реплицирует функциональность директора производства за пределами Simscape:

  • simscape.Value связывает массивы арифметических значений к модулям и распространяет те модули посредством математических операций. У всех членов массива должен быть тот же модуль.

  • simscape.Unit представляет единицы измерения без присваиваемого значения, и поэтому позволяет вам записать функции MATLAB, которые эмулируют модульное поведение распространения.

Используйте simscape.Value и simscape.Unit к:

  • Предварительно обработайте или постобработайте данные моделирования с модулями в MATLAB, например, вычислите общую жидкую массу или постройте динамику аппарата.

  • Создайте стоимость с модульными объектами в MATLAB и управляйте ими во время программируемой типовой конструкции.

  • Запишите функции MATLAB, которые работают со значениями с модулями.

Например, эта функция вычисляет мудрое страницей умножение матриц при распространении модулей:

function out = mypagemtimes(a, b)
  out = simscape.Value(pagemtimes(value(a),value(b)),unit(a)*unit(b));
end

Функция:

  • Берет два simscape.Value объекты, a и b, в качестве аргументов.

  • Значения извлечений от a и b.

  • Использует MATLAB pagemtimes функция на этих извлеченных значениях.

  • Использует simscape.Unit объекты вычислить производную единицу.

  • Повторно прикрепляет новый модуль к вычисленному массиву значений и возвращает получившийся simscape.Value объект.

Базовые функции MATLAB, поддерживающие simscape.Value Массивы

Можно использовать базовые функции массива MATLAB при работе с simscape.Value массивы. Таблицы приводят дополнительные ограничения, которые принадлежат использованию simscape.Value аргументы.

simscape.Value Математические функции

ИмяОписание
absАбсолютное значение
acosОбратный косинус
asinОбратный синус
atanОбратный тангенс
atan2Обратный тангенс с четырьмя квадрантами
cosКосинус
coshГиперболический косинус
crossВекторное произведение
diffРазличие
dotСкалярное произведение
expЭкспоненциал
logНатуральный логарифм
log10Распространенный (базируются 10), логарифм
maxМаксимальные элементы массива
minМинимальные элементы массива
modМодуль после деления
prodПродукт элементов
signСигнум-функция
sinСинус
sinhГиперболический синус
sqrtКвадратный корень
sumСумма элементов
tanТангенс
tanhГиперболический тангенс

simscape.Value Операции

ИмяОписание
+ (plus), - (minus)Унарный и бинарный плюс и минус
* (mtimes), .* (times)Умножение
/ (mrdivide), \ (mldivide), ./ (rdivide), .\ (ldivide)Деление
== (eq), ~= (ne), < (lt), <= (le), > (gt), >= (ge)Реляционный
^ (mpower), .^ (power)Степень

simscape.Value Контроль

ИмяОписание
isequalСравнивает два simscape.Value объекты. Возвращает 1 если оба массива одного размера, содержат те же значения и имеют тот же модуль и 0 в противном случае.
isequalnСравнивает два simscape.Value объекты, обрабатывая элементы NaN как равные друг другу. Возвращает true, если оба массива одного размера, содержат те же значения и имеют тот же модуль и 0 в противном случае.
isfiniteВозвращает 1 для конечных элементов массива и 0 в противном случае.
isinfВозвращает 1 для бесконечных элементов массива и 0 в противном случае.
isnanВозвращает 1 для элементов массива NaN и 0 в противном случае.

simscape.Value Преобразования типов

ИмяОписание
double

Для безразмерного аргумента только, преобразует элементы массива в двойную точность. Безразмерные величины неявно преобразованы в безразмерный перед преобразованием, чтобы удвоиться. Например:

double(simscape.Value(1,'m')/simscape.Value(2,'cm'))
ans =

    50
logical

Преобразует числовые значения в logicals. Поддерживаемый для simscape.Value объекты с неаффинными модулями. Нулевые значения, независимо от линейного модуля, обработаны, как ложные и ненулевые значения обработаны как верные.

Базовые функции MATLAB, поддерживающие simscape.Unit Массивы

Основное умножение, деление, степень и реляционные операции заданы на simscape.Unit. Таблица приводит дополнительные ограничения, которые принадлежат использованию simscape.Unit аргументы.

simscape.Unit Арифметические и реляционные операции

ИмяОписание
timesПоэлементные модульные продукты
mtimesМатричные модульные продукты
rdivide, ldivideПоэлементные модульные частные
mrdivide, mldivideМатричные модульные частные. Поддерживаемый, но знаменатель должен быть скалярный simscape.Unit объект.
powerПоэлементная степень. Основой должен быть simscape.Unit объект. Экспонента должна быть совместимо размерным числовым массивом. См. также Дробные и Рациональные Экспоненты.
mpowerМатричная степень. Поддерживаемый, но требует, чтобы основа и экспонента были скаляром.
eq, neОпределите равенство или неравенство. Сравнивает модули в канонической форме.
isequalОпределите равенство массивов. Верный, если модульные массивы одного размера и все модули эквивалентны.

simscape.Unit Преобразования типов

ИмяОписание
string

Преобразует каждый элемент модульного массива в строку. Возвращает массив строк.

cellstr

Преобразует модульный массив в массив ячеек из символьных векторов.

charПреобразует модульный массив в символьный массив.

Например, создайте 2x3 модульный массив:

u1 = simscape.Unit(["kg", "g", "lb"; "km", "m", "mm"])
u1 = 

    2×3 unit array

    kg    g    lb
    km    m    mm

Преобразуйте модульный массив в массив строк:

string(u1)
ans = 

  2×3 string array

    "kg"    "g"    "lb"
    "km"    "m"    "mm"

Преобразуйте тот же модульный массив в массив ячеек из символьных векторов:

cellstr(u1)
ans =

  2×3 cell array

    {'kg'}    {'g'}    {'lb'}
    {'km'}    {'m'}    {'mm'}

Преобразуйте тот же модульный массив в символьный массив:

char(u1)
ans =

  6×2 char array

    'kg'
    'km'
    'g '
    'm '
    'lb'
    'mm'

Вычислительные модули

Когда математическая операция, такая как сложение, требует вычислительного модуля, модуль возврата является модулем операнда, коэффициент преобразования которого к основной единице является самым большим. Например:

simscape.Value(2.2,'cm') + simscape.Value(2,'mm')
ans =

    2.4000 : cm

Основной единицей для длины является m. Коэффициент преобразования cm в m больше, чем тот из mm в m, поэтому, модуль возврата при добавлении cm и mm cm.

Умножение и операции деления не требуют вычислительного модуля. Эти операции выполняются путем умножения (деление) значений и умножение (деления) модулей. Например:

simscape.Value(2.2,'N') * simscape.Value(2,'m')
ans =

    4.4000 : N*m

Дробные и рациональные экспоненты

Дробные показатели поддерживаются для simscape.Value объекты. Числовое значение повышено до double питание, заданное функцией и рациональным приближением дробного показателя, подано к модулям.

Для simscape.Unit объекты, экспоненты должны быть рациональными числами. Когда вычислительные модульные степени, simscape.Unit использует то же рациональное дробное приближение в качестве MATLAB rat функция.

Операции с аффинными модулями

simscape.Value объекты могут иметь аффинные модули. Для получения дополнительной информации займитесь Аффинными Модулями.

Следующие операции запрещаются на значениях с аффинным модулем:

  • Формирование составных модулей, которые включают аффинные модули.

  • Основные операции над массивами, которые требуют модульного преобразования.

  • Неявное или явное сравнение с 0.

Ограничения

  • Прямая параметризация блока не поддерживается, то есть, вы не можете использовать simscape.Value или simscape.Unit объекты непосредственно, чтобы задать параметры блоков. Можно использовать эти объекты только во время программируемой типовой конструкции.

    Например, чтобы программно установить параметры блоков на основе simscape.Value объект:

    x = simscape.Value(V, U);
    set_param(block, 'x', mat2str(value(x)));
    set_param(block, 'x_unit', char(unit(x)));
    
  • Вы не можете использовать simscape.Value или simscape.Unit объекты задать значения с модулями или выполнить модульные расчеты в Symbolic Math Toolbox™.

  • MATLAB Coder™ не поддерживает simscape.Value и simscape.Unit объекты.