NSolve finds real-valued results in version 9, but not in version 10
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.
You can use any of the alternative methods found here: Methods for NSolve
For example:
NSolve[{D[P[T, V], {V, 1}] == 0, D[P[T, V], {V, 2}] == 0}, {T, V}, Reals,
Method -> "Legacy"]
(*
{{T -> 0.0943287, V -> 7.66613},
{T -> -9.67712, V -> -2.35529},
{T -> -5.12191, V -> -0.778707}}
*)
The other alternatives seem to work, too. Except the default one.
This is cute, too (method "Foo"
??):
NSolve[{D[P[T, V], {V, 1}] == 0, D[P[T, V], {V, 2}] == 0}, {T, V}, Reals,
Method -> "Foo"]
(*
{{T -> 0.0943287, V -> 7.66613}, {T -> -9.67712,
V -> -2.35529}, {T -> -5.12191, V -> -0.778707}}
*)