Используйте единицы измерения с символьными математическими Toolbox™. На этой странице показано, как определять единицы измерения, использовать единицы измерения в уравнениях (включая дифференциальные уравнения) и проверять размеры выражений.
Загрузить единицы измерения с помощью symunit.
u = symunit;
Укажите единицу измерения с помощью u.unit. Например, укажите расстояние, равное 5 метров, вес 50 килограммы и скорость 10 километров в час. В отображаемых выходных данных единицы измерения заключены в квадратные скобки [].
d = 5*u.m w = 50*u.kg s = 10*u.km/u.hr
d = 5*[m] w = 50*[kg] s = 10*([km]/[h])
Совет
Используйте расширение вкладки для поиска имен единиц измерения. Напечатать u., нажмите клавишу TAB и продолжите ввод текста.
Единицы измерения обрабатываются как другие символьные выражения и могут использоваться в любой стандартной операции или функции. Единицы измерения не упрощаются автоматически, что обеспечивает гибкость. Поддерживаются общие альтернативные имена единиц измерения. Множественные числа не поддерживаются.
Добавить 500 счетчики и 2 километров. Полученное расстояние не упрощается автоматически.
d = 500*u.m + 2*u.km
d = 2*[km] + 500*[m]
Упростить d с помощью simplify. simplify функция автоматически выбирает единицу измерения для упрощения.
d = simplify(d)
d = (5/2)*[km]
Вместо автоматического выбора единицы измерения преобразуйте d к определенной единице измерения с помощью unitConvert. Новообращенный d до метров.
d = unitConvert(d,u.m)
d = 2500*[m]
Существуют дополнительные параметры преобразования единиц измерения и системы единиц измерения. См. раздел Преобразования единиц измерения и системы единиц измерения.
Найти скорость, если расстояние d пересекается в 50 секунд. Результат имеет правильные единицы измерения.
t = 50*u.s; s = d/t
s = 50*([m]/[s])
По умолчанию предполагается, что температуры представляют собой различия, а не абсолютные измерения. Например, 5*u.Celsius Предполагается, что разность температур составляет 5 градусов Цельсия. Это предположение допускает арифметические операции со значениями температуры.
Для представления абсолютных температур используйте кельвин, чтобы не отличать абсолютную температуру от разности температур.
Новообращенный 23 градусы Цельсия до кельвина, рассматривая его сначала как разность температур, а затем как абсолютную температуру.
u = symunit; T = 23*u.Celsius; diffK = unitConvert(T,u.K)
diffK = 23*[K]
absK = unitConvert(T,u.K,'Temperature','absolute')
absK = (5923/20)*[K]
В более длинных выражениях визуальная проверка единиц затруднена. Размеры выражений можно проверять автоматически, проверяя размеры уравнения.
Сначала определите кинематическое уравнение 2as, гдеv представляет собой скорость, a представляет ускорение, и s представляет расстояние. Принять s в километрах, а все остальные единицы находятся в базовых единицах СИ. Для демонстрации проверки размеров, единицы измерения a намеренно неверны.
syms v v0 a s u = symunit; eqn = (v*u.m/u.s)^2 == (v0*u.m/u.s)^2 + 2*a*u.m/u.s*s*u.km
eqn = v^2*([m]^2/[s]^2) == v0^2*([m]^2/[s]^2) + (2*a*s)*(([km]*[m])/[s])
Наблюдайте за единицами измерения, которые появляются в eqn с помощью findUnits. Возвращаемые единицы показывают, что для представления расстояния используются и километры, и метры.
findUnits(eqn)
ans = [ [km], [m], [s]]
Проверьте, имеют ли единицы измерения одинаковые размеры (например, длину или время), используя checkUnits с 'Compatible' вход. MATLAB ® предполагает, что символьные переменные безразмерны .checkUnits возвращает логический 0 (false), что означает, что единицы измерения несовместимы и не имеют одинаковых физических размеров.
checkUnits(eqn,'Compatible')
ans = logical 0
Взгляд на eqn, ускорение a имеет неверные единицы измерения. Исправьте блоки и повторите проверку на совместимость. eqn теперь имеет совместимые блоки.
eqn = (v*u.m/u.s)^2 == (v0*u.m/u.s)^2 + 2*a*u.m/u.s^2*s*u.km; checkUnits(eqn,'Compatible')
ans = logical 1
Теперь, чтобы проверить, что каждый размер последовательно представлен одной и той же единицей измерения, используйте checkUnits с 'Consistent' вход. checkUnits возвращает логический 0 (false), потому что метры и километры используются для представления расстояния в eqn.
checkUnits(eqn,'Consistent')
ans = logical 0
Новообращенный eqn к базовым единицам СИ для обеспечения согласованности единиц измерения. Управляемый checkUnits снова. eqn имеет совместимые и согласованные единицы измерения.
eqn = unitConvert(eqn,'SI')
eqn = v^2*([m]^2/[s]^2) == v0^2*([m]^2/[s]^2) + (2000*a*s)*([m]^2/[s]^2)
checkUnits(eqn)
ans =
struct with fields:
Consistent: 1
Compatible: 1После завершения работы с единицами измерения и только без размерного уравнения или выражения разделите единицы измерения и уравнение с помощью separateUnits.
[eqn,units] = separateUnits(eqn)
eqn = v^2 == v0^2 + 2000*a*s units = 1*([m]^2/[s]^2)
Можно вернуть исходное уравнение с единицами измерения путем умножения eqn с units и расширение результата.
expand(eqn*units)
ans = v^2*([m]^2/[s]^2) == v0^2*([m]^2/[s]^2) + (2000*a*s)*([m]^2/[s]^2)
Чтобы вычислить числовые значения из выражения, замените символьные переменные с помощью subsи преобразовать в числовые значения с помощью double или vpa.
Решить eqn для v. Затем найдите значение v где v0 = 5, a = 2.5, и s = 10. Преобразуйте результат в двойной.
v = solve(eqn,v); v = v(2); % choose the positive solution vSol = subs(v,[v0 a s],[5 2.5 10]); vSol = double(vSol)
vSol = 223.6627
Используйте единицы измерения в дифференциальных уравнениях так же, как в стандартных уравнениях. В этом разделе показано, как использовать единицы измерения в дифференциальных уравнениях путем получения соотношений скоростей v = v0 + at и 2as, начиная с определения = dvdt.
Представление определения ускорения символически с использованием единиц СИ. Учитывая, что скорость V имеет единицы измерения, V должны быть дифференцированы в отношении правильных единиц T = t*u.s и не только t.
syms V(t) a u = symunit; T = t*u.s; % time in seconds A = a*u.m/u.s^2; % acceleration in meters per second eqn1 = A == diff(V,T)
eqn1(t) = a*([m]/[s]^2) == diff(V(t), t)*(1/[s])
Потому что скорость V неизвестен и не имеет единиц измерения, eqn1 имеет несовместимые и несогласованные единицы измерения.
checkUnits(eqn1)
ans =
struct with fields:
Consistent: 0
Compatible: 0Решить eqn1 для V при условии, что начальная скорость равна v0. Результатом является уравнение v (t ) = v0 + at.
syms v0 cond = V(0) == v0*u.m/u.s; eqn2 = V == dsolve(eqn1,cond)
eqn2(t) = V(t) == v0*([m]/[s]) + a*t*([m]/[s])
Проверьте, что результат имеет правильные размеры путем замены rhs(eqn2) в eqn1 и использование checkUnits.
checkUnits(subs(eqn1,V,rhs(eqn2)))
ans =
struct with fields:
Consistent: 1
Compatible: 1Теперь выведите 2as. Поскольку скорость - это скорость изменения расстояния, заменитеV с производной расстояния S. Опять же, учитывая, что S имеет единицы измерения, S должны быть дифференцированы в отношении правильных единиц T = t*u.s и не только t.
syms S(t) eqn2 = subs(eqn2,V,diff(S,T))
eqn2(t) = diff(S(t), t)*(1/[s]) == v0*([m]/[s]) + a*t*([m]/[s])
Решить eqn2 с условием, что начальное пройденное расстояние 0. Получить ожидаемую форму S с помощью expand.
cond2 = S(0) == 0; eqn3 = S == dsolve(eqn2,cond2); eqn3 = expand(eqn3)
eqn3(t) = S(t) == t*v0*[m] + ((a*t^2)/2)*[m]
Это уравнение можно использовать с единицами измерения в символьных рабочих процессах. Можно также удалить единицы измерения, вернув правую сторону с помощью rhs, разделение блоков с помощью separateUnitsи использование результирующего выражения без единиц измерения.
[S units] = separateUnits(rhs(eqn3))
S(t) = (a*t^2)/2 + v0*t units(t) = [m]
Если требуется вычислить числовые значения из выражения, замените символьные переменные с помощью subsи преобразовать в числовые значения с помощью double или vpa.
Найти пройденное расстояние 8 секунды, где v0 = 20 и a = 1.3. Преобразуйте результат в двойной.
S = subs(S,[v0 a],[20 1.3]); dist = S(8); dist = double(dist)
dist = 201.6000
checkUnits | findUnits | isUnit | newUnit | separateUnits | symunit2str | unitConversionFactor | unitConvert