[Date Index]
[Thread Index]
[Author Index]
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**
| |