diffalg - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim

Overview of the diffalg Package


Calling Sequence


Typical uses and examples for Rosenfeld_Groebner

Analysis of singular solutions


Calling Sequence





Important: The diffalg package has been deprecated. Use the superseding package DifferentialAlgebra instead.


The diffalg package is a collection of commands to handle systems of polynomial differential equations (ODEs and PDEs) and inequations. The functionalities include differential elimination, expansion of the solutions into formal power series, and analysis of singular solutions. The underlying theory and terminology derive from differential algebra. Basic concepts in constructive differential algebra and their representation in the diffalg package are presented in a more substantial way in the page diffalg[differential_algebra].


Each command in the diffalg package can be accessed by using either the long form or the short form of the command name in the command calling sequence.


Important: Prior to any computations with the diffalg package, the appropriate differential indeterminates (dependent variables) and derivation variables (independent variables) with the ranking must be defined with the command differential_ring. This command issues a table (appearing as ODE_ring or PDE_ring) that must be used as a last parameter to most other commands.


Central in this package is the Rosenfeld_Groebner algorithm. This page gives an overview of the functionalities of diffalg illustrated by some basic examples. Pointers to diffalg[differential_algebra] are given for precise definitions.


In this package differential equations are represented by the equivalent differential polynomials (that is, the difference of the right-hand sides and the left-hand sides of the equations). A zero of a differential polynomial is a meromorphic solution of the associated differential equation. The terms derivation variables and differential indeterminates refer respectively to the independent and dependent variables.


In simple terms, Rosenfeld_Groebner decomposes the zero set of a system of differential polynomials into the union of the nonsingular zeros of differential characteristic sets. Each differential characteristic set defines a characterizable component.


Differential characteristic sets, as to be found in the output of Rosenfeld_Groebner, are kinds of canonical forms. Their nonsingular zeros are defined as the solutions of a set of equations plus a set of inequations. A differential characteristic set is minimal among the sets of differential polynomials admitting the same nonsingular zero set. That is, many structural properties of the nonsingular zero set can be read from the differential characteristic set.


For illustration, the decomposition by Rosenfeld_Groebner on a single differential polynomial splits the singular zeros, if any, from the general zero (see example below). As for systems of differential equations, Rosenfeld_Groebner first detects if the system bears inconsistency (contradiction) and therefore has no solution (see example below)


A ranking is an order on the differential indeterminates and all their derivatives that is compatible with derivation. The computations and the differential characteristic sets obtained depend on the chosen ranking. Various properties of the zero set of a system of differential polynomials can be exhibited with an appropriate choice of the ranking. It can answer questions like: do the zeros of the given system satisfy


* Differential equations involving only a specific subset of the differential indeterminates? Computing with an elimination ranking determines the minimal such equations if they exist (see example below).


* Algebraic equations? Computing with an orderly ranking determines these constraints if they exist (see example below).


* An ordinary differential equation in one derivation variable? Computing with a lexicographic ranking determines the minimal such equations if they exist (see example below).


The ranking to be used with the derivation variables and the differential indeterminates are defined with the differential_ring command.


An example of the analysis that can be performed with essential_components on the singular zeros of a differential polynomial is given (see example below).


Power series expansion of the nonsingular zeros of a differential characteristic set can be performed with the power_series_solution routine. Examples are provided in diffalg[power_series_solution] help page.

Typical uses and examples for Rosenfeld_Groebner




Prior to any computations with the diffalg package, the appropriate differential indeterminates (dependent variables) and derivation variables (independent variables) with the ranking must be defined with the command differential_ring. This command issues a table (appearing as ODE_ring or PDE_ring) that must be used as a last parameter to most other commands.

Computing singular solutions


Consider the following Clairaut partial differential equation.

u(x,y) = x*diff(u(x,y),x)+y*diff(u(x,y),y)+diff(u(x,y),x)*diff(u(x,y),y);



Represent it by the differential polynomial p with a more compact syntax, called jet notation.

p := -u[]+x*u[x]+y*u[y]+u[x]*u[y];



Before any manipulation of this differential polynomial, define a differential polynomial ring it belongs to:

R := differential_ring(ranking=[u], derivations=[x,y], notation=jet);



The Clairaut equation under consideration has a singular solution. This is shown by Rosenfeld_Groebner. The result of Rosenfeld_Groebner is a list of tables (appearing as characterizable), each defining a characterizable component.

