Mathematica Mathematica Real Part of Solve output

AI Thread Summary
The discussion revolves around solving equations in Mathematica, specifically focusing on obtaining real roots from complex outputs. The user encounters issues with division by zero when evaluating roots at specific values of y, particularly y=100. Attempts to eliminate the imaginary parts of the solutions yield mixed results, with some methods proving ineffective. It is noted that the problems may stem from numerical round-off errors in Mathematica 7, which are resolved in Mathematica 8 by using exact fractions instead of decimal approximations. The conversation highlights the importance of software version and numerical precision in mathematical computations.
trow4
Messages
2
Reaction score
0
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]}]
 
Physics news on Phys.org
Try:

Limit[xroot1,y->100]
 
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:
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.
 

Similar threads

Replies
1
Views
2K
Replies
1
Views
1K
Replies
19
Views
2K
Replies
9
Views
3K
Replies
14
Views
3K
Replies
2
Views
2K
Replies
1
Views
2K
Back
Top