Documentation

Use Assumptions on Symbolic Variables

Default Assumption

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

Set Assumptions

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.

Check Existing Assumptions

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.

Delete Symbolic Objects and Their Assumptions

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, 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. For example, the assumption that x is real causes the polynomial x2 + 1 to have no roots:

syms x real
clear x
syms 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

assume(x,'clear')

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 subsequent commands:

  1. To clear the assumption, enter

    assume(x,'clear')
  2. To delete the symbolic object, enter

    clear x

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

Was this topic helpful?