# checkUnits
检查兼容的尺寸和一致的单位
函数库: TySymbolicMath
# 语法
C = checkUnits(expr,"Compatible")
C = checkUnits(expr,"Consistent")
# 说明
C = checkUnits(expr) 检查 expr 是否有兼容的尺寸和一致的单位,并返回一个包含 Consistent 和 Compatible 字段的结构。根据检查结果,字段包含逻辑 0(false)或逻辑 1(true)。示例
如果所有术语都具有相同的维度,如长度或时间,则 expr 具有兼容的维度。 如果所有相同维度的单位都可以通过 1 的转换系数相互转换,则 expr 具有一致的单位。
C = checkUnits(expr,"Compatible") 只检查 expr 是否有兼容的尺寸。示例
C = checkUnits(expr,"Consistent") 只检查 expr 是否有一致的单位。示例
# 示例
检查单位的尺寸
检查方程或表达式的尺寸。检查尺寸是为了确认等式或表达式是否有效。
使用带有 "Compatible" 选项的 checkUnits 验证以下方程的尺寸:
假定符号变量是无量纲的。由于方程的维数不兼容,checkUnits 函数返回 fasle。
using TySymbolicMath
@variables A B
eqn = A*u"m"/u"s" ~ B*u"kg"/u"s"
checkUnits(eqn,"Compatible")
ans = false
将 u"kg" 替换为 u"m",然后重复检查。由于尺寸现在是兼容的,checkUnits 函数返回逻辑 true。
eqn = A*u"m"/u"s" ~ B*u"m"/u"s"
checkUnits(eqn,"Compatible")
ans = true
检查单位的一致性
检查单位的一致性比检查兼容性更有效。如果同一维度的所有单位都能以 1 的换算系数相互换算,则单位是一致的。例如,1 N 与 1 kgcm/s^2 一致,但与 1 kgcm/s^2 不一致。
using TySymbolicMath
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 = true
checkUnits(expr2,"Consistent")
ans = false
通过维数兼容但单位不一致的例子 expr2,来说明兼容性和一致性之间的区别。
checkUnits(expr2,"Compatible")
ans = true
检查多个方程或表达式
将多个等式或表达式放入数组中进行检查。checkUnits 函数返回一个数组,其元素与输入的元素相对应。
检查多个方程是否有兼容的尺寸。checkUnits 函数返回 [1 0],这意味着第一个方程有兼容的维数,而第二个方程没有。
using TySymbolicMath
@variables 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")
ans = 1×2 BitMatrix:
1 0
检查单位的尺寸和一致性
使用 checkUnits 函数检查方程或表达式的尺寸是否兼容,单位是否一致。
定义运动弹丸的 x 和 y 位移方程。检查其单位的兼容性和一致性。
using TySymbolicMath
@variables theta x y ts
g = 9.81u"cm" / (u"s")^2
v = 10u"m" / u"s"
t = ts * u"s"
expr = v*t
x = (cos(theta)*expr.val)*unit(expr)
y = (sin(theta)*expr.val)*unit(expr) ~ (-g*t^2)/2
S = compatible = checkUnits([x y])
S = TySymbolicMath.CheckUnits(Bool[1 0], Bool[1 1])
res1 = S.Consistent
res2 = S.Compatible
res1 = 1×2 BitMatrix:
1 0
res2 = 1×2 BitMatrix:
1 1
第二个等式的维数一致,但单位不一致。这种不一致是因为 g 错误地使用了单位 cm 而不是单位 m。重新定义 g 并再次检查方程。现在第二个等式的单位一致了。
g = 9.81u"m" / (u"s")^2
y = (sin(theta)*expr.val)*unit(expr) ~ (-g*t^2)/2
S = compatible = checkUnits([x y])
S = TySymbolicMath.CheckUnits(Bool[1 1], Bool[1 1])
res1 = S.Consistent
res2 = S.Compatible
res1 = 1×2 BitMatrix:
1 1
res2 = 1×2 BitMatrix:
1 1
# 输入参数
expr - 输入的表达式符号表达式 | 符号方程 | 符号函数 | 符号向量 | 符号矩阵 | 符号多维数组
输入的表达式,指定为符号表达式、符号方程、符号函数、符号向量、符号矩阵或符号多维数组。
# 另请参阅
findUnits | isUnit | @unit | unit | uparse | symunit2str | unitConversionFactor