# Representation of holonomic functions in SymPy¶

Class `DifferentialOperator`

is used to represent the annihilator
but we create differential operators easily using the function
`DifferentialOperators()`

. Class `HolonomicFunction`

represents a holonomic function.

Let’s explain this with an example:

Take \(\sin(x)\) for instance, the differential equation satisfied by it is \(y^{(2)}(x) + y(x) = 0\). By definition we conclude it is a holonomic function. The general solution of this ODE is \(C_{1} \cdot \sin(x) + C_{2} \cdot \cos(x)\) but to get \(\sin(x)\) we need to provide initial conditions i.e. \(y(0) = 0, y^{(1)}(0) = 1\).

To represent the same in this module one needs to provide the differential
equation in the form of annihilator. Basically a differential operator is an
operator on functions that differentiates them. So \(D^{n} \cdot y(x) = y^{(n)}(x)\)
where \(y^{(n)}(x)\) denotes `n`

times differentiation of \(y(x)\) with
respect to `x`

.

So the differential equation can also be written as \(D^{2} \cdot y(x) + y(x) = 0\) or \((D^{2} + 1) \cdot y(x) = 0\). The part left of \(y(x)\) is the annihilator i.e. \(D^{2}+1\).

So this is how one will represent \(\sin(x)\) as a Holonomic Function:

```
>>> from sympy.holonomic import DifferentialOperators, HolonomicFunction
>>> from sympy.abc import x
>>> from sympy import ZZ
>>> R, D = DifferentialOperators(ZZ.old_poly_ring(x), 'D')
>>> HolonomicFunction(D**2 + 1, x, 0, [0, 1])
HolonomicFunction((1) + (1)*D**2, x, 0, [0, 1])
```

The polynomial coefficients will be members of the ring `ZZ[x]`

in the example.
The `D`

operator returned by the function `DifferentialOperators()`

can
be used to create annihilators just like SymPy expressions.
We currently use the older implementations of rings in SymPy for priority mechanism.