在Mathematica中取正方根

时间:2010-05-27 23:54:32

标签: wolfram-mathematica

我目前正在进行一些规范化:

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

对于这种类型的归一化,负平方根是无关的。计算结果如下:

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

即使我尝试给它假设[...]或简化[...],它仍然会给我相同的结果:

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

谁能告诉我这里我做错了什么?

我在Windows 7 64位上运行Mathematica 7。

2 个答案:

答案 0 :(得分:5)

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

对于更复杂的情况,我经常发现在插入典型参数值后只检查符号解决方案的值是有用的。当然,这不是万无一失的,但如果您知道只有一个解决方案,那么这是一种简单而有效的方法:

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

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

答案 1 :(得分:4)

Solve不能像这样工作。您可以尝试使用Reduce,例如

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

将此输出转换为替换规则是有点棘手的,至少在一般情况下,因为Reduce可能使用任意多个逻辑连接词。在这种情况下,我们可以破解:

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