UPDATE Reals
also was used in the code.
Actually, I tried the following simple piece of code.
P[T_, V_] := -(1/V^2) + T/V + (2 T)/(-1 + V)^3 + (4 T)/(-1 + V)^2;
NSolve[
{
D[P[T, V], {V, 1}] == 0,
D[P[T, V], {V, 2}] == 0
},
{T, V},
Reals
] // TableForm
And in ver. 9, the output was,
{
{T -> -9.67712, V -> -2.35529},
{T -> -5.12191, V -> -0.778707},
{T -> 0.0943287, V -> 7.66613}
}
and in case of ver. 10.3.1, obtained,
{}
That is, these two versions apparently return different outputs.
Whats is the cause? Is there any version dependency in Mathematica?
Answer
Not a solution, more of an extended comment.
Clearly there are real solutions, the curves below do cross
ContourPlot[
Evaluate[{D[P[T, V], {V, 1}] == 0,
D[P[T, V], {V, 2}] == 0}], {V, -10, 10}, {T, -10, 10},
PlotPoints -> 40]
You can get the real-valued solutions version 9 gave via
Solve[{N@D[P[T, V], {V, 1}] == 0,
N@D[P[T, V], {V, 2}] == 0}, {T, V}, Reals]
During evaluation of Solve::ratnz: Solve was unable to solve the system with inexact coefficients. The answer was obtained by solving a corresponding exact system and numericizing the result. >>
(* {{T -> -9.67712, V -> -2.35529}, {T -> -5.12191,
V -> -0.778707}, {T -> 0.0943287, V -> 7.66613}} *)
You can also get these answers with NSolve
(with a little more precision) by using the Method
option
NSolve[
{
D[P[T, V], {V, 1}] == 0,
D[P[T, V], {V, 2}] == 0
},
{T, V}
, Reals, Method -> "UseSlicingHyperplanes"]
(* {{T -> 0.0943287, V -> 7.66613}, {T -> -9.67712,
V -> -2.35529}, {T -> -5.12191, V -> -0.778707}} *)
{D[P[T, V], {V, 1}] , D[P[T, V], {V, 2}]} /. %
(* {{-1.12757*10^-17,
3.25261*10^-18}, {1.11022*10^-15, -1.9984*10^-15}, {3.55271*10^-15,
1.59872*10^-14}} *)
Why is this happening? I don't know (hence the disclaimer at the top). I know that the functions NSolve
and the like are constantly undergoing development, and some of those very developers post here. They would be very interested in hearing about this I think.
Comments
Post a Comment