2009-09-13 6 views
3

Je voudrais passer les valeurs des paramètres en mètres ou en kilomètres (les deux possibles) et obtenir le résultat en mètres/seconde.comment utiliser les unités le long des valeurs des paramètres de fonction dans Mathematica

J'ai essayé de le faire dans l'exemple suivant:

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

Convert[r, Meter]; 

Convert[a, Meter]; 

Si je tente d'utiliser la fonction définie et conversion:

a = 24503 Kilo Meter; 
s = 10198.5 Meter/Second; 
r = 6620 Kilo Meter; 
Solve[v[r, x] == s, x] 

La fonction renvoie les éléments suivants:

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

qui n'est pas le format convivial.

Quoi qu'il en soit, je voudrais définir a et r en mètres ou en kilomètres et obtenir le résultat s en mètres/seconde (Mètre/Second).

Je serais très reconnaissant si quelqu'un d'entre vous pourrait corriger la définition de la fonction donnée et d'autres déclarations afin d'obtenir le résultat souhaité.

Répondre

2

est ici une façon de le faire, où vous utilisez le fait que Solve retourne une liste de règles à substituer une valeur pour x dans v[r, x], puis utilisez Convert, qui fera la simplification nécessaire de l'expression algébrique résultant aussi bien :

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]] 

Cela renverra (10198.5 Meter)/Second comme votre réponse.

1

Il vous suffit de dire à Mathematica de simplifier l'expression en supposant que les unités sont "possitives", ce qui explique pourquoi elle ne fait pas elle-même les simplifications. Donc, quelque chose comme

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

Donc, si vous obtenez cette chose laide, alors vous tapez simplement% ~ SimplifyWithUnits ~ {} mètre ou autre chose.

Questions connexes