Documentation Center

  • Trial Software
  • Product Updates

Solve Algebraic Equations and Inequalities

Specify Right Side of Equation

The solver accepts both equations and expressions. If you call solve for an expression, the command assumes the right side to be 0:

solve(x^3 - 1, x);
solve(x^3 = 8, x);
solve(x^3 - 3*x^2 = 1 - 3*x, x)

Specify Equation Variables

Specifying the variable that you want to solve an equation for is optional. If you specify a variable, the solve command returns solutions as a set of numbers. Otherwise, the command returns a set of lists as a solution:

solve(x^2 - 3*x + 2 = 0, x);
solve(x^2 - 3*x + 2 = 0)

If your equation contains symbolic parameters, specify the variable for which you want to solve the equation:

solve(a*x^2 + b*x + c, x)

If you solve an equation with symbolic parameters and do not specify the variable, solve uses all parameters as variables and returns a set of all possible solutions. For example, solving the following equation the solver assumes that both x and y are free variables. when returning all possible solutions for this equation, the solver uses an arbitrary parameter z:

solve(x^3 + y^3)

To specify more than one variable, provide a list of variables as a second argument:

solve(a*x^2 + b*x + c, [a, b, c])

solve also can return an expression as x in S, where x is a list of variables for which you solve an equation, and S is a set of the solution vectors:

solve(a*x + 1/x)

Solve Higher-Order Polynomial Equations

When you solve a higher-order polynomial equation, the solver sometimes uses RootOf to return the results:

solve(x^3 + 2*x + 1 = 0, x)

To get an explicit solution for such equations, try calling the solver with the option MaxDegree. The option specifies the maximal degree of polynomials for which the solver tries to return explicit solutions. By default, MaxDegree=2. Increasing this value, you can get explicit solutions for higher-order polynomials. For example, specify MaxDegree=3 and get explicit solutions instead of RootOf for the third-order polynomial:

solve(x^3 + 2*x + 1 = 0, x, MaxDegree = 3)

When you solve a fifth- or higher-order polynomial equation, the solver might be unable to return the solution explicitly, even with the option MaxDegree:

solve(x^5 + 2*x + 1 = 0, x);
solve(x^5 + 2*x + 1 = 0, x, MaxDegree = 5)

In general, there are no explicit expressions for the roots of polynomials of degrees higher than 4. Setting the option MaxDegree to 4 or a higher value makes no difference.

RootOf symbolically represents the set of the roots of a polynomial. You can use the expressions containing RootOf in your further computations. For example, find the sum over all roots of the polynomial:

sum(S^2 + S + 2, S in RootOf(X^5 + 2*X + 1, X));

To get the numeric approximation of the roots, use the float command:

float(RootOf(X^4 + X + 1, X))

For more details on numeric approximations, see Solving Equations Numerically.

For univariate polynomial equations, MuPAD® also can compute intervals containing the real roots. See Isolating Real Roots of Polynomial Equations.

Find Multiple Roots

By default, the solve command does not return the multiplicity of the roots. When the solution of an equation contains multiple roots, MuPAD removes duplicates:

solve(x^2 - 6*x + 9 = 0, x)

The solver does not display multiple roots because it returns results as a set. A set in MuPAD cannot contain duplicate elements. To obtain polynomial roots with their multiplicities, use the option Multiple:

solve(x^2 - 6*x + 9 = 0, x, Multiple);
solve((x - 1)^3*(x - 2)^7, x, Multiple)

Isolate Real Roots of Polynomial Equations

For some polynomial equations, the solver cannot return the explicit symbolic solutions.

p:= x^5 - 31*x^4/32 + 32*x^3/33 - 33*x^2/34 - 34*x/35 + 35/36:
solve(p, x)

If you prefer a solution in a form other than RootOf and want to avoid numeric methods, use polylib::realroots to find all intervals containing real solutions:

p:= x^5 - 31*x^4/32 + 32*x^3/33 - 33*x^2/34 - 34*x/35 + 35/36:

Was this topic helpful?