MathGroup Archive 1998

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

Search the Archive

Re: I have A Problem

  • To: mathgroup at
  • Subject: [mg14671] Re: I have A Problem
  • From: Daniel Lichtblau <danl>
  • Date: Sat, 7 Nov 1998 02:10:27 -0500
  • Organization: Wolfram Research, Inc.
  • References: <71q7j9$>
  • Sender: owner-wri-mathgroup at

'Kale Oyedeji wrote:
> The problem below continues for ever. What am I doing wrong?
> 'Kale Oyedeji
> > NSolve[{u^2-.75*x*(1+y+2*y^2+(1/3)*u*z+2*z^2)==0,
> >                 .775*x*z+u-.25*u*x*(1+y+2*y^2+2*z^2)==0,
> >                 9*u^2*y+3*u*z-.25*x*(1+6*y+3*y^3+3*y*z^2)-
> >                         1.5*u*x*z*(1+.5*y^2+.5*z^2)==0,
> >                 9*u^2*z-3*u*y-1.5*x*(1+.5*y^2+.5*z^2)+.25*u*x*(1+6*y+3*y^3+3*y*z^2)==0},{u,
> >     x,y,z}]
> >

NSolve will not have any chance with this one as it is now posed. The
solution set is not zero dimensional, that is, there are not finitely
many distinct solutions, and NSolve cannot do anything useful in this
situation. To get specific solutions I first tried FindMinimum. Doing
this gave the obvious one where all variables are zero. I then added a
new variable and equation to force u away from zero. This ploy
succeeded in finding another solution.

Here is the code that forced u away from zero.

In[64]:= polys = {u^2-3/4*x*(1+y+2*y^2+(1/3)*u*z+2*z^2),
          1/4*u*x*(1+6*y+3*y^3+3*y*z^2), u*new-10};

In[65]:= norm = polys.polys;

In[66]:= vars = {u,x,y,z,new};

In[67]:= start = Apply[Sequence,
        Transpose[{vars,Table[Random[], {Length[vars]}]}]]

Out[67]=  Sequence[{u, 0.0353295}, {x, 0.695102}, {y, 0.883116},
    {z, 0.450263}, {new, 0.632137}]

In[68]:= Timing[{min, rts} =
        FindMinimum[norm, Evaluate[start],

                                  -29 Out[68]= {0.08 Second, {4.08236 10
   {u -> 1.9589, x -> 4.34226, y -> 0.0675919, z -> 0.11501,
    new -> 5.10489}}}

Paul Abbott (private e-mail) sent to the poster and myself a result
obtained quite readily with FindRoot and a starting value away from
u=0. This made me suspect that there is a zero-dimensional subset of
solutions obtained by insisting u!=0 because otherwise I think FindRoot
would have given a "vanishing gradient" message and quit.

Extracting this zero-dimensional subset of solutions can be done, at
least in our development version, using NSolve. I show the code below;
we simply augment the original system by a polynomial that forces u
away from zero and them we eliminate the extra variable used in that

In[75]:= Timing[sol = NSolve[polys, {u,x,y,z}, new];]  Out[75]= {48.61
Second, Null}

I get 20 solutions this way, though two other candidates were lost due
to insufficient precision (I suppressed the warning messages that show
this). We now see another advantage to exact input; we can up the
WorkingPrecision. When I do this with WorkingPrecision->200 I get 22
solutions; it takse about twice as long. Among them is the one given

eqns = Thread[polys==0]; 
FindRoot[eqns, {u, 1}, {x, 1}, {y, 1}, {z, 1},
        WorkingPrecision -> 30, MaxIterations -> 50]

which is how Paul found an isolated one.

This NSolve is not yet avaliable so for now FindRoot or FindMinimum
would be the best functions to use.

Daniel Lichtblau
Wolfram Research

  • Prev by Date: algebra problem, need help fast!!!
  • Next by Date: Re: Abs and derivative problems
  • Previous by thread: Re: I have A Problem
  • Next by thread: Re: Multinormal CDF and Mathematica