Documentation

## Solve Algebraic Equations and Inequalities

MuPAD® notebooks will be removed in a future release. Use MATLAB® live scripts instead.

MATLAB live scripts support most MuPAD functionality, though there are some differences. For more information, see Convert MuPAD Notebooks to MATLAB Live Scripts.

### 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:

```S1 := solve(x^3 - 1, x); S2 := solve(x^3 = 8, x); S3 := solve(x^3 - 3*x^2 = 1 - 3*x, x)```

`sol := S1[3]`

### 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: polylib::realroots(p)```

### Solve Inequalities

`solve` can solve inequalities. Typically, the solution set of an inequality is `interval` or a union of intervals:

`solve(x^2 > 5, x)`

Use `solve` to solve the following inequality. The solution includes the set of all complex numbers, excluding and :

`solve(x^2 <> 7, x)`

#### Mathematical Modeling with Symbolic Math Toolbox

Get examples and videos