8
$\begingroup$

Bug introduced in 10.2 or earlier and fixed in 11.0.0


EDIT In a very fast response from Wolfram they state that this is a known problem and give an example of it working for version 10.4.1.

$Version
(*10.4.1 for Microsoft Windows (64-bit) (April 11, 2016)*)

NSolve[eqn, {h, r, fc}]
(*{{h -> 6944.52 - 3662.26 I, r -> 4.68843*10^10 + 3.07219*10^12 I,   
   fc -> -1.76222*10^8 + 3.51039*10^8 I}, 
  {h -> 0.387583 + 0.0290387 I,  
   r -> 44.9117 - 8.67483 I, fc -> 415.19 + 53.0697 I}} *)

Two solutions are supplied suggesting numerical issues which innaiz has identified below.

The ever helpful Daniel Lichtblau suggests using the "EndomorphismMatrix" method which works well.

sol = NSolve[eqn, {h, r, fc}, Method -> "EndomorphismMatrix"]

(*{{h -> 0.387601 + 0.0289255 I, r -> 44.9137 - 8.66856 I, fc -> 415.189 + 53.0819 I}}*)

One solution is found which satisfies the equations:

eqn /. sol

(* {{True, True, True}} *)

This looks like the way forward.

Original Post

I need to solve equations of the form

eqn = {0.046443987614013964` + 0.3690429826762282` I == 
   h + r/(336.458333332019` - fc), 
  0.8898053473498362` + 0.5457057083738883` I == 
   h + r/(449.9999999982421` - fc), 
  0.6745246773524501` + 0.07315743778713857` I == 
   h + r/(563.5416666644653` - fc)}

So I use NSolve[]

Using Version 9

NSolve[eqn, {h, r, fc}]

(* {{h -> 0.387601 + 0.0289255 I, r -> 44.9137 - 8.66856 I, 
    fc -> 415.189 + 53.0819 I}}*)

Using Version 10.3

(* {{h -> 17838.7 - 12957.1 I, r -> 2.88691*10^12 + 2.45046*10^12 I, 
    fc ->    5.21787*10^7 + 1.8054*10^8 I}, 
   {h -> 0.387583 + 0.0290387 I, r -> 44.9117 - 8.67483 I, 
    fc -> 415.19 + 53.0697 I}} *)

Using Version 10.4

(* {} *)

So the solution is found in Version $9$. In Version $10.3$ there are two solutions, one of which looks like it is a numerical artifact. Finally in Version $10.4$ there is no solution. So is there a bug? I can use Solve but the problem is numeric and NSolve is meant to work better than Solve for numerical cases. What is the solution?

Thanks

$\endgroup$
5
  • $\begingroup$ You can try one of the methods listed here: (a/103029). It might be considered a backslide, at least on this specific problem, I suppose. See also (a/104429); indeed this might be a duplicate of (104418) $\endgroup$
    – Michael E2
    Apr 26, 2016 at 11:22
  • 3
    $\begingroup$ Yes, it is a known issue, reported here and possibly elsewhere. As workaround could do NSolve[eqn, {h, r, fc},Method->"EndomorphismMatrix"]. $\endgroup$ Apr 26, 2016 at 16:18
  • $\begingroup$ Thanks for your comments. I will try the workaround. $\endgroup$
    – Hugh
    Apr 26, 2016 at 16:34
  • $\begingroup$ MMA 11.0.0 seems to have the bug fixed without SetPrecision. It returns {{h -> 0.387601 + 0.0289255 I, r -> 44.9137 - 8.66856 I, fc -> 415.189 + 53.0819 I}} as in MMA 9. $\endgroup$
    – user58955
    Aug 14, 2016 at 16:29
  • $\begingroup$ It worked fine in 10.0.2 and fails in 10.2. So it must have been introduced in 10.1 or 10.2 $\endgroup$
    – Michael E2
    Aug 15, 2016 at 1:50

2 Answers 2

8
$\begingroup$

Without SetPrecision it actually doesn't work fine in Mathematica 10.4.1:

In[2]:= NSolve[eqn, {h, r, fc}]

Out[2]= {{h -> 45112.4 + 69798. I, 
  r -> 3.6894*10^11 - 2.09612*10^12 I, 
  fc -> -3.94833*10^7 - 4.35473*10^7 I}, {h -> 0.387583 + 0.0290387 I,
   r -> 44.9117 - 8.67483 I, fc -> 415.19 + 53.0697 I}}

In[3]:= eqn /. %

Out[3]= {{False, False, False}, {False, False, False}}

However, in Mathematica 5.2 it works the same fine way as in version 9 in the subject question:

In[2]:=
NSolve[eqn, {h, r, fc}]

Out[2]=
{{h -> 0.3876007531699076 + 0.028925452482355368*I, 
  r -> 44.913731800940106 - 8.668559624622056*I, 
  fc -> 415.18940593411503 + 53.08192645339874*I}}

In[3]:=
eqn/.%

Out[3]=
{{True,True,True}}

Very sorry, this is not a reason to upgrade.

$\endgroup$
3
4
$\begingroup$

Works fine in Mathematica 10.4.1

NSolve[SetPrecision[eqn, 16], {h, r, fc}] // Chop
(* {{h -> 0.3876007531699077 + 0.0289254524823553 I, 
  r -> 44.91373180094011 - 8.66855962462205 I, 
  fc -> 415.1894059341150 + 53.0819264533987 I}} *)
$\endgroup$
1
  • $\begingroup$ Thanks for your effort. Perhaps I should upgrade... $\endgroup$
    – Hugh
    Apr 26, 2016 at 16:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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