## 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 `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:

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.

## Support

#### Mathematical Modeling with Symbolic Math Toolbox

Get examples and videos