Check for compatible dimensions and consistent units
C = checkUnits(
checks expr
)expr
for
compatible dimensions and consistent units and returns a structure
containing the fields Consistent
and Compatible
.
The fields contain logical 0
(false
)
or logical 1
(true
) depending
on the check results.
expr
has compatible dimensions if all terms
have the same dimensions, such as length or time. expr
has
consistent units if all units of the same dimension can be converted
to each other with a conversion factor of 1.
Check the dimensions of an equation or expression. The dimensions are checked to confirm that the equation or expression is valid.
Verify the dimensions of the equation
by using checkUnits
with the option 'Compatible'
. MATLAB® assumes
that symbolic variables are dimensionless. The checkUnits
function
returns logical 0
(false
) because
the dimensions of the equation are not compatible.
u = symunit; syms A B eqn = A*u.m/u.s == B*u.kg/u.s; checkUnits(eqn,'Compatible')
ans = logical 0
Replace u.kg
with u.m
by
using subs
and repeat the check. Because the
dimensions are now compatible, checkUnits
returns
logical 1
(true
).
eqn = subs(eqn,u.kg,u.m); checkUnits(eqn,'Compatible')
ans = logical 1
Checking units for consistency is a stronger check than compatibility. Units are consistent when all units of the same dimension can be converted to each other with a conversion factor of 1. For example, 1 Newton is consistent with 1 kg m/s2 but not with 1 kg cm/s2.
Show that 1
Newton is consistent with 1
kg
m/s2 by checking expr1
but
not with 1
kg cm/s2 by
checking 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
Show the difference between compatibility and consistency by
showing that expr2
has compatible dimensions but
not consistent units.
checkUnits(expr2,'Compatible')
ans = logical 1
Check multiple equations or expressions by
placing them in an array. checkUnits
returns
an array whose elements correspond to the elements of the input.
Check multiple equations for compatible dimensions. checkUnits
returns [1
0]
, meaning that the first equation has compatible dimensions
while the second equation does not.
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
Check for both compatible dimensions and consistent
units of the equation or expression by using checkUnits
.
Define the equations for x- and y-displacement of a moving projectile. Check their units for compatibility and consistency.
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]
The second equation has compatible dimensions but inconsistent
units. This inconsistency is because g
incorrectly
uses cm instead of m. Redefine g
and check the
equations again. The second equation now has consistent units.
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