Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have to work a lot with three functions $\;o_1(t), o_2(t), o_3(t)\;$ that are solutions to the certain system of differential equations:

Halp = {
  D[o1[t], t] == o1[t]*o2[t] + o1[t]*o3[t] - o2[t]*o3[t], 
  D[o2[t], t] == o1[t]*o2[t] + o2[t]*o3[t] - o1[t]*o3[t],
  D[o3[t], t] == o1[t]*o3[t] + o2[t]*o3[t] - o1[t]*o2[t]}
sol = DSolve[Halp, {o1[t], o2[t], o3[t]}, {t}]

The system cannot be solved explicitly with Mathematica, but I do not need the solution. What I would like to do is computing higher order derivatives assuming that $o_1(t)$, $o_2(t)$, and $o_3(t)$ are solutions to the above system.

How could I tell Mathematica to do this?

share|improve this question
up vote 7 down vote accepted

There are many ways which one could exploit. For example let's use calculate o1''[t] eliminating o1'[t], o2'[t], o3'[t]. We can use Eliminate:

#1/.( Eliminate[ Join[ D[Halp, t], Halp], {#2, #3}] //ToRules)&[o1''[t], o2''[t], o3''[t]]
2 o1[t] o2[t]^2 + 2 o1[t] o2[t] o3[t] - 2 o2[t]^2 o3[t] + 2 o1[t] o3[t]^2 - 2 o2[t] o3[t]^2 

Changing the order in the square bracket we can calculate o2''[t] and o3''[t].

For the third order derivative of e.g. o1[t] we can eliminate other dependent variables in many different ways, let's point out one of them:

#1 /.( 
Eliminate[ Join[ D[Halp, {t, 2}], D[Halp, t], Halp], {##2}] 
//ToRules) &[o1'''[t], o2'''[t], o3'''[t], o2''[t], o3''[t], o1''[t]]
  2 o1[t]^2 o2[t]^2 + 4 o1[t] o2[t]^3 - 4 o1[t]^2 o2[t] o3[t] + 8 o1[t] o2[t]^2 o3[t]
- 4 o2[t]^3 o3[t] + 2 o1[t]^2 o3[t]^2 + 8 o1[t] o2[t] o3[t]^2 - 10 o2[t]^2 o3[t]^2 
+ 4 o1[t] o3[t]^3 - 4 o2[t] o3[t]^3  

In the above we eliminated all dependent variables starting from the second position in the square bracket (note very useful sign ##n i.e. SlotSequence ) and calculated o1'''[t]. Of course you can try to get rid of different dependent variables. In general this is a difficult issue to decide which dependent variables could be eliminated and how they could be represented by another variables. I suggest to take a closer look at GroebnerBasis with the MonomialOrder -> EliminationOrder option.

GroebnerBasis[ polys, vars, elims, MonomialOrder -> EliminationOrder]

If given equations are relatively simple you can't observe a common problem in differential elimination - so called intermediate expresssion swell. For interesting mathematical issues related to the problem I'd suggest to study e.g. a recent monograph Involution by Werner Seiler (Springer 2009). However I couldn't mention interesting packages in Mathematica related to differential elimination (there are such packages e.g. in Maple).

share|improve this answer
Thanks a lot for the answer! – Alexey Basalaev Dec 28 '13 at 13:45

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.