9
$\begingroup$

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?

$\endgroup$
  • 1
    $\begingroup$ @Shaqpad, you can even go further by typing Quit and entering it, this quits the kernel completely but leaves the front end open. $\endgroup$ – Jason B. Jan 19 '16 at 16:10
  • 1
    $\begingroup$ Forgot about Reals. The shown outputs are for the case using Reals. $\endgroup$ – Shaqpad Jan 19 '16 at 16:12
  • $\begingroup$ Ahhh... Reals! well yes, now the list is empty in 10.3.1 and not in v9, I can confirm there is a difference. Will delete old comments now obsolete. $\endgroup$ – rhermans Jan 19 '16 at 16:13
  • $\begingroup$ The only relevant doc. found is this $\endgroup$ – Shaqpad Jan 19 '16 at 16:15
  • 3
    $\begingroup$ Essentially the same issue as was reported here. A workaround is to use Method->"EndomorphismMatrix" $\endgroup$ – Daniel Lichtblau Jan 19 '16 at 17:39
7
$\begingroup$

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]

enter image description here

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.

$\endgroup$
  • $\begingroup$ Of course your answered my question; more than it deserves! $\endgroup$ – Shaqpad Jan 19 '16 at 16:53
6
$\begingroup$

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}}
*)
$\endgroup$
  • $\begingroup$ Now I'm just going to use random methods whenever I use NSolve, like Method -> "JWalterWeatherman". Is this big enough to be marked as a bug? $\endgroup$ – Jason B. Feb 2 '16 at 14:52
  • $\begingroup$ @JasonB Daniel's comment says it's the same as this, which was marked a bug. -- BTW, Method settings are irregularly or loosely checked in some functions, with undefined settings falling through to a default. In this case, the Automatic setting seems to be mishandled, but invalid settings get past the bug. $\endgroup$ – Michael E2 Feb 2 '16 at 15:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.