Mathematica How to distinguish exact roots using Solve?

  • Thread starter Thread starter aheight
  • Start date Start date
  • Tags Tags
    Roots
AI Thread Summary
The discussion centers on distinguishing when the Solve function in Mathematica returns exact solutions versus solutions in terms of Root objects. An example illustrates that when solving a polynomial that cannot be expressed in radicals, Solve returns Root objects, while a different polynomial that can be solved exactly yields radical solutions. To determine the type of solution returned, users can implement conditional statements that check for Root objects. The pattern matching technique using "_Root" or the Head function can be employed to identify if the solution is a Root. Additionally, Root objects can be converted to numerical approximations using N or transformed into radical form with ToRadicals if necessary.
aheight
Messages
318
Reaction score
108
Can someone help me distinguish when Solve[polynomial==0,x] returns exact solutions as opposed to solutions in terms of Roots? For example, if I code:

myroots = x /. Solve[1/2 + 1/5 x + 9/10 x^2 + 2/3 x^3 - 1/5 x^4 + 3/11 x^5 == 0, x]

this cannot be solved in terms of radicals so Solve returns Root objects:

{Root[165+66 #1+297 #1^2+220 #1^3-66 #1^4+90 #1^5&,1],
Root[165+66 #1+297 #1^2+220 #1^3-66 #1^4+90 #1^5&,2],
Root[165+66 #1+297 #1^2+220 #1^3-66 #1^4+90 #1^5&,3],
Root[165+66 #1+297 #1^2+220 #1^3-66 #1^4+90 #1^5&,4],
Root[165+66 #1+297 #1^2+220 #1^3-66 #1^4+90 #1^5&,5]}

but
myroots = x /. Solve[1/2 + 1/5 x + 9/10 x^2 + 2/3 x^3 - 1/5 x^4 == 0, x]

returns exact solutions in terms of radicals. I can't figure out how to distinguish the two as in:

If[solve returns exact solutions,
do this;
,
else if Roots are returned do this
]

Can someone help me do this?
 
Physics news on Phys.org
A Root is an exact numeric quantity. You can use N on it to get an approximate value to any degree of precision needed. You can also use ToRadicals on it if needed.
 
You should read the help files on pattern matching. The pattern which matches a Root object is "_Root". Or you can use Head, which returns the head of an expression:

Code:
If[Head[expr]===Root, ...]
 
  • Like
Likes aheight

Similar threads

Replies
2
Views
2K
Replies
2
Views
1K
Replies
1
Views
2K
Replies
1
Views
3K
Replies
2
Views
3K
Back
Top