使用符号数学工具箱™测量单位。本页介绍如何定义单位,在方程(包括微分方程)中使用单位,以及验证表达式的维数。
通过使用symunit
.
U =对称单位;
指定一个单位使用u。
单位
.例如,指定距离为5
米,重量为50
公斤,和一个速度10
千米每小时。在显示的输出中,单位被放在方括号中[]
.
D = 5*u。M w = 50*u。Kg s = 10*u.k km/u.h
D = 5*[m] w = 50*[kg] s = 10*([km]/[h])
提示
使用标签展开来查找单位的名称。类型u。
,按选项卡,然后继续输入。
单元与其他符号表达式一样,可以在任何标准操作或函数中使用。单位不会自动简化,这提供了灵活性。支持单元的通用替代名称。金宝app不支持复数形式。金宝app
添加500
米,2
公里。得到的距离不会自动简化。
D = 500*u。M + 2*u.k
D = 2*[km] + 500*[m]
简化d
通过使用简化
.的简化
函数自动选择要简化为的单位。
简化(D)
D = (5/2)*[km]
而不是自动选择一个单位,转换d
用到一个特定的单位unitConvert
.转换d
米。
d = unitConvert(d,u.m)
D = 2500*[m]
有更多的单位转换和单位系统选项。看到单位转换和单位系统.
用距离求速度d
是交叉的50
秒。结果的单位是正确的。
T = 50* us;S = d/t
S = 50*([m]/[S])
默认情况下,假定温度表示差异而不是绝对测量值。例如,5 * u。摄氏
假设代表5摄氏度的温差。这个假设允许对温度值进行算术运算。
要表示绝对温度,用开尔文,这样就不用区分绝对温度和温差了。
转换23
从摄氏度到开尔文,先把它当作温差,然后再当作绝对温度。
U =对称单位;T = 23*u.摄氏度;diffK = unitConvert(T, uk)
diffK = 23*[K]
abk = unitConvert(T, uk,'Temperature','absolute')
absK = (5923/20)*[K]
在较长的表达式中,视觉检查单位是困难的。您可以通过验证方程的尺寸来自动检查表达式的尺寸。
首先,定义运动学方程
,在那里v
代表着速度,一个
表示加速度,且年代
表示距离。假设年代
单位为千米,其他单位为国际单位制单位。为了演示尺寸检查,单位为一个
故意不正确。
Syms v v0 a s u = symunit;eqn = (v * u.m /美国)^ 2 = = (v0 * u.m /美国)^ 2 + 2 * * u.m /美国* * u.km
eqn = v ^ 2 * ([m] ^ 2 / [s] ^ 2) = = v0 ^ 2 * ([m] ^ 2 / [s] ^ 2) +(2 * *年代)*(((公里)* [m]) / [s])
观察出现的单位eqn
通过使用findUnits
.返回的单位表明千米和米都被用来表示距离。
findUnits (eqn)
Ans = [[km], [m], [s]]
检查单元是否有相同的尺寸(如长度或时间)使用checkUnits
与“兼容”
输入。MATLAB®假设符号变量是无量纲的。checkUnits
返回逻辑0
(假
),这意味着两个单元是不兼容的,且物理尺寸不相同。
checkUnits (eqn“兼容”)
Ans =逻辑0
看着eqn
,加速度一个
单位不正确。修正单元并再次检查兼容性。eqn
现在有兼容的单元。
eqn = (v * u.m /美国)^ 2 = = (v0 * u.m /美国)^ 2 + 2 * * u.m /美国^ 2 * * u.km;checkUnits (eqn“兼容”)
符合逻辑的1
现在,要检查每个维度是否一致地由相同的单元表示,请使用checkUnits
与“一致”
输入。checkUnits
返回逻辑0
(假
)因为米和千米都是用来表示距离的eqn
.
checkUnits (eqn“一致”)
Ans =逻辑0
转换eqn
到国际标准单位,使单位一致。运行checkUnits
一次。eqn
具有兼容和一致的单元。
eqn = unitConvert(eqn,'SI')
eqn = v ^ 2 * ([m] ^ 2 / [s] ^ 2) = = v0 ^ 2 * ([m] ^ 2 / [s] ^ 2) + (2000 * * 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 * *年代单位= 1 * ([m] ^ 2 / [s] ^ 2)
通过相乘,你可以返回带单位的原始方程eqn
与单位
然后展开结果。
扩大(eqn *单位)
ans = v ^ 2 * ([m] ^ 2 / [s] ^ 2) = = v0 ^ 2 * ([m] ^ 2 / [s] ^ 2) + (2000 * * s) * ([m] ^ 2 / [s] ^ 2)
若要从表达式计算数值,请使用潜艇
,并将其转换为数值双
或vpa
.
解决eqn
为v
.然后求的值v
在哪里V0 = 5
,A = 2.5
,S = 10
.将结果转换为double。
V = solve(eqn, V);V = V (2);%选择正解vSol = subs(v,[v0 a s],[5 2.5 10]);vSol = double(vSol)
vSol = 223.6627
在微分方程中使用单位就像在标准方程中一样。本节通过推导速度关系来展示如何在微分方程中使用单位v=v0+一个t而且 从加速度的定义开始 .
用SI单位符号表示加速度的定义。给定速度V
单位,V
必须对正确的单位进行微分T = T * us
不仅仅是t
.
syms V(t) a u =符号单位;T = T * us;%时间(秒)A = A *u.m/ us ^2;%加速度(米每秒)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+一个t.
syms v0 cond = V(0) == v0*u.m/ us;eqn2 = V == dsolve(eqn1,cond)
eqn2(t) = V(t) == v0*([m]/[s]) + a*t*([m]/[s])
通过代入检查结果是否有正确的尺寸园艺学会(eqn2)
成eqn1
和使用checkUnits
.
checkUnits(潜艇(eqn1 V, rhs (eqn2)))
ans = struct with fields: Consistent: 1 Compatible: 1
现在,推导
.因为速度是距离的变化率,代入V
用距离的导数年代
.再一次,考虑到这一点年代
单位,年代
必须对正确的单位进行微分T = T * us
不仅仅是t
.
syms S(t) eqn2 = subs(eqn2,V,diff(S, t))
eqn2 (t) = diff (S (t), t) * (1 / [S]) = = v0 * ([m] / [S]) + * t * ([m] / [S])
解决eqn2
条件是覆盖的初始距离为0
.的期望形式年代
通过使用扩大
.
cond2 = S(0) == 0;eqn3 = S == dsolve(eqn2,cond2);Eqn3 = expand(Eqn3)
eqn3(t) = S(t) == t*v0*[m] + ((a*t^2)/2)*[m]
您可以将这个方程与符号工作流中的单位一起使用。或者,您可以通过返回右边的using来删除单元园艺学会
,用separateUnits
,并使用得到的无单位表达式。
[S units] = separateUnits(rhs(eqn3))
S(t) = (a*t^2)/2 + v0*t units(t) = [m]
当需要从表达式计算数值时,使用潜艇
,并将其转换为数值双
或vpa
.
求出所经过的距离8
秒,V0 = 20
而且A = 1.3
.将结果转换为double。
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