MathGroup Archive 2010

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

Search the Archive

FindRoot

  • To: mathgroup at smc.vnet.net
  • Subject: [mg111096] FindRoot
  • From: Themis Matsoukas <tmatsoukas at me.com>
  • Date: Tue, 20 Jul 2010 03:43:18 -0400 (EDT)

I have a cubic polynomial in z (ZEQ) that depends on a parameter p.  The polynomial has three real roots when p is in the interval (p1, p2).  I then define function F[X] to be the ratio of the Max-to-Min (real) roots of ZEQ when p has the value X. Of course, F[X] makes sense only when ZEQ has three real roots, which restricts p to be in the interval p1<p<p2. 

The problem: while F[X] is evaluated (and plotted) correctly, if I try to solve for, say F[X]=6, I get a wrong answer (the correct answer is X=0.4). I suspect the problem is that Mathematica does not restrict the evaluation of F[X] within the interval (p1,p2). If I don't want to write my own routine for the root, is there a way to restrict FindRoot to work only inside the interval (p1, p2)?

ZEQ=-0.049973 p^2+(0.44137p-0.00873 p^2) z-z^2+z^3;
{p1,p2}={0.133652,0.690323};
F[X_]:=(
z123=Sort[z/.Solve[(ZEQ/.p->X)==0,z]];
z123[[3]]/z123[[2]]
);

FindRoot[F[X]-6, {X, 0.40}]
F[X/.%]-6
{X->0.586195-5.08604*10^-16 I}
-3.40038

TableForm[Table[{X, F[X]-6}, {X, 0.38, 0.42, 0.01}]]
0.38	0.55303
0.39	0.266973
0.40	-0.00436745
0.41	-0.262155
0.42	-0.50744



Thanks

Themis


  • Prev by Date: Re: A ODE I need to solve
  • Next by Date: Re: Avoid the use of certain functions
  • Previous by thread: Multiple packages in a single application
  • Next by thread: Re: FindRoot