Mik*_*ley 6 wolfram-mathematica
我目前正在进行一些规范化:
J = Integrate[Psi[x, 0]^2, {x, 0, a}]
sol = Solve[J == 1, A]
A /. sol
Run Code Online (Sandbox Code Playgroud)
对于这种类型的归一化,负平方根是无关的.这个计算的结果是:
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]}}
Run Code Online (Sandbox Code Playgroud)
即使我尝试给它假设[...]或简化[...],它仍然给我相同的结果:
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]}}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这里我做错了什么?
我在Windows 7 64位上运行Mathematica 7.
ToRules做框的内容:将方程式(如Reduce输出中)转换为规则.在你的情况下:
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}}
Run Code Online (Sandbox Code Playgroud)
对于更复杂的情况,我经常发现在插入典型参数值之后检查符号解决方案的值是有用的.当然,这并非万无一失,但如果您知道只有一种解决方案,那么这是一种简单而有效的方法:
Solve[x^2==someparameter,x]
Select[%,((x/.#)/.{someparameter-> 0.1})>0&]
Out[3]= {{x->-Sqrt[someparameter]},{x->Sqrt[someparameter]}}
Out[4]= {{x->Sqrt[someparameter]}}
Run Code Online (Sandbox Code Playgroud)
Solve不是这样工作的。你可以尝试Reduce,例如
In[1]:= Reduce[{x^2 == 1, x > 0}, x]
Out[1]= x == 1
Run Code Online (Sandbox Code Playgroud)
然后,将此输出转换为替换规则会有点棘手,至少在一般情况下是这样,因为Reduce可能会使用任意多个逻辑连接词。在这种情况下,我们可以破解:
In[2]:= Solve[Reduce[{x^2 == 1, x > 0}, x], x]
Out[2]= {{x->1}}
Run Code Online (Sandbox Code Playgroud)