6
$\begingroup$
  Solve [(400 E^(-4 k) (1 - E^(-2 k)))/((1 - E^(-6 k)) k v) == 900 && (
    800 E^(-6 k) (1 - E^(-2 k)))/((1 - E^(-8 k)) k v) == 60, {v, k}] // N

Solve::nsmet: This system cannot be solved with the methods available to Solve

Solve::inex: Solve was unable to solve the system with inexact coefficients or the system obtained by direct rationalization of inexact numbers present in the system. Since many of the methods used by Solve require exact input, providing Solve with an exact version of the system may help

However, if I specified variables to solve to be {v,k,s}, Solve seems to work just fine despite s not existing in the equations at all.

  Solve[
    (400 E^(-4 k) (1 - E^(-2 k)))/((1 - E^(-6 k)) k v) == 900 && 
    (800 E^(-6 k) (1 - E^(-2 k)))/((1 - E^(-8 k)) k v) == 60, 
    {v, k,s}] // N

Solve::ifun: Inverse functions are being used by Solve, so some solutions may not be found; use Reduce for complete solution information.

Solve::svars: Equations may not give solutions for all "solve" variables

{{v -> 0.0000636196 - 0.000117529 I, k -> 1.70058 + 3.14159 I}, 
 {v -> 0.000280738, k -> 1.70058}, 
 {v -> 0.153834 - 6.48714 I, k -> -0.00846644 + 2.08977 I}, 
 {v -> -0.461559 + 12.8837 I, k -> -0.00846644 - 1.05182 I}, 
 {v -> 0.153834 + 6.48714 I, k -> -0.00846644 - 2.08977 I}, 
 {v -> -0.461559 - 12.8837 I, k -> -0.00846644 + 1.05182 I}}

Why does specifying another variable, which does not exist, make Solve work?

How can I find all the solutions? What commands I should use?

I have tried Reduce and it keeps running all day and gives the alert:

$\qquad $No more memory available.
$\qquad $Mathematica kernel has shut down.
$\qquad $Try quitting other applications and then retry.

NSolve does not work either.

Im using Mathematica version 8.0.

$\endgroup$
  • 1
    $\begingroup$ This is a duplicate of Is it a bug? on solving system of equations $\endgroup$ – Bob Hanlon Aug 14 '16 at 4:01
  • 2
    $\begingroup$ @Bob Hanlon. Not quite; the OP now explicitely asks for an explanation why adding an irrelevant extra variable to a set of equations helps in finding a solution, something that puzzles me as well. And, just as with the OP, on my system Reduce does not work either. $\endgroup$ – Fred Simons Aug 14 '16 at 8:28
  • 2
    $\begingroup$ @FredSimons - As stated in its documentation, "Solve deals primarily with linear and polynomial equations." These equations are neither. However, with version 9 or later Reduce[eqns, {k, v}, Backsubstitution -> True] or Solve[eqns, {k, v}, Method -> Reduce] both work. $\endgroup$ – Bob Hanlon Aug 14 '16 at 14:05
  • $\begingroup$ So it's kind of a bug right? at least for Mathematica version 8 I think if Mathematica cannot solve then it just cannot solve unless users add specific condition to analyse the the equation and obtain the answer by themselves but why irrelevant extra variable could force Mathematica to find the solutions. Im trying to find mathematical explanation other than bugs on using Solve commands $\endgroup$ – Wolfgang Aug 14 '16 at 17:58
5
$\begingroup$

Though I am highly surprised by the fact that adding a superfluous variable to a Solve command enables Solve to find a solution that is otherwise not found, I do not think this can be called a bug. As Bob Hanlon mentions, the documentation states that Solve deals primarily with linear and polynomial equations, and your equations obviously are not. However, Solve now can be used for analytic equations on bounded domains. Unfortunately, your equations are not analytic at (k,v)=(0,0). So one should not be surprised that Solve does not work for your equations. But Solve can be used with some flexible limitations.

equations = {(400 E^(-4 k) (1 - E^(-2 k)))/((1 - E^(-6 k)) k v) == 900, (800 E^(-6 k) (1 - E^(-2 k)))/((1 - E^(-8 k)) k v) == 60 };

Let us make these equations analytic:

equations2 = equations /. {k -> 1/k, v -> 1/v};

Now we can find all real solutions, at a distance at least 10^-4 from the origin:

{1/k, 1/v} /. Solve[Join[equations2, {Abs[k] < 10^4, Abs[v] < 10^4}], {k, v}, Reals] 

(* long formula *)

N[%]
(* {{1.70058, 0.000280738}} *)

When we replace Reals with Complexes in the above command, we should get the complex solutions of the equations at a distance of at least 10^-4 from the origin. On my computer, that took too much time, so after 12 minutes I aborted this computation and went to the following way of solving your equations, which essentially is what you would have done with pen and paper.

It is easy to eliminate the variable v:

Eliminate[equations, v] 
(* -29 E^(2 k)-29 E^(4 k)+E^(6 k)==29 *)

Let us restrict ourselves to | k | < 5 :

kvalues = k /. Solve[% && Abs[k] < 5, k]
(* large expression *)

This gives the following solutions:

Flatten[Table[{k, v} /. Solve[equations, v], {k, kvalues}] , 1] // N
(* {{1.70058,0.000280738},{1.70058 -3.14159 I,0.0000636196 +0.000117529 I},{1.70058 +3.14159 I,0.0000636196 -0.000117529 I},{-0.00846644-1.05182 I,-0.461559+12.8837 I},{-0.00846644-4.19342 I,-0.0962857+3.23233 I},{-0.00846644+2.08977 I,0.153834 -6.48714 I},{-0.00846644+1.05182 I,-0.461559-12.8837 I},{-0.00846644-2.08977 I,0.153834 +6.48714 I},{-0.00846644+4.19342 I,-0.0962857-3.23233 I}} *)
$\endgroup$

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.