Re: Selecting Real Roots, Again
- To: mathgroup at smc.vnet.net
- Subject: [mg67140] Re: Selecting Real Roots, Again
- From: bghiggins at ucdavis.edu
- Date: Sat, 10 Jun 2006 04:53:49 -0400 (EDT)
- References: <e6b5q5$d3c$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
I believe you need to have a numeric value since Solve returns a root function as the solution for your higher order polynomial. Thus Select will not work. An alternative is to use FindInstance to see the roots as y and x vary in the required domain. Here are 10 instances of those roots: FindInstance[.9 x^10 + .1 x^2 == y && 0 = x = 1 && 0 = y = 1, {x, y}, 10] // N {{x -> 0., y -> 0.}, {x -> 0.0728543, y -> 0.000530775}, {x -> 0.121756, y -> 0.00148246}, {x -> 0.162675, y -> 0.00264632}, {x -> 0.297405, y -> 0.00884986}, {x -> 0.406188, y -> 0.0166089}, {x -> 0.46507, y -> 0.022055}, {x -> 0.651697, y -> 0.0549073}, {x -> 0.933134, y -> 0.53756}, {x -> 1., y -> 1.}} Another approach is to use DeleteCases to eliminate complex roots and those roots that lie ouside the domain for a given value of y say: realRoot1[y1_?NumericQ] := DeleteCases[N[x /. Solve[.9 x^10 + .1 x^2 == y, x] /. y -> y1], Complex[_, _] | x_Real /; (x < 0 || x > 1)] In[92]:= realRoot1[0.5] Out[92]= {0.925368} You can use the above function to plot the roots for y in the required range Plot[Evaluate[realRoot1[y1]], {y1, 0, 1}] Hope this helps, Brian DOD wrote: > I've read the many posts already here about how to get mathematica to > select real roots for you, but I have a slightly(very slighty, I > thought) different problem ,and I don't know how to get mathematica to > do what I want. > > I want to get the solution for a polynomial of the following form: > d x^n + (1-d) x^2 =y > > so for example, I do > Solve[.9 x^10 + .1 x^2 ==y,x] > and I get a whole bunch of solution, very good. For my purposes, y > lives in the [0,1], as must the solution. So I can see, by hand, which > root I want; exactly one root is both real, and has solutions in my > inverval. So I want to tell mathematica to: > > A: look at only solutions x* that are real over y in [0,1] > > and > > B: of those solutions, give the one x* that itself lies is [0,1]. > > So, when I try to do something from reading previous posts, I cannot > get it to work: > In[24]:= > Select[Solve[.9 x^10 + .1 x^2 ==y,x],Element[x/.#,Reals]&] > > Out[24]= > {} > or perhaps > In[41]:= > Select[Solve[.9 x^10 + .1 x^2 > ==y,x],Assuming[Element[y,Reals],Eement[x/.#,Reals]]&] > Out[41]= > {} > > > So How to I tell mathematica to do this?