Clairaut := Rosenfeld_Groebner({p}, R);



Each characterizable component is defined by a differential characteristic set that can be accessed using the equations command. The nonsingular zeros of this differential characteristic set are the zeros at which some additional differential polynomials do not vanish. They can be accessed using the inequations command.

equations(Clairaut[1]), inequations(Clairaut[1]);



equations(Clairaut[2]), inequations(Clairaut[2]);



The second component represents the singular solution of this Clairaut equation while the first represents the general solution of the Clairaut equation.

Detection of inconsistencies in a differential system


Consider the 3 following differential polynomials.










They define the system of differential equations S:p1=0,p2=0,p3=0. Before any manipulation of these differential polynomials, define a structure they belong to. It is possible to work with the Maple notation of derivatives.

R := differential_ring(ranking=[u,v], derivations=[x,y], notation=diff);



Convert to the jet notation, introduced in the previous example.

denote(p1, 'jet', R), denote(p2, 'jet', R), denote(p3, 'jet', R);



What does Rosenfeld_Groebner tell us about the system S?

Rosenfeld_Groebner({p1,p2,p3}, R);


This indicates that the system bears a contradiction: p1, p2, and p3 have no common zero. In this case it is quite easy to detect the contradiction. Differentiating p1 with respect to y produces:

differentiate(p1, y, R);



The meromorphic solutions of S, if they exist, shall make this differential polynomial vanish. They shall also make the following differential polynomial vanish

differentiate(p2, x, R)- p3;



The two equations cannot be satisfied simultaneously: the system S bears a contradiction 1=0 and therefore admits no solution.

Solving ordinary differential systems: Elimination ranking


To perform a chain resolution of a system of ordinary differential equations, use an elimination ranking. Consider the differential system defined by the following set S of differential polynomials in the unknown functions xt,yt,zt.

S := [diff(x(t),t)-x(t)*(x(t)+y(t)), diff(y(t),t)+y(t)*(x(t)+y(t)), diff(x(t),t)^2+diff(y(t),t)^2+diff(z(t),t)^2-1];



Using an elimination ranking where zt>yt>xt, you obtain differential characteristic sets containing a differential polynomial in xt alone, a differential polynomial determining yt in terms of xt, and finally a differential polynomial determining zt in terms of yt and xt. To see more clearly the dependencies of these differential polynomials, use the rewrite_rules command, which is an alternative to the equations command.

R := differential_ring(ranking=[z,y,x], derivations=[t], notation=diff):

G :=Rosenfeld_Groebner(S, R);



rewrite_rules(G[1]); inequations(G[1]);




rewrite_rules(G[2]); inequations(G[2]);




Perform a chain resolution to both components of the result. Note that the singular solution xt=0 must be discarded in the resolution of the first component, as indicated by the differential polynomials of its inequations. The correct complete solution with xt=0 is given by the second component.

Constrained systems: Orderly and mixed rankings


Consider the set of differential polynomials describing the motion of a pendulum, that is, a point mass m suspended from a massless rod of length l under the influence of gravity g, in Cartesian coordinates x,y. The Lagrangian formulation leads to two second order differential equations with an algebraic constraint. T is the Lagrangian multiplier.

P := [m*diff(y(t),t,t)+T(t)*y(t)+g, m*diff(x(t),t,t)+T(t)*x(t), x(t)^2+y(t)^2-l^2];



To manipulate this system, declare the additional constants m,l,g appearing in the coefficients of these differential polynomials.

K := field_extension(transcendental_elements=[m,l,g]);



Orderly Ranking


To find the lowest order differential polynomials vanishing on the zeros of the system modeling the pendulum and in particular all the algebraic constraints (that is, the differential polynomials of order 0), use an orderly ranking.

RO := differential_ring(ranking=[[T,x,y]], derivations=[t], field_of_constants=K, notation=diff):

GO:= Rosenfeld_Groebner(P, RO);















The second component in the output of Rosenfeld_Groebner corresponds to the equilibria of the pendulum. From the first component of the output, it can be seen that the actual motion is described by two first order differential equations with a constraint: the solution depends on only two arbitrary constants.


Mixed Ranking


To obtain the differential system satisfied by x and y alone, eliminate T:

RM := differential_ring(ranking=[T,[x,y]], derivations=[t], field_of_constants=K, notation=diff):

GM:= Rosenfeld_Groebner(P, RM);









