2009-09-13 6 views
3

Я хотел бы передать значения параметров в метрах или километрах (оба возможны) и получить результат в метрах/секунду.Как использовать единицы измерения по функциональным значениям параметров в Mathematica

Я попытался сделать это в следующем примере:

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

Вот один из способов сделать это, где вы используете тот факт, что Solve возвращает список правил, чтобы заменить значение x в v[r, x], а затем использовать Convert, что будет делать необходимое упрощение полученного алгебраического выражения, а также :

With[{rule = [email protected][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

Вам просто нужно сказать Mathematica, чтобы упростить выражение, предполагая, что единицы являются «способными», что является причиной того, что он не делает самих упрощений. Так, что-то вроде

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

Так что, если вы получите, что уродливая вещь, то вы просто набрать% ~ SimplifyWithUnits ~ {} метр или любой другой.