Elementary differentials


In [1]:
using Flows

In [2]:
@t_vars t
@x_vars u
@funs F


Out[2]:
(F,)

In [3]:
ex = E(F,t,u)


Out[3]:
$\mathcal{E}_{F}(t,u)$

In [4]:
ex = t_derivative(ex, t)


Out[4]:
$F(\mathcal{E}_{F}(t,u))$

In [5]:
ex = t_derivative(ex, t)


Out[5]:
$F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u))$

In [6]:
ex = t_derivative(ex, t)


Out[6]:
$F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u))+F''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))$

In [7]:
ex = t_derivative(ex,t )


Out[7]:
$3F''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+F'''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+F'(\mathcal{E}_{F}(t,u))\cdot (F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u))+F''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u))))$

The last expression is not fully expanded, it is a linear combination consisting of 3 terms:


In [8]:
length(ex.terms)


Out[8]:
3

If we expand it, we obtain a linear combination of 4 terms, corresponding to the 4 elementary differentials (Butcher trees) of order 4:


In [9]:
ex = expand(ex)


Out[9]:
$3F''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u))+F'''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+F'(\mathcal{E}_{F}(t,u))\cdot F''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))$

In [10]:
length(ex.terms)


Out[10]:
4

In [11]:
ex = expand(t_derivative(ex, t))


Out[11]:
$F'(\mathcal{E}_{F}(t,u))\cdot F'''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+3F'(\mathcal{E}_{F}(t,u))\cdot F''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u))+F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+F^{(4)}(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+4F''(\mathcal{E}_{F}(t,u))(F''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u))),F(\mathcal{E}_{F}(t,u)))+4F''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+6F'''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+3F''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)))$

In [12]:
length(ex.terms)


Out[12]:
9

In [13]:
ex = expand(t_derivative(ex, t))


Out[13]:
$10F''(\mathcal{E}_{F}(t,u))(F''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u))),F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)))+3F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+5F''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+10F''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)))+4F'(\mathcal{E}_{F}(t,u))\cdot F''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+15F'''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u))+10F'''(\mathcal{E}_{F}(t,u))(F''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u))),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+3F'(\mathcal{E}_{F}(t,u))\cdot F''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)))+F^{(5)}(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+5F''(\mathcal{E}_{F}(t,u))(F'''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u))),F(\mathcal{E}_{F}(t,u)))+5F''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u))),F(\mathcal{E}_{F}(t,u)))+6F'(\mathcal{E}_{F}(t,u))\cdot F'''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+10F^{(4)}(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+F'(\mathcal{E}_{F}(t,u))\cdot F^{(4)}(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F'''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))+4F'(\mathcal{E}_{F}(t,u))\cdot F''(\mathcal{E}_{F}(t,u))(F''(\mathcal{E}_{F}(t,u))(F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u))),F(\mathcal{E}_{F}(t,u)))+15F''(\mathcal{E}_{F}(t,u))(F''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u))),F(\mathcal{E}_{F}(t,u)))+10F'''(\mathcal{E}_{F}(t,u))(F'(\mathcal{E}_{F}(t,u))\cdot F'(\mathcal{E}_{F}(t,u))\cdot F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)),F(\mathcal{E}_{F}(t,u)))$

In [14]:
length(ex.terms)


Out[14]:
20

In [15]:
ex = expand(t_derivative(ex, t))
print(ex) # Here the LaTeX output of Jupyter gives up...


