Проверяйте на совместимые размерности и сопоставимые модули
C = checkUnits(expr)
C = checkUnits(expr,'Compatible')
C = checkUnits(expr,'Consistent')
C = checkUnits(
проверки expr
)expr
для совместимых размерностей и сопоставимых модулей и возвращают структуру, содержащую поля Consistent
и Compatible
. Поля содержат логический 0
(false
) или логический 1
(true
) в зависимости от результатов проверки.
expr
имеет совместимые размерности, если все условия имеют те же размерности, такие как длина или время. expr
имеет сопоставимые модули, если все единицы той же размерности могут быть преобразованы друг другу с коэффициентом преобразования 1.
Проверяйте размерности уравнения или выражения. Размерности проверяются, чтобы подтвердить, что уравнение или выражение допустимы.
Проверьте размерности уравнения
при помощи checkUnits
с опцией 'Compatible'
. MATLAB® принимает, что символьные переменные являются безразмерными. Функция checkUnits
возвращает логический 0
(false
), потому что размерности уравнения не совместимы.
u = symunit; syms A B eqn = A*u.m/u.s == B*u.kg/u.s; checkUnits(eqn,'Compatible')
ans = logical 0
Замените u.kg
на u.m
при помощи subs
и повторите проверку. Поскольку размерности теперь совместимы, checkUnits
возвращает логический 1
(true
).
eqn = subs(eqn,u.kg,u.m); checkUnits(eqn,'Compatible')
ans = logical 1
Проверка модулей для непротиворечивости является более сильной проверкой, чем совместимость. Модули сопоставимы, когда все единицы той же размерности могут быть преобразованы друг другу с коэффициентом преобразования 1. Например, 1 ньютон сопоставим с 1 кг m/s2, но не с 1 кг cm/s2.
Покажите, что Ньютон 1
сопоставим с 1
kg m/s2 путем проверки expr1
, но не с 1
kg cm/s2 путем проверки expr2
.
u = symunit; expr1 = 1*u.N + 1*u.kg*u.m/u.s^2; expr2 = 1*u.N + 1*u.kg*u.cm/u.s^2; checkUnits(expr1,'Consistent')
ans = logical 1
checkUnits(expr2,'Consistent')
ans = logical 0
Покажите различие между совместимостью и непротиворечивостью путем показа, что expr2
имеет совместимые размерности, но не сопоставимые модули.
checkUnits(expr2,'Compatible')
ans = logical 1
Проверяйте несколько уравнений или выражений путем размещения их в массив. checkUnits
возвращает массив, элементы которого соответствуют элементам входа.
Проверяйте несколько уравнений на совместимые размерности. checkUnits
возвращает [1 0]
, означая, что первое уравнение имеет совместимые размерности, в то время как второе уравнение не делает.
u = symunit; syms x y z eqn1 = x*u.m == y*u.m^2/(z*u.m); eqn2 = x*u.m + y*u.s == z*u.m; eqns = [eqn1 eqn2]; compatible = checkUnits(eqns,'Compatible')
compatible = 1×2 logical array 1 0
Проверяйте и на совместимые размерности и на сопоставимые модули уравнения или выражения при помощи checkUnits
.
Определите уравнения для x-и y-смещения движущегося снаряда. Проверяйте их модули на совместимость и непротиворечивость.
u = symunit; g = 9.81*u.cm/u.s^2; v = 10*u.m/u.s^2; syms theta x(t) y(t) x(t) = v*cos(theta)*t; y(t) = v*sin(theta)*t + (-g*t^2)/2; S = checkUnits([x y])
S = struct with fields: Consistent: [1 0] Compatible: [1 1]
Второе уравнение имеет совместимые размерности, но противоречивые модули. Это несоответствие состоит в том, потому что g
неправильно использует cm вместо m. Переопределите g
и проверяйте уравнения снова. Второе уравнение теперь имеет сопоставимые модули.
g = 9.81*u.m/u.s^2; y(t) = v*sin(theta)*t + (-g*t^2)/2; S = checkUnits([x y])
S = struct with fields: Consistent: [1 1] Compatible: [1 1]
findUnits
| isUnit
| newUnit
| separateUnits
| str2symunit
| symunit
| symunit2str
| unitConversionFactor