Main Content

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 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 x2 + 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:

  1. To clear the assumption, enter

    syms x
  2. To delete the symbolic object, enter

    clear x

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

Related Topics