Overview of the diffalg Package

Calling Sequence


diffalg[command](arguments)
command(arguments)


Description


•

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 ) 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 righthand sides and the lefthand 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


 (1) 

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 ) 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);

 (2) 

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

>

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

 (3) 

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);

 (4) 

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);

 (5) 

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]);

 (6) 
>

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

 (7) 

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;

 (8) 
>

p2:=diff(u(x,y),y)+v(x,y);

 (9) 
>

p3:=diff(v(x,y),x)diff(v(x,y),y);

 (10) 

They define the system of differential equations . 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);

 (11) 

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

>

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

 (12) 

What does Rosenfeld_Groebner tell us about the system ?

>

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

 (13) 
>

differentiate(p1, y, R);

 (14) 

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

>

differentiate(p2, x, R) p3;

 (15) 

The two equations cannot be satisfied simultaneously: the system bears a contradiction 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 of differential polynomials in the unknown functions .

>

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)^21];

 (16) 
>

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

>

G :=Rosenfeld_Groebner(S, R);

 (17) 
>

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

 (18) 
>

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

 (19) 

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



Constrained systems: Orderly and mixed rankings


>

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)^2l^2];

 (20) 

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

>

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

 (21) 
•

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 ), use an orderly ranking.

>

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

>

GO:= Rosenfeld_Groebner(P, RO);

 (22) 
 (23) 
 (24) 
 (25) 
 (26) 

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.

>

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

>

GM:= Rosenfeld_Groebner(P, RM);

 (27) 
 (28) 
 (29) 

Note here that the motion is given by a second order differential equation in . Then the Lagrange multiplier is given explicitly in terms of 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 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);

 (30) 
>

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

 (31) 

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

>

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

 (32) 
>

G := Rosenfeld_Groebner(map(lhsrhs, BurgersSymm), R);

 (33) 
 (34) 



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 (cf. WeierstrassP):

>

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

 (35) 
•

Generic case :

>

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

 (36) 
>

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

 (37) 
>

equations(Rosenfeld_Groebner([Wp],R));

 (38) 
>

equations(essential_components(Wp,R));

 (39) 
>

singsol := {plot({fsolve(4*r^3+4*r1,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),ic0.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]);

•

Parametrize the equation with .

>

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

 (40) 
>

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

 (41) 
>

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

>

equations(Rosenfeld_Groebner([Wps],Rs));

 (42) 
>

equations(essential_components(Wps,Rs));

 (43) 
>

singsol:=plot({1,1/2},color=red,thickness=2):

>

galsol1:=plot({seq(1+3/2*tanh(1/2*(Cz)*sqrt(6))^2,C=1..1)},z=3..3,color=green):

>

galsol2:=plot({seq(1+3/2*coth(1/2*(Cz)*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");

>

Wp0:=subs(g2=0,g3=0,Wp);

 (44) 
>

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

>

equations(Rosenfeld_Groebner([Wp0],R0));

 (45) 
>

equations(essential_components(Wp0,R0));

 (46) 

There is only one singular zero, . 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/((zC)^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.



Functionality



Set up functions, notational aspects


Analysis of singular solutions


Function to manipulate differential polynomials


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


