Note: This page has been translated by MathWorks. Click here to see

To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

Symbolic Math
Toolbox™ offers both symbolic and numeric equation
solvers. This topic shows you how to solve an equation symbolically
using the symbolic solver `solve`

. To compare symbolic
and numeric solvers, see Select Numeric or Symbolic Solver.

If `eqn`

is an equation, ```
solve(eqn,
x)
```

solves `eqn`

for the symbolic variable `x`

.

Use the `==`

operator to specify the familiar
quadratic equation and solve it using `solve`

.

syms a b c x eqn = a*x^2 + b*x + c == 0; solx = solve(eqn, x)

solx = -(b + (b^2 - 4*a*c)^(1/2))/(2*a) -(b - (b^2 - 4*a*c)^(1/2))/(2*a)

`solx`

is a symbolic vector containing the
two solutions of the quadratic equation. If the input `eqn`

is
an expression and not an equation, `solve`

solves
the equation `eqn == 0`

.

To solve for a variable other than `x`

, specify
that variable instead. For example, solve `eqn`

for `b`

.

solb = solve(eqn, b)

solb = -(a*x^2 + c)/x

If you do not specify a variable, `solve`

uses `symvar`

to
select the variable to solve for. For example, `solve(eqn)`

solves `eqn`

for `x`

.

`solve`

does not automatically return all
solutions of an equation. Solve the equation `cos(x) == -sin(x)`

.
The `solve`

function returns one of many solutions.

syms x solx = solve(cos(x) == -sin(x), x)

solx = -pi/4

To return all solutions along with the parameters in the solution
and the conditions on the solution, set the `ReturnConditions`

option
to `true`

. Solve the same equation for the full
solution. Provide three output variables: for the solution to `x`

,
for the parameters in the solution, and for the conditions on the
solution.

syms x [solx, param, cond] = solve(cos(x) == -sin(x), x, 'ReturnConditions', true)

solx = pi*k - pi/4 param = k cond = in(k, 'integer')

`solx`

contains the solution for `x`

,
which is `pi*k - pi/4`

. The `param`

variable
specifies the parameter in the solution, which is `k`

.
The `cond`

variable specifies the condition ```
in(k,
'integer')
```

on the solution, which means `k`

must
be an integer. Thus, `solve`

returns a periodic
solution starting at `pi/4`

which repeats at intervals
of `pi*k`

, where `k`

is an integer.

You can use the solutions, parameters, and conditions returned
by `solve`

to find solutions within an interval
or under additional conditions.

To find values of `x`

in the interval `-2*pi<x<2*pi`

,
solve `solx`

for `k`

within that
interval under the condition `cond`

. Assume the condition `cond`

using `assume`

.

assume(cond) solk = solve(-2*pi<solx, solx<2*pi, param)

solk = -1 0 1 2

To find values of `x`

corresponding to these
values of `k`

, use `subs`

to substitute
for `k`

in `solx`

.

xvalues = subs(solx, solk)

xvalues = -(5*pi)/4 -pi/4 (3*pi)/4 (7*pi)/4

To convert these symbolic values into numeric values for use
in numeric calculations, use `vpa`

.

xvalues = vpa(xvalues)

xvalues = -3.9269908169872415480783042290994 -0.78539816339744830961566084581988 2.3561944901923449288469825374596 5.4977871437821381673096259207391

The previous sections used `solve`

to solve
the equation `cos(x) == -sin(x)`

. The solution to
this equation can be visualized using plotting functions such as `fplot`

and `scatter`

.

Plot both sides of equation `cos(x) == -sin(x)`

.

fplot(cos(x)) hold on grid on fplot(-sin(x)) title('Both sides of equation cos(x) = -sin(x)') legend('cos(x)','-sin(x)','Location','best','AutoUpdate','off')

Calculate the values of the functions at the values of `x`

,
and superimpose the solutions as points using `scatter`

.

yvalues = cos(xvalues)

yvalues =$$\left(\begin{array}{c}-0.70710678118654752440084436210485\\ 0.70710678118654752440084436210485\\ -0.70710678118654752440084436210485\\ 0.70710678118654752440084436210485\end{array}\right)$$

scatter(xvalues, yvalues)

As expected, the solutions appear at the intersection of the two plots.

If results look complicated, `solve`

is stuck,
or if you want to improve performance, see, Troubleshoot Equation Solutions from solve Function.