Overview of the diffalg Package
Calling Sequence
Description
Typical uses and examples for Rosenfeld_Groebner
Analysis of singular solutions
Functionality
diffalg[command](arguments)
command(arguments)
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.
with(diffalg);
Rosenfeld_Groebner,belongs_to,delta_leader,delta_polynomial,denote,derivatives,differential_ring,differential_sprem,differentiate,equations,essential_components,field_extension,greater,inequations,initial,initial_conditions,is_orthonomic,leader,power_series_solution,preparation_polynomial,print_ranking,rank,reduced,reduced_form,rewrite_rules,separant
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);
u⁡x,y=x⁢∂∂xu⁡x,y+y⁢∂∂yu⁡x,y+∂∂xu⁡x,y⁢∂∂yu⁡x,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];
p≔x⁢ux+y⁢uy+ux⁢uy−u
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);
R≔PDE_ring
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);
Clairaut≔characterizable,characterizable
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]);
x⁢ux+y⁢uy+ux⁢uy−u,x+uy
equations(Clairaut[2]), inequations(Clairaut[2]);
x⁢y+u,
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.
p1:=diff(u(x,y),x)+v(x,y)-y;
p1≔∂∂xu⁡x,y+v⁡x,y−y
p2:=diff(u(x,y),y)+v(x,y);
p2≔∂∂yu⁡x,y+v⁡x,y
p3:=diff(v(x,y),x)-diff(v(x,y),y);
p3≔∂∂xv⁡x,y−∂∂yv⁡x,y
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);
ux+v−y,uy+v,vx−vy
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);
∂2∂x∂yu⁡x,y+∂∂yv⁡x,y−1
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;
∂2∂x∂yu⁡x,y+∂∂yv⁡x,y
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 x⁡t,y⁡t,z⁡t.
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];
S≔ⅆⅆtx⁡t−x⁡t⁢x⁡t+y⁡t,ⅆⅆty⁡t+y⁡t⁢x⁡t+y⁡t,ⅆⅆtx⁡t2+ⅆⅆty⁡t2+ⅆⅆtz⁡t2−1
Using an elimination ranking where z⁡t>y⁡t>x⁡t, you obtain differential characteristic sets containing a differential polynomial in x⁡t alone, a differential polynomial determining y⁡t in terms of x⁡t, and finally a differential polynomial determining z⁡t in terms of y⁡t and x⁡t. 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);
G≔characterizable,characterizable
rewrite_rules(G[1]); inequations(G[1]);
ⅆⅆtz⁡t2=−2⁢ⅆⅆtx⁡t2⁢x⁡t4−2⁢ⅆⅆtx⁡t3⁢x⁡t2−x⁡t4+ⅆⅆtx⁡t4x⁡t4,y⁡t=−x⁡t2+ⅆⅆtx⁡tx⁡t,ⅆ2ⅆt2x⁡t=2⁢ⅆⅆtx⁡t⁢x⁡t
x⁡t,ⅆⅆtz⁡t
rewrite_rules(G[2]); inequations(G[2]);
ⅆⅆtz⁡t2=−y⁡t4+1,ⅆⅆty⁡t=−y⁡t2,x⁡t=0
ⅆⅆtz⁡t
Perform a chain resolution to both components of the result. Note that the singular solution x⁡t=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 x⁡t=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];
P≔m⁢ⅆ2ⅆt2y⁡t+T⁡t⁢y⁡t+g,m⁢ⅆ2ⅆt2x⁡t+T⁡t⁢x⁡t,x⁡t2+y⁡t2−l2
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]);
K≔ground_field
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);
GO≔characterizable,characterizable
rewrite_rules(GO[1]);
ⅆⅆtT⁡t=−3⁢ⅆⅆty⁡t⁢gl2,ⅆⅆty⁡t2=−−T⁡t⁢l4+T⁡t⁢y⁡t2⁢l2−y⁡t⁢l2⁢g+y⁡t3⁢gl2⁢m,x⁡t2=−y⁡t2+l2
inequations(GO[1]);
x⁡t,ⅆⅆty⁡t
rewrite_rules(GO[2]);
T⁡t=−y⁡t⁢gl2,x⁡t=0,y⁡t2=l2
inequations(GO[2]);
y⁡t
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);
GM≔characterizable,characterizable
rewrite_rules(GM[1]);
T⁡t=−ⅆⅆty⁡t2⁢m⁢l2−y⁡t⁢l2⁢g+y⁡t3⁢gl2⁢y⁡t2−l2,ⅆ2ⅆt2y⁡t=ⅆⅆty⁡t2⁢y⁡t⁢m⁢l2+y⁡t4⁢g−2⁢y⁡t2⁢l2⁢g+l4⁢gl2⁢m⁢y⁡t2−l2,x⁡t2=−y⁡t2+l2
rewrite_rules(GM[2]);
Note here that the motion is given by a second order differential equation in y⁡t. Then the Lagrange multiplier is given explicitly in terms of y⁡t 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);
Burgers_pde≔∂∂tu⁡t,x=∂2∂x2u⁡t,x−u⁡t,x⁢∂∂xu⁡t,x
BurgersSymm := PDEtools:-DeterminingPDE(Burgers_pde, u(t, x), [V1, V2, V3](t, x, u));
BurgersSymm≔∂∂uV1⁡t,x,u=0,∂∂xV1⁡t,x,u=0,∂∂tV2⁡t,x,u=∂∂tV1⁡t,x,u⁢u2+V3⁡t,x,u,∂∂uV2⁡t,x,u=0,∂∂xV2⁡t,x,u=∂∂tV1⁡t,x,u2,∂∂tV3⁡t,x,u=−∂2∂t2V1⁡t,x,u⁢u2,∂∂uV3⁡t,x,u=−∂∂tV1⁡t,x,u2,∂∂xV3⁡t,x,u=∂2∂t2V1⁡t,x,u2,∂3∂t3V1⁡t,x,u=0
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);
G≔characterizable
rewrite_rules(G[1]);
∂∂uV3⁡u,x,t=−∂∂tV1⁡u,x,t2,∂∂uV2⁡u,x,t=0,∂∂uV1⁡u,x,t=0,∂∂xV3⁡u,x,t=−∂∂tV3⁡u,x,tu,∂∂xV2⁡u,x,t=∂∂tV1⁡u,x,t2,∂∂xV1⁡u,x,t=0,∂2∂t2V3⁡u,x,t=0,∂2∂t2V1⁡u,x,t=−2⁢∂∂tV3⁡u,x,tu,∂∂tV2⁡u,x,t=u⁢∂∂tV1⁡u,x,t2+V3⁡u,x,t
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.
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;
Wp≔ⅆⅆzw⁡z2−4⁢w⁡z3+g2⁢w⁡z+g3
Generic case g23≠27⁢g32 :
K := field_extension(transcendental_elements=[g2,g3]);
R := differential_ring(ranking=[w],derivations=[z],notation=diff,field_of_constants=K);
R≔ODE_ring
equations(Rosenfeld_Groebner([Wp],R));
ⅆⅆzw⁡z2−4⁢w⁡z3+g2⁢w⁡z+g3,4⁢w⁡z3−g2⁢w⁡z−g3
equations(essential_components(Wp,R));
There are three singular zeros: w⁡z=ri, where ri is one of the roots of 4⁢r3−g2⁢r−g3. 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}, w(z),type=numeric),-3..3,color=blue),ic=0..4)}:
galsol2 := {seq(plots[odeplot](dsolve({diff(w(z),z,z)-6*w(z)^2+2,w(ic)=2,D(w)(ic)=-5.0}, w(z),type=numeric),ic-0.15..ic+1.7,color=green),ic=-3..1)}:
plots[display](singsol union galsol1 union galsol2,title="g2=4,g3=-1",view=[-3..3,-3/2..3]);
g23=27⁢g32
Parametrize the equation with g.
Wps := subs(g2=3*g^2,g3=g^3,Wp);
Wps≔ⅆⅆzw⁡z2−4⁢w⁡z3+3⁢g2⁢w⁡z+g3
Ks := field_extension(transcendental_elements=[g]);
Ks≔ground_field
Rs := differential_ring(ranking=[w],derivations=[z],notation=diff,field_of_constants=Ks):
equations(Rosenfeld_Groebner([Wps],Rs));
ⅆⅆzw⁡z2−4⁢w⁡z3+3⁢g2⁢w⁡z+g3,2⁢w⁡z+g,w⁡z−g
equations(essential_components(Wps,Rs));
ⅆⅆzw⁡z2−4⁢w⁡z3+3⁢g2⁢w⁡z+g3,w⁡z−g
There are two singular zeros: w⁡z=g and w⁡z=−g2. w⁡z=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 w⁡z=−g2 of Wps is not essential and therefore is a limiting case of the nonsingular zeros of Wps. Observe the situation for g=−1:
singsol:=plot({-1,1/2},color=red,thickness=2):
galsol1:=plot({seq(-1+3/2*tanh(1/2*(C-z)*sqrt(6))^2,C=-1..1)},z=-3..3,color=green):
galsol2:=plot({seq(-1+3/2*coth(1/2*(C-z)*sqrt(6))^2,C=-1..1)},z=-3..3,color=blue):
plots[display]({singsol,galsol1,galsol2},view=[-3..3,-3/2..3],title="g2=3,g3=-1");
g2=0, g3=0
The equation is:
Wp0:=subs(g2=0,g3=0,Wp);
Wp0≔ⅆⅆzw⁡z2−4⁢w⁡z3
R0 := differential_ring(ranking=[w],derivations=[z],notation=diff):
equations(Rosenfeld_Groebner([Wp0],R0));
ⅆⅆzw⁡z2−4⁢w⁡z3,w⁡z
equations(essential_components(Wp0,R0));
ⅆⅆzw⁡z2−4⁢w⁡z3
There is only one singular zero, w⁡z=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):
plots[display]({singsol,galsol},view=[-4..4,-1/2..2]);
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
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
DEtools
DEtools[Rif]
diffalg/differential_algebra
DifferentialAlgebra
PDEtools
PDEtools[casesplit]
UsingPackages
Download Help Document