2010-05-27 7 views
6

Je fais actuellement une certaine normalisation le long des lignes de:Prenez racine carrée dans Mathematica

J = Integrate[Psi[x, 0]^2, {x, 0, a}] 
sol = Solve[J == 1, A] 
A /. sol 

Pour ce type de normalisation, la racine carrée négative est étrangère. Le résultat de ce calcul est:

In[49]:= J = Integrate[Psi[x, 0]^2, {x, 0, a}] 
Out[49]= 2 A^2 

In[68]:= sol = Solve[J == 1, A] 
Out[68]= {{A -> -(1/Sqrt[2])}, {A -> 1/Sqrt[2]}} 

Même si je tente de lui donner une hypothèse [...] ou de simplifier [...], il me donne toujours les mêmes résultats:

In[69]:= sol = Assuming[A > 0, Solve[J == 1, A]] 
Out[69]= {{A -> -(1/Sqrt[2])}, {A -> 1/Sqrt[2]}} 

In[70]:= sol = FullSimplify[Solve[J == 1, A], A > 0] 
Out[70]= {{A -> -(1/Sqrt[2])}, {A -> 1/Sqrt[2]}} 

Quelqu'un peut-il me dire ce que je fais mal ici?

Je cours Mathematica 7 sous Windows 7 64 bits.

Répondre

4

Solve ne fonctionne pas comme ceci. Vous pouvez essayer Reduce, à la place, par exemple.

In[1]:= Reduce[{x^2 == 1, x > 0}, x] 
Out[1]= x == 1 

Il est alors un peu difficile à transformer cette sortie aux règles de remplacement, au moins dans le cas général, car Reduce peut utiliser arbitraire plusieurs logiques. Dans ce cas, nous pourrions simplement pirater:

In[2]:= Solve[Reduce[{x^2 == 1, x > 0}, x], x] 
Out[2]= {{x->1}} 
5

ToRules fait ce que la boîte indique: convertit les équations (comme dans Reduce sortie) aux règles. Dans votre cas:

In[1]:= ToRules[Reduce[{x^2==1,x>0},x]] 
Out[1]= {x->1} 

In[2]:= {ToRules[Reduce[{x^2==1},x]]} 
Out[2]= {{x->-1},{x->1}} 

Pour les cas plus complexes, je l'ai souvent trouvé utile de vérifier que la valeur des solutions symboliques après pluging des valeurs des paramètres typiques. Ce n'est pas infaillible, bien sûr, mais si vous savez qu'il n'y a qu'une seule et unique solution, alors c'est une méthode simple et efficace:

Solve[x^2==someparameter,x] 
Select[%,((x/.#)/.{someparameter-> 0.1})>0&] 

Out[3]= {{x->-Sqrt[someparameter]},{x->Sqrt[someparameter]}} 
Out[4]= {{x->Sqrt[someparameter]}} 
+0

Great, thank! J'avais oublié ToRules. –