MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Solve Limitations

  • To: mathgroup at smc.vnet.net
  • Subject: [mg63104] Re: [mg62980] Re: [mg62963] Solve Limitations
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Wed, 14 Dec 2005 04:36:07 -0500 (EST)
  • References: <IRGQVT$2C607F9DAA7468FE284C86E7560B5F2C@bol.com.br>
  • Sender: owner-wri-mathgroup at wolfram.com

On 14 Dec 2005, at 10:02, Marcelo Mayall wrote:

> > > Let's suppose that we are interested in the roots analytic
> > > expression of
> > > the following function:
> > > In[1] := f = a x + b x^(3/2) + c;
> > > The function Solve could be used:
> > > In[2] := sol = Solve[f==0, x];
> > > Defining the values of the constants a, b, c would return the
> > > following numeric values:
> > > In[3] := froots = Solve[f==0, x]/. {a->1, b->1, c->1} //N
> > > Out[3] = {{x-> 2.1479}, {x-> -0.57395 + 0.368989 I}, {x-> -0.57395
> > > - 0.368989 I}}
> > > However, f is not null for those values and therefore, these are
> > > not the roots of f:
> > > In[4] := f/. froots/. {a-> 1, b-> 1, c-> 1} //Chop
> > > Out[4] = {6.2958, 0, 0}
> > > At first, it seems that the function Solve doesn't take
> > > appropriately in
> > > consideration the term in square root.
> > > Some idea to obtain the correct analytic solution of f ??? Or, in
> > > fact, this a limitation of the function Solve???
> > >
> > > Thanks,
> > > Marcelo Mayall
> > >
> > >
> >
> > There is no way, in general, to avoid getting so called "parasite"
> > solutions in parametric equations with radicals. This is not a
> > limitation of Solve but of known mathematics.
> >
> > If your equation has numerical coefficients then the option
> > VerifySolutions->True will usually (but not always) insure that the
> > parasite solutions are eliminated.
> >
> > Andrzej Kozlowski
> >
> >
>
> Another simple case that could, a priori, exemplify the limitation  
> of the Solve function:
>
> In[1] := Solve[x^0.5 + a x == 0, x]
>
> Out[1] {{x -> 0}, {x -> 1 / a^2}}
>
> However, the correct answer should have the following form:
> If a >= 0,  {x -> 0}
> If a < 0  , {{x -> 0}, {x -> 1 / a^2}}
> It seems to me that, in this case, this is not a limitation of the  
> known mathematics but a limitation of the algorithm of the Solve  
> function.
>
> Thanks,
> Marcelo Mayall

First of all, your answer assumes that a is a real number, but this  
is of course an assumption that Mathematica never makes


Solve[x^(1/2) + I*x == 0, x]


{{x -> -1}, {x -> 0}}

Mathematica has to give an answer that is valid for complex a. The  
answer it has given will therefore be valid in far more cases than  
your answer. However, if you want to assume that a is real you should  
use Reduce that allows such assumptions:

In[38]:=
Reduce[x^(1/2) + a*x == 0, x, Reals]

Out[38]=
(a < 0 && (x == 0 || x == 1/a^2)) || (a >= 0 && x == 0)

Now you have got exactly he answer you wanted.

Andrzej Kozlowski




  • Prev by Date: Re:Re: Solve Limitations
  • Next by Date: Re: Mathematica Programmer vs. Programming in Mathematica
  • Previous by thread: Re:Re: Solve Limitations
  • Next by thread: Re: Re: Solve Limitations