如何在Mathematica中使用单位作为函数参数值

3

我希望能够传入以米或千米为单位的参数值,并获得以米/秒为单位的结果。

我在以下示例中尝试过此操作:

u = 3.986*10^14 Meter^3/Second^2;
v[r_, a_] := Sqrt[u (2/r - 1/a)];

Convert[r, Meter];

Convert[a, Meter];

如果我尝试使用已定义的函数和转换:
a = 24503 Kilo Meter;
s = 10198.5 Meter/Second;
r = 6620 Kilo  Meter;
Solve[v[r, x] == s, x]

该函数返回以下内容:

{x -> (3310. Kilo Meter^3)/(Meter^2 - 0.000863701 Kilo Meter^2)}

这不是用户友好的格式。

无论如何,我想定义以米或千米为单位的a和r,并得到以米/秒(米/秒)为单位的结果s。

如果有人可以更正给定的函数定义和其他语句以获得所需的结果,我将非常感激。

2个回答

2

以下是一种方法,其中您可以利用Solve返回规则列表的事实,将值替换为xv[r, x]中,然后使用Convert,它将对所得到的代数表达式进行必要的简化:

With[{rule = First@Solve[v[r,x]==s,x] 
      (* Solve always returns a list of rules, because algebraic 
         equations may have multiple solutions. *)},
  Convert[v[r,x] /. rule, Meter/Second]]

这将返回(10198.5米)/秒作为您的答案。

1

你只需要告诉Mathematica假设单位是“正的”,它就会简化表达式,这也是它自己不进行简化的原因。所以,可以像这样:

SimplifyWithUnits[blabla_, unit_List]:= Simplify[blalba, (#>0)&/@unit];

所以如果你得到了那个丑陋的东西,你只需要输入%~SimplifyWithUnits~{Meter}或者其他单位。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接