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.
Note
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.