# Simplify

A complicated mathematical expression can often be transformed into a form that is easier to understand.

The ce.simplify() function tries expanding, factoring and applying many other transformations to find a simple a simpler form of a symbolic expression.

## Defining "Simplest"

In some cases there might be multiple equivalent forms for an expression. Deciding which is "the simplest" might depend on how the complexity is measured.

For example: $$(x + 4)(x-5)$$ and $$x^2 -x -20$$ represent the same expression.

By default, the complexity of an expression is measured by counting the number of operations in the expression, and giving an increasing cost to:

• integers with fewer digits
• integers with more digits
• other numeric values
• add, multiply, divide
• subtract and negate
• square root and root
• exp
• power and log
• trigonometric function
• inverse trigonometric function
• hyperbolic functions
• inverse hyperbolic functions
• other functions

To influence how the complexity of an expression is measured, specify a cost function in the compute engine.

## Numeric Simplifications

The ce.simplify() function will apply some numeric simplifications, such as combining small integer and rational values, simplifying division by 1, addition or subtraction of 0, etcâ€¦

It avoids making any simplification that could result in a loss of precision. For example, $$10^{300} + 1$$ cannot be simplified without losing the least significant digit, so ce.simplify() will return the experssion unmodified.

## Using Assumptions

Assumptions are additional information available about some symbols, for example $$x > 0$$ or $$n \in \N$$.

Some transformations are only applicable if some assumptions can be verified.

For example, if no assumptions about $$x$$ is available the expression $$\sqrt{x^2}$$ cannot be simplified. However, if an assumption that $$x \geq 0$$ is available, then the expression can be simplified to $$x$$.