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

时间:2009-09-13 19:49:38

标签: wolfram-mathematica units-of-measurement

我想以米或公里(两者都可能)传递参数值,并以米/秒为单位得到结果。

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

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,并以米/秒(米/秒)为单位得到结果。

如果你们中的任何人能够纠正给定的函数定义和其他语句以获得想要的结果,我将非常感激。

2 个答案:

答案 0 :(得分:2)

以下是执行该操作的一种方法,您可以使用以下事实:Solve返回规则列表,将x的值替换为v[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 Meter)/Second作为您的回答。

答案 1 :(得分:1)

你只需要告诉Mathematica简化表达式,假设单位是“正确的”,这就是为什么它本身不做简化的原因。所以,像

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

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