2010-05-27 1 views
6

Attualmente sto facendo un po 'di normalizzazione lungo le linee di:radicarsi quadrata positiva in Mathematica

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

Per questo tipo di normalizzazione, la radice quadrata negativa è estranea. Il risultato di questo calcolo è:

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

anche se cerco dandogli un Supponendo [...] o semplificare [...], ancora mi dà gli stessi risultati:

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

Qualcuno può dirmi cosa sto facendo di sbagliato qui?

Sto eseguendo Mathematica 7 su Windows 7 a 64 bit.

risposta

4

Solve non funziona così. Potresti provare con lo Reduce, ad es.

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

È quindi un po 'difficile da trasformare questa uscita di regole di sostituzione, almeno nel caso generale, perché Reduce potrebbe usare arbitraria molti connettivi logici. In questo caso, potremmo solo hack:

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

ToRules fa ciò che la scatola dice: converte le equazioni (come in Reduce uscita) alle regole. Nel tuo caso:

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

per i casi più complessi, ho spesso trovato utile controllare solo il valore delle soluzioni simboliche dopo pluging in valori tipici dei parametri. Questo non è infallibile, ovviamente, ma se sai che esiste un'unica soluzione, è un metodo semplice ed 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

Grande, grazie! Mi ero dimenticato di ToRules. –