Skip to main content

Solving system of equations with Root


I have this system of equations. I want to express all variables in terms of x as you can see. x is a parameter.


Solve[{y (z - x) == x^6, x zg - z zg == x z^2 za zb - x z za zb zg, 
za zg - zb zg == z za zb - z za^2 zb, zb - zg == z za zb - z zb^2,
za zb (z - zg) == zg (-zb + zg), za > 0, zb > 0, zg > 0, z > 0}, {y, za, zb, zg, z}, Reals]


However Mathematica doesn't know how to solve it. Solutions show me something called Root and I can't make sense out of any of the expressions I get. What I get is:


y -> ConditionalExpression[((
x^6)/(-x +
Root[-x +
2 x^2 + (1 - 3 x - x^2) #1 + (1 + 2 x - 4 x^2) #1^2 + (-1 +
5 x - x^2) #1^3 + (-1 + x - x^2) #1^4 + x^2 #1^5 &, 3]))

I also tried using reduce which gives me a set of solutions for y:


y == Root[

x^26 + (-x^18 + x^19 - x^20 + 5 x^21) #1 + (-x^12 + x^13 + 3 x^14 -
4 x^15 + 10 x^16) #1^2 + (x^6 - x^7 + 5 x^8 + 3 x^9 - 6 x^10 +
10 x^11) #1^3 + (1 - x + 3 x^3 + x^4 - 4 x^5 +
5 x^6) #1^4 + (-1 + x) #1^5 &, 1]

I've read this thread: How do I work with Root objects? but it doesn't solve my problem since I have this free parameter x that ruins everything. For example if I try ToRadicals or numerical value I don't get anything. How do I make sense of it? How can I proceed to get the full expression for y in terms of x without Root? I tried FindInstance but it doesn't work in my case since I have this free parameter x. If this helps I'm only interested in y, the rest of the parameters don't really matter. Any help is greatly appreciated.



Answer



From a comment, it seems maybe the OP would like to rationalize the expression:


Product[y - 
Root[x^26 + (-x^18 + x^19 - x^20 + 5 x^21) #1 + (-x^12 + x^13 +

3 x^14 - 4 x^15 + 10 x^16) #1^2 + (x^6 - x^7 + 5 x^8 +
3 x^9 - 6 x^10 + 10 x^11) #1^3 + (1 - x + 3 x^3 + x^4 -
4 x^5 + 5 x^6) #1^4 + (-1 + x) #1^5 &, i], {i,
5}] // FullSimplify
(*
(1/(-1 + x))(x^26 + x^18 (-1 + x - x^2 + 5 x^3) y +
x^12 (-1 + x (1 + x (3 + 2 x (-2 + 5 x)))) y^2 +
x^6 (1 + x (-1 + x (5 + x (3 + 2 x (-3 + 5 x))))) y^3 + (1 - x +
3 x^3 + x^4 - 4 x^5 + 5 x^6) y^4 + (-1 + x) y^5)
*)


Set this equal to zero to represent the locus. Note that the product may or may not have introduced extraneous solutions.




Addendum


Silly me, this is equivalent to, with less work, the following:


First[
Root[x^26 + (-x^18 + x^19 - x^20 + 5 x^21) #1 + (-x^12 + x^13 +
3 x^14 - 4 x^15 + 10 x^16) #1^2 + (x^6 - x^7 + 5 x^8 +
3 x^9 - 6 x^10 + 10 x^11) #1^3 + (1 - x + 3 x^3 + x^4 -
4 x^5 + 5 x^6) #1^4 + (-1 + x) #1^5 &, 1]

]@y
(*
x^26 + (-x^18 + x^19 - x^20 + 5 x^21) y + (-x^12 + x^13 + 3 x^14 -
4 x^15 + 10 x^16) y^2 + (x^6 - x^7 + 5 x^8 + 3 x^9 - 6 x^10 +
10 x^11) y^3 + (1 - x + 3 x^3 + x^4 - 4 x^5 + 5 x^6) y^4 + (-1 +
x) y^5
*)

There is still the general caveat about rationalizing leads potentially to extraneously solutions.


Comments

Popular posts from this blog

functions - Get leading series expansion term?

Given a function f[x] , I would like to have a function leadingSeries that returns just the leading term in the series around x=0 . For example: leadingSeries[(1/x + 2)/(4 + 1/x^2 + x)] x and leadingSeries[(1/x + 2 + (1 - 1/x^3)/4)/(4 + x)] -(1/(16 x^3)) Is there such a function in Mathematica? Or maybe one can implement it efficiently? EDIT I finally went with the following implementation, based on Carl Woll 's answer: lds[ex_,x_]:=( (ex/.x->(x+O[x]^2))/.SeriesData[U_,Z_,L_List,Mi_,Ma_,De_]:>SeriesData[U,Z,{L[[1]]},Mi,Mi+1,De]//Quiet//Normal) The advantage is, that this one also properly works with functions whose leading term is a constant: lds[Exp[x],x] 1 Answer Update 1 Updated to eliminate SeriesData and to not return additional terms Perhaps you could use: leadingSeries[expr_, x_] := Normal[expr /. x->(x+O[x]^2) /. a_List :> Take[a, 1]] Then for your examples: leadingSeries[(1/x + 2)/(4 + 1/x^2 + x), x] leadingSeries[Exp[x], x] leadingSeries[(1/x + 2 + (1 - 1/x...

mathematical optimization - Minimizing using indices, error: Part::pkspec1: The expression cannot be used as a part specification

I want to use Minimize where the variables to minimize are indices pointing into an array. Here a MWE that hopefully shows what my problem is. vars = u@# & /@ Range[3]; cons = Flatten@ { Table[(u[j] != #) & /@ vars[[j + 1 ;; -1]], {j, 1, 3 - 1}], 1 vec1 = {1, 2, 3}; vec2 = {1, 2, 3}; Minimize[{Total@((vec1[[#]] - vec2[[u[#]]])^2 & /@ Range[1, 3]), cons}, vars, Integers] The error I get: Part::pkspec1: The expression u[1] cannot be used as a part specification. >> Answer Ok, it seems that one can get around Mathematica trying to evaluate vec2[[u[1]]] too early by using the function Indexed[vec2,u[1]] . The working MWE would then look like the following: vars = u@# & /@ Range[3]; cons = Flatten@{ Table[(u[j] != #) & /@ vars[[j + 1 ;; -1]], {j, 1, 3 - 1}], 1 vec1 = {1, 2, 3}; vec2 = {1, 2, 3}; NMinimize[ {Total@((vec1[[#]] - Indexed[vec2, u[#]])^2 & /@ R...

What is and isn't a valid variable specification for Manipulate?

I have an expression whose terms have arguments (representing subscripts), like this: myExpr = A[0] + V[1,T] I would like to put it inside a Manipulate to see its value as I move around the parameters. (The goal is eventually to plot it wrt one of the variables inside.) However, Mathematica complains when I set V[1,T] as a manipulated variable: Manipulate[Evaluate[myExpr], {A[0], 0, 1}, {V[1, T], 0, 1}] (*Manipulate::vsform: Manipulate argument {V[1,T],0,1} does not have the correct form for a variable specification. >> *) As a workaround, if I get rid of the symbol T inside the argument, it works fine: Manipulate[ Evaluate[myExpr /. T -> 15], {A[0], 0, 1}, {V[1, 15], 0, 1}] Why this behavior? Can anyone point me to the documentation that says what counts as a valid variable? And is there a way to get Manpiulate to accept an expression with a symbolic argument as a variable? Investigations I've done so far: I tried using variableQ from this answer , but it says V[1...