LPDO package

Ekaterina Shemyakova 2012/07/25 14:21

This is a package for computer algebra system MAPLE. It contains symbolic algorithms for Linear Partial Differential Operators (LPDOs) and for linear Partial Differential Equations (PDEs) with parametric coefficients. We consider arbitrary LPDOs in arbitrary many independent variables and of arbitrary orders and allow coefficients to be symbolic. Numerous tools are available with the focus on the Darboux, generalized Darboux and related invariant algorithms.


The package is in txt format: lpdo_.txt.

Use “read” to read this file at the top of your Maple sheet. In Linux it should look like this:

read "/home/ekaterina/Desktop/work/progr_factor/systemize/lpdo_.txt";

In Windows it should look like this:

read `\\work\\PDEs\\lpdo_.txt`;

Highlights of the Package


Solves E by Laplace method (not to be confused with Laplace integral method) if this is possible to do so by less or equal to n iterations. Works significantly better than existing in MAPLE PDEtools[Laplace], which fails in many examples.

  • n is the number of iterations.
  • E is an LPDO, that is a Linear Partial Differential Operator in the form

or a PDE, a Partial Differential Equation in the form
Here a,b,c may depend on the independent variables. One can use any names for independent variables. When work with LPDOs, specify them using LPDO__set_vars at the top of the worksheet. For example, LPDO__set_vars([s,t]): would declare two independent variables s and t.

  • u is optional, the dependent function.

Demo: demonstration_laplace_transformations_ver2.mws

ginv(L) and ginv(L,M)

Procedure ginv(L) returns a set of generating differential invariants for L with respect to the gauge transformations
The same procedure but with two arguments, ginv(L,M) returns a set of generating joint differential invariants for L and M with respect to the gauge transformations. Works for the following operators and pairs of operators:

  • and M arbitrary LPDO.
  • L is a third order LPDO given in its normalized form, i.e. for L in one of those forms.
  • with principal symbol

Demo: demonstration_invariants.mws

Basic Manipulations with LPDOs

Package can work with LPDOs of arbitrary orders and depended on arbitrary many independent variables. The independent variables are to be declared at the start of each worksheet using function


where vars is a list of independent variables. For example,


sets 4 independent variables x,y,z,t.



means that using some of the function available in the package, you may get some additional information (e.g. solutions of which PDEs must belong to the field). By default


where J is a multi-index,
, and
are kept as a one dimensional array of its coefficients.

Declaration of an LPDO and changing its coefficients.

  • LPDO__create() returns an LPDO that multiplies by zero, an LPDO of order zero.
  • LPDO__set_value(L::array,f,J::list) sets coefficient of LPDO L equaled to f.
  • LPDO__create0(a00) returns an LPDO of multiplication by a00, an LPDO of order zero.
  • LPDO__create1(a10,a01,a00) returns an LPDO


  • LPDO__create2(a20,a11,a02,a10,a01,a00) returns an LPDO


  • Create_LPDO_from_coeff(a::list) returns LPDO with the coefficients from list a, in which they are

ordered lexicographically. E.g.

  • Create_LPDO_from_coeff([a00,a10,a01,a20,a11,a02]) returns

  • LPDO__add_value(L::array,f,J::list) adds f to the coefficient with multi-index J.

Simplification of the coefficients

  • LPDO__degree(L::array) returns the order of LPDO L.
  • LPDO__simplify(L::array) applies simplify to all the coefficients of LPDO L.
  • LPDO__expand(L::array) applies expand to all the coefficients of LPDO L.
  • LPDO__factor(L::array) applies factor to all the coefficients of LPDO L.

Algebraic operations

  • LPDO__add(L1::array,L2::array) returns the sum of L1 and L2.
  • LPDO__inc(L1::array,L2::array) adds L1 and L2, and save the result as L1.
  • LPDO__minus(L1::array,L2::array) returns the difference of L1 and L2.
  • LPDO__mult(L1::array,L2::array) returns the composition of L1 and L2
  • LPDO__mult1(f,L::array) multiplies L by function f on the left.


  • LPDO__print(L::array) is the “pretty print”.
  • LPDO__conj(L::array,g) returns the result of the gauge transformation

  • LPDO__apply(L::array, f) applies L to function f.
  • LPDO__value(L::array,J::list) returns the coefficient with index J, that is at D_J in L.
  • LPDO__transpose(L::array) returns the formal adjoint of L.

Demo: demonstration_foundations.mw

Laplace transformations

All differential invariants of operators

with respect to the gauge transformations

can be expressed in terms of so-called Laplace invariants

If h is not zero then define a +1 Laplace transformation by equality

If k is not zero then define a -1 Laplace transformation by equality

Thus until h or k are not zero, we have chain

There are some formulas relating those invariants, which implies that each new iteration of a Laplace transformation brings us only one new invariant (only h or k is new). So, basically, we have the following chain of invariants:

The algorithm works as follows:

  • computes chain of the invariants of length n into both directions
  • if we meet zero on the way, then the corresponding transformed LPDO is factorizable. So we find its kernel and compute the kernel of the initial LPDO using known formulas.

The following functions are available:

  • Laplace_solver(n,E,u) has been described here.
  • LPDO__Lapl_trans(i,L) returns L_i, where i=1 or i=-1. LPDO L must be of the form


  • LPDO__Lapl_chain(n,L) returns the chain of Laplace invariants and their generalizations. The chain is output in the form

Here n is the number of iterations of Laplace transformations.

Demo: demonstration_laplace_transformations_ver2.mws


The property of the existence of a factorization of an LPDO is invariant with respect to gauge transformations. Thus, differential invariants can be very useful for search of a factorization of an LPDO. For each type of factorization (e.g. for LPDOs with symbol (pX+qY)XY there are 12 different types of factorizations) return the conditions for the existence of a factorization for an LPDO are implemented for all bivariate LPDOs of third order in terms of generating invariants of this LPDO. More specialized notions as obstacles to factorizations are implemented too.

Demo: demonstration_factorization.mw

Darboux transformations

Classical Laplace transformations (do not confuse with Laplace transform involving integrals) are implemented. Namely, the funcitons return the resulting operators, as well as the chain of invariants for Laplace LPDOs in classical for Darboux form, that is with symbol XY, as well as for Laplace LPDOs in the form more familiar for Physicists, that is with symbol XX+YY. Construction of a Darboux transformation of order one (two) by one (two) linearly independent solutions.

Cancellation of the mixed derivatives in M from the left and from the right, for a pair (M,L) defining a Darboux transformation. Generating sets of invariants for pairs (M,L) defining a Darboux transformation unders the gauge transforamtiosn of the pairs and under the gauged evolutions. Expressions of the later in terms of the former. Invariant description of pairs (M,L) defining any at all Darboux transformation.

lpdo.txt · Last modified: 2012/07/31 11:18 by kate
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki