Mathematica Real Part of Solve output

  • Mathematica
  • Thread starter trow4
  • Start date
  • #1
2
0

Main Question or Discussion Point

I am trying to solve 0.125 + 0.5 (1-x)^3 - (12.5/y)==0 for x, when y is real and y>0. I thus want to find x= 1- 0.63 ((100-y)/y)^(1/3), so that if y=100, x=1. Mathematica's Solve yields 3 roots:

sol=Solve[0.125 + 0.5 (1 - x)^3 - (12.5/y) == 0, x]

Root 1:
1.+((0.+0. I) y^(1/3))/(-100.+1. y)^(1/3)-((0.31498+0.545562 I) (-100.+1. y)^(1/3))/y^(1/3),

Root 2:
1.+((0.+0. I) y^(1/3))/(-100.+1. y)^(1/3)-((0.31498-0.545562 I) (-100.+1. y)^(1/3))/y^(1/3),

Root 3:
1.+(0. y^(1/3))/(-100.+1. y)^(1/3)+(0.629961 (-100.+1. y)^(1/3))/y^(1/3)



If I now evaluate root 1 at y=100, I get an Infy error because of division by zero. How can I drop the imaginary part of this function? I have tried (without succes) a bunch of things such as:

xroot1=x/.sol[[1]]

*ComplexExpand[xroot1]

*Assuming[p > 0, {Simplify[xroot1]}]
 

Answers and Replies

  • #2
phyzguy
Science Advisor
4,559
1,489
Try:

Limit[xroot1,y->100]
 
  • #3
2
0
Marvelous, that indeed does the trick. However, if the polynomial is of a higher order (see below) I again run into trouble.

For instance, if I want to find the real root of 0.1 + 0.5 (1-x)^4 - (1/y)=0, (which you can easily solve for x=1- [ 2 (1-0.1 y ) / y ]^(1/4) ), I again use

sol = Solve[0.1 + 0.5 (1 - x)^4 - (1/y) == 0, x];

If I now plot the real part of these roots, none of them look like the one found above.

e.g. Plot[Re[(x /. sol[[1]])], {y, 0, 10}]

Is the solve algorithm not suited for solving equations of this order or am I doing something very very wrong?

EDIT1: It seems to be a Mathematica 7 problem. In Mathematica 8 the plots are just fine. Is this a known bug?
 
Last edited:
  • #4
phyzguy
Science Advisor
4,559
1,489
Interesting. I think what you are looking at is numerical round-off error. When you use a number like 0.1 in Mathematica, it only keeps a certain number of digits, I think 6. However, if you use the number 1/10, then it treats it as an exact mathematical quantity and there is no round-off error. If I use:

sol = Solve[1/10 + 1/2 (1 - x)^4 - (1/y) == 0, x]
Plot[Re[(x /. sol[[1]])], {y, 0, 10}]

Then everything looks fine. i am using Mathematica 7.0.1.
 

Related Threads on Mathematica Real Part of Solve output

Replies
4
Views
6K
  • Last Post
Replies
8
Views
793
Replies
2
Views
712
Replies
4
Views
12K
Replies
2
Views
2K
Replies
5
Views
8K
Replies
2
Views
3K
Replies
5
Views
7K
Replies
1
Views
3K
Top