20F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]])),F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]]))+18F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{2}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]])),F[E_F[t,u]])+15F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]])),F{1}[E_F[t,u]](F[E_F[t,u]]))+45F{4}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]],F[E_F[t,u]])+15F{3}[E_F[t,u]](F{3}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]]),F[E_F[t,u]],F[E_F[t,u]])+5F{1}[E_F[t,u]](F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]])),F[E_F[t,u]]))+10F{1}[E_F[t,u]](F{3}[E_F[t,u]](F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]]),F[E_F[t,u]],F[E_F[t,u]]))+F{1}[E_F[t,u]](F{5}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]]))+15F{3}[E_F[t,u]](F{1}[E_F[t,u]](F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]])),F[E_F[t,u]],F[E_F[t,u]])+15F{3}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]))),F[E_F[t,u]],F[E_F[t,u]])+10F{1}[E_F[t,u]](F{4}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]]))+45F{2}[E_F[t,u]](F{2}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]]),F{1}[E_F[t,u]](F[E_F[t,u]]))+15F{1}[E_F[t,u]](F{3}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]]))+6F{2}[E_F[t,u]](F{4}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]]),F[E_F[t,u]])+18F{2}[E_F[t,u]](F{2}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F{1}[E_F[t,u]](F[E_F[t,u]])),F[E_F[t,u]])+15F{2}[E_F[t,u]](F{3}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]]),F{1}[E_F[t,u]](F[E_F[t,u]]))+F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]))))))+4F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]])),F[E_F[t,u]])))+20F{4}[E_F[t,u]](F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]]),F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]])+5F{1}[E_F[t,u]](F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]))),F[E_F[t,u]]))+60F{3}[E_F[t,u]](F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]]),F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]])+3F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{2}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F{1}[E_F[t,u]](F[E_F[t,u]]))))+10F{1}[E_F[t,u]](F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]])),F{1}[E_F[t,u]](F[E_F[t,u]])))+F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{4}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]])))+4F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{2}[E_F[t,u]](F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]]),F[E_F[t,u]])))+20F{4}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]])),F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]])+6F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{3}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]])),F[E_F[t,u]])+10F{1}[E_F[t,u]](F{2}[E_F[t,u]](F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]]),F{1}[E_F[t,u]](F[E_F[t,u]])))+F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]])))))+60F{3}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]])),F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]])+24F{2}[E_F[t,u]](F{2}[E_F[t,u]](F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]]),F[E_F[t,u]]),F[E_F[t,u]])+10F{1}[E_F[t,u]](F{3}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]])),F[E_F[t,u]],F[E_F[t,u]]))+10F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]])),F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]])))+45F{3}[E_F[t,u]](F{2}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]]),F[E_F[t,u]],F[E_F[t,u]])+5F{1}[E_F[t,u]](F{2}[E_F[t,u]](F{3}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]]),F[E_F[t,u]]))+24F{2}[E_F[t,u]](F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]])),F[E_F[t,u]]),F[E_F[t,u]])+F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{3}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]]))))+6F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]]))),F[E_F[t,u]])+6F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{3}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]],F[E_F[t,u]])))+15F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]))),F{1}[E_F[t,u]](F[E_F[t,u]]))+15F{3}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F{1}[E_F[t,u]](F[E_F[t,u]]),F{1}[E_F[t,u]](F[E_F[t,u]]))+15F{5}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]])+3F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{2}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]]))))+15F{1}[E_F[t,u]](F{2}[E_F[t,u]](F{2}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]]),F[E_F[t,u]]))+10F{2}[E_F[t,u]](F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]]),F{2}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]]))+36F{2}[E_F[t,u]](F{3}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]]),F[E_F[t,u]],F[E_F[t,u]]),F[E_F[t,u]])+F{6}[E_F[t,u]](F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]],F[E_F[t,u]])+6F{2}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F{1}[E_F[t,u]](F[E_F[t,u]])))),F[E_F[t,u]])

In [16]:
length(ex.terms)


Out[16]:
48

Number of elementary differentials

We generate a table of the number of elementary differentials (Butcher trees) up to order 12.
This table is to be compared with https://oeis.org/A000081 or Table 2.1 in

E. Hairer, S.P. Norsett, G. Wanner, Solving Ordinary Differential Equations I, 2nd ed, Springer, 1993.


In [ ]:
ex = E(F,t,u)
ex = expand(t_derivative(ex, t))
println("order\t#terms")
println("---------------")
println(1,"\t",1)
ex = expand(t_derivative(ex, t))
println(2,"\t",1)
for k=3:20
    ex = expand(t_derivative(ex, t))
    println(k,"\t", length(ex.terms))
end


order	#terms
---------------
1	1
2	1
3	2
4	4
5	9
6	20
7	48
8	115
9	286
10	719
11	1842
12	4766
13	12486
14	32973
15	87811
16	235381
17	

In [ ]:


In [ ]: