In Symbolic Math
Toolbox™, symbolic variables are complex
variables by default. For example, if you declare `z`

as
a symbolic variable using

syms z

then MATLAB^{®} assumes that `z`

is a complex
variable. You can always check if a symbolic variable is assumed to
be complex or real by using `assumptions`

.
If `z`

is complex, `assumptions(z)`

returns
an empty symbolic object:

assumptions(z)

ans = Empty sym: 1-by-0

To set an assumption on a symbolic variable, use the `assume`

function. For example, assume
that the variable `x`

is nonnegative:

syms x assume(x >= 0)

`assume`

replaces all previous assumptions
on the variable with the new assumption. If you want to add a new
assumption to the existing assumptions, use `assumeAlso`

.
For example, add the assumption that `x`

is also
an integer. Now the variable `x`

is a nonnegative
integer:

assumeAlso(x,'integer')

`assume`

and `assumeAlso`

let
you state that a variable or an expression belongs to one of these
sets: integers, positive numbers, rational numbers, and real numbers.

Alternatively, you can set an assumption while declaring a symbolic
variable using `sym`

or `syms`

.
For example, create the real symbolic variables `a`

and `b`

,
and the positive symbolic variable `c`

:

a = sym('a', 'real'); b = sym('b', 'real'); c = sym('c', 'positive');

or more efficiently:

syms a b real syms c positive

The assumptions that you can assign to a symbolic object with `sym`

or `syms`

are
real, rational, integer and positive.

To see all assumptions set on a symbolic variable, use the `assumptions`

function with the name of
the variable as an input argument. For example, this command returns
the assumptions currently used for the variable `x`

:

assumptions(x)

To see all assumptions used for all symbolic variables in the MATLAB workspace,
use `assumptions`

without input arguments:

assumptions

For details, see Check Assumptions Set On Variables.

Symbolic objects and their assumptions are stored separately.
When you set an assumption that `x`

is real using

syms x assume(x,'real')

you actually create a symbolic object `x`

and
the assumption that the object is real. The object is stored in the MATLAB workspace,
and the assumption is stored in the symbolic engine. When you delete
a symbolic object from the MATLAB workspace using

clear x

the assumption that `x`

is real stays in the symbolic engine. If you declare
a new symbolic variable `x`

later using `sym`

, it
inherits the assumption that `x`

is real instead of getting a
default assumption. If later you solve an equation and simplify an expression with
the symbolic variable `x`

, you could get incomplete results.

If you declare a variable using `syms`

, existing assumptions
are cleared. If you declare a variable using `sym`

, existing
assumptions are not cleared.

For example, the assumption that `x`

is real causes the
polynomial `x`

^{2} + 1 to have no
roots:

syms x real clear x x = sym('x'); solve(x^2 + 1 == 0, x)

ans = Empty sym: 0-by-1

The complex roots of this polynomial disappear because the symbolic
variable `x`

still has the assumption that `x`

is
real stored in the symbolic engine. To clear the assumption, enter

syms x

After you clear the assumption, the symbolic object stays in the MATLAB workspace. If you want to remove both the symbolic object and its assumption, use two commands:

To clear the assumption, enter

`syms x`

To delete the symbolic object, enter

`clear x`

For details on clearing symbolic variables, see Clear Assumptions and Reset the Symbolic Engine.