Я в настоящее время делаю некоторую нормализацию вроде:
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]}}
Кто-либо может сказать мне, что я делаю неправильно здесь?
Я выполняю Mathematica 7 в 64-разрядном Windows 7.
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}}
ToRules
выполняет то, что указано в поле: преобразует уравнения (как в Сокращение вывода
) в правила. В вашем случае:
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]}}