Overview of the diffalg Package
<Text-field style="Heading 2" layout="Heading 2" bookmark="usage">Calling Sequence</Text-field>diffalg[command](arguments)command(arguments)
<Text-field style="Heading 2" layout="Heading 2">Description</Text-field>Important: The diffalg package has been deprecated. Use the superseding package Differential Algebra 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 NiNJKVBERV9yaW5nRzYi) 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.
<Text-field style="Heading 2" layout="Heading 2">Typical uses and examples for Rosenfeld_Groebner</Text-field>with(diffalg);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 NiNJKVBERV9yaW5nRzYi) that must be used as a last parameter to most other commands.
<Text-field style="Heading 2" layout="Heading 2">Computing singular solutions</Text-field>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 NiNJInBHNiI= 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.
<Text-field style="Heading 2" layout="Heading 2">Detection of inconsistencies in a differential system</Text-field>Consider the 3 following differential polynomials.p1:=diff(u(x,y),x)+v(x,y)-y;p2:=diff(u(x,y),y)+v(x,y);p3:=diff(v(x,y),x)-diff(v(x,y),y);They define the system of differential equations NiNJIlNHNiI=. 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 NiNJIlNHNiI=?Rosenfeld_Groebner({p1,p2,p3}, R);This indicates that the system bears a contradiction: NiNJI3AxRzYi, NiNJI3AyRzYi, and NiNJI3AzRzYi have no common zero. In this case it is quite easy to detect the contradiction. Differentiating NiNJI3AxRzYi with respect to NiNJInlHNiI= produces:differentiate(p1, y, R);The meromorphic solutions of NiNJIlNHNiI=, if they exist, shall make this differential polynomial vanish. They shall also make the following differential polynomial vanishdifferentiate(p2, x, R)- p3;The two equations cannot be satisfied simultaneously: the system NiNJIlNHNiI= bears a contradiction NiMvIiIiIiIh and therefore admits no solution.
<Text-field style="Heading 2" layout="Heading 2">Solving ordinary differential systems: Elimination ranking</Text-field>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 NiNJIlNHNiI= of differential polynomials in the unknown functions NiUtSSJ4RzYiNiNJInRHRiUtSSJ5R0YlRiYtSSJ6R0YlRiY=.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 LUklbXJvd0c2JEkqcHJvdGVjdGVkR0YlL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHNiRGJUkoX3N5c2xpYkdGKDYtLUkjbWlHNiRGJS9GJ0YpNiNRInpGKC1JI21vRzYkRiUvRidGKTYjUTAmQXBwbHlGdW5jdGlvbjtGKC1JKG1mZW5jZWRHNiRGJS9GJ0YpNiMtRiM2Iy1GLjYjUSJ0RigtRjQ2I1ElJmd0O0YoLUYuNiNRInlGKEYzRjlGQy1GLjYjUSJ4RihGM0Y5, you obtain differential characteristic sets containing a differential polynomial in NiMtSSJ4RzYiNiNJInRHRiU= alone, a differential polynomial determining NiMtSSJ5RzYiNiNJInRHRiU= in terms of NiMtSSJ4RzYiNiNJInRHRiU=, and finally a differential polynomial determining NiMtSSJ6RzYiNiNJInRHRiU= in terms of NiMtSSJ5RzYiNiNJInRHRiU= and NiMtSSJ4RzYiNiNJInRHRiU=. 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 NiMvLUkieEc2IjYjSSJ0R0YmIiIh must be discarded in the resolution of the first component, as indicated by the differential polynomials of its inequations. The correct complete solution with NiMvLUkieEc2IjYjSSJ0R0YmIiIh is given by the second component.
<Text-field style="Heading 2" layout="Heading 2">Constrained systems: Orderly and mixed rankings</Text-field>Consider the set of differential polynomials describing the motion of a pendulum, that is, a point mass NiNJIm1HNiI= suspended from a massless rod of length NiNJImxHNiI= under the influence of gravity NiNJImdHNiI=, in Cartesian coordinates NiRJInhHNiJJInlHRiQ=. The Lagrangian formulation leads to two second order differential equations with an algebraic constraint. NiNJIlRHNiI= 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 NiVJIm1HNiJJImxHRiRJImdHRiQ= appearing in the coefficients of these differential polynomials.K := field_extension(transcendental_elements=[m,l,g]);Orderly RankingTo 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 NiMiIiE=), use an orderly ranking.RO := differential_ring(ranking=[[T,x,y]], derivations=[t], field_of_constants=K, notation=diff):GO:= Rosenfeld_Groebner(P, RO);rewrite_rules(GO[1]);inequations(GO[1]);rewrite_rules(GO[2]);inequations(GO[2]);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 RankingTo obtain the differential system satisfied by NiNJInhHNiI= and NiNJInlHNiI= alone, eliminate NiNJIlRHNiI=:RM := differential_ring(ranking=[T,[x,y]], derivations=[t], field_of_constants=K, notation=diff):GM:= Rosenfeld_Groebner(P, RM);rewrite_rules(GM[1]);rewrite_rules(GM[2]);Note here that the motion is given by a second order differential equation in NiMtSSJ5RzYiNiNJInRHRiU=. Then the Lagrange multiplier is given explicitly in terms of NiMtSSJ5RzYiNiNJInRHRiU= and its first derivative.
<Text-field style="Heading 2" layout="Heading 2">Solving partial differential system: Lexicographic ranking</Text-field>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 NiNJIlNHNiI=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 NiNJInRHNiI= 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);rewrite_rules(G[1]);There are three independent ordinary differential polynomials with respect to NiNJInRHNiI= (the last three of the differential characteristic set). All other ordinary (in NiNJInRHNiI=) differential polynomials vanishing on the solutions of NiNJLEJ1cmdlcnNTeW1tRzYi can be written as linear combination of these three with their derivatives.
<Text-field style="Heading 2" layout="Heading 2">Analysis of singular solutions</Text-field>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 NiNJI1dwRzYi (cf. WeierstrassP):Wp := diff(w(z),z)^2-4*w(z)^3+g2*w(z) +g3;Generic case NiMwKiRJI2cyRzYiIiIkLCQqJEkjZzNHRiYiIiMiI0Y= :K := field_extension(transcendental_elements=[g2,g3]);R := differential_ring(ranking=[w],derivations=[z],notation=diff,field_of_constants=K);equations(Rosenfeld_Groebner([Wp],R));equations(essential_components(Wp,R));There are three singular zeros: NiMvLUkid0c2IjYjSSJ6R0YmSSNyaUdGJg==, where NiNJI3JpRzYi is one of the roots of NiMsKCokSSJyRzYiIiIkIiIlKiZJI2cyR0YmIiIiRiVGKyEiIkkjZzNHRiZGLA==. There are all three essential singular zeros. As such they are envelopes of the nonsingular zeros of NiNJI1dwRzYi. This can be observed by plotting the real zeros for NiQvSSNnMkc2IiIiJS9JI2czR0YlISIi: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]);NiMvKiRJI2cyRzYiIiIkLCQqJEkjZzNHRiYiIiMiI0Y=Parametrize the equation with NiNJImdHNiI=.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):equations(Rosenfeld_Groebner([Wps],Rs));equations(essential_components(Wps,Rs));There are two singular zeros: NiMvLUkid0c2IjYjSSJ6R0YmSSJnR0Ym and NiMvLUkid0c2IjYjSSJ6R0YmLCRJImdHRiYjISIiIiIj. NiMvLUkid0c2IjYjSSJ6R0YmSSJnR0Ym is an essential singular zero of NiNJJFdwc0c2Ig== and therefore is an envelope of the nonsingular zeros of NiNJJFdwc0c2Ig==. On the contrary, the singular zero NiMvLUkid0c2IjYjSSJ6R0YmLCRJImdHRiYjISIiIiIj of NiNJJFdwc0c2Ig== is not essential and therefore is a limiting case of the nonsingular zeros of NiNJJFdwc0c2Ig==. Observe the situation for NiMvSSJnRzYiISIi: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=0The equation is:Wp0:=subs(g2=0,g3=0,Wp);R0 := differential_ring(ranking=[w],derivations=[z],notation=diff):equations(Rosenfeld_Groebner([Wp0],R0));equations(essential_components(Wp0,R0));There is only one singular zero, NiMvLUkid0c2IjYjSSJ6R0YmIiIh. 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.
<Text-field style="Heading 2" layout="Heading 2">Functionality</Text-field>Set up functions, notational aspectsdifferential_ring, field_extension, print_ranking, denoteDifferential eliminationRosenfeld_Groebner, equations, inequations, rewrite_rules, differential_sprem, belongs_to, is_orthonomicPower series solutionspower_series_solutions, initial_conditionsAnalysis of singular solutionsessential_components, preparation_polynomialFunction to manipulate differential polynomialsinitial, leader, separant, rank, differentiate, derivatives, delta_leader, delta_polynomial, greater, reduced, reduced_formTo display the help page for a particular diffalg command, see Getting Help with a Command in a Package.
<Text-field style="Heading 2" layout="Heading 2" bookmark="seealso">See Also</Text-field>DEtools, DEtools[Rif], diffalg/differential_algebra, DifferentialAlgebra, PDEtools, PDEtools[casesplit], UsingPackages