Note here that the motion is given by a second order differential equation in yt. Then the Lagrange multiplier is given explicitly in terms of yt and its first derivative.

Solving partial differential system: Lexicographic ranking


To solve overdetermined systems of partial differential equations it is interesting to compute first the ordinary differential equations satisfied by the solutions of the system. For this purpose, a lexicographic ranking must be chosen. Consider the differential system S defining the infinitesimal generators of the symmetry group of the Burgers equations.

Burgers_pde := diff(u(t,x),t)=diff(u(t,x),x,x)-u(t,x)*diff(u(t,x),x);



BurgersSymm := PDEtools:-DeterminingPDE(Burgers_pde, u(t, x), [V1, V2, V3](t, x, u));



Seek the ordinary differential equations with respect to t satisfied by the solutions of this system.

R := differential_ring(ranking=[lex[V3,V2,V1]], derivations=[u,x,t], notation=diff);



G := Rosenfeld_Groebner(map(lhs-rhs, BurgersSymm), R);






There are three independent ordinary differential polynomials with respect to t (the last three of the differential characteristic set). All other ordinary (in t) differential polynomials vanishing on the solutions of BurgersSymm can be written as linear combination of these three with their derivatives.

Analysis of singular solutions


All singular zeros are present in the output of Rosenfeld_Groebner. Only the essential singular zeros are present in the output of essential_components. For first order differential equations:


* The essential singular zeros are envelopes of the nonsingular zeros.


* The other singular zeros are analytically embedded among the nonsingular zeros.


Illustrate this analysis on the differential polynomial Wp (cf. WeierstrassP):

Wp := diff(w(z),z)^2-4*w(z)^3+g2*w(z) +g3;



Generic case g2327g32 :

K := field_extension(transcendental_elements=[g2,g3]);



R := differential_ring(ranking=[w],derivations=[z],notation=diff,field_of_constants=K);









There are three singular zeros: wz=ri, where ri is one of the roots of 4r3g2rg3. There are all three essential singular zeros. As such they are envelopes of the nonsingular zeros of Wp. This can be observed by plotting the real zeros for g2=4,g3=−1:

singsol := {plot({fsolve(-4*r^3+4*r-1,r)},z=-3..3, color=red, thickness=2)}:

galsol1 :={seq(plots[odeplot](dsolve({diff(w(z),z,z)-6*w(z)^2+2,w(ic)=-1,D(w)(ic)=-1.0},

galsol2  := {seq(plots[odeplot](dsolve({diff(w(z),z,z)-6*w(z)^2+2,w(ic)=2,D(w)(ic)=-5.0},

plots[display](singsol union galsol1 union galsol2,title="g2=4,g3=-1",view=[-3..3,-3/2..3]);




Parametrize the equation with g.

Wps := subs(g2=3*g^2,g3=g^3,Wp);



Ks := field_extension(transcendental_elements=[g]);



Rs := differential_ring(ranking=[w],derivations=[z],notation=diff,field_of_constants=Ks):







There are two singular zeros: wz=g and wz=g2. wz=g is an essential singular zero of Wps and therefore is an envelope of the nonsingular zeros of Wps. On the contrary, the singular zero wz=g2 of Wps is not essential and therefore is a limiting case of the nonsingular zeros of Wps. Observe the situation for g=−1:






g2=0, g3=0


The equation is:




R0 := differential_ring(ranking=[w],derivations=[z],notation=diff):







There is only one singular zero, wz=0. It is not essential. Observe its limiting property with respect to the nonsingular zeros.

singsol:=plot(0,s=-4..4, color=red, thickness=2):

galsol:= plot({seq(1/((z-C)^2),C=-2..1)},z=-4..4):



More generally, the commands essential_components, and preparation_polynomial allow you to interpret some qualitative feature of singular zeros (see [Ritt (1950), Kolchin (1973)], [Hubert (1999)]). See their help pages for further examples.



Set up functions, notational aspects


differential_ring, field_extension, print_ranking, denote


Differential elimination


Rosenfeld_Groebner, equations, inequations, rewrite_rules, differential_sprem, belongs_to, is_orthonomic


Power series solutions


power_series_solutions, initial_conditions


Analysis of singular solutions


essential_components, preparation_polynomial


Function to manipulate differential polynomials


initial, leader, separant, rank, differentiate, derivatives, delta_leader, delta_polynomial, greater, reduced, reduced_form


To display the help page for a particular diffalg command, see Getting Help with a Command in a Package.

See Also