%********************************************************************
% *
% The program LIEPDE for computing point-, contact- and higher *
% order symmetries of individual ODEs/PDEs or systems of ODEs/PDEs *
% *
% Author: Thomas Wolf *
% Date: 20.July 1996 *
% *
%********************************************************************
Before using LIEPDE one must read in CRACK by
in crack$
or better because execution will be quicker:
faslout "crack"$
in crack$
faslend$
faslout "liepde"$
in liepde$
faslend$
bye$
reduce
load crack,liepde$
The program LIEPDE is called with:
liepde(problem,symtype,flist)$
or, for example:
sym:=liepde(problem,symtype,flist)$
The input data `problem',`symtype' and `flist' are explained below.
problem:
========
{{eq1,eq2, ...}, % equations
{ y1, y2, ...}, % functions
{ x1, x2, ...} } % variables
Equations `eqi' can be given as single differential
expressions which have to vanish or they can be given
in the form df(..,..[,..]) = .. .
If the equations are given as single differential
expressions then the program will try to bring it into
the `solved form' ..=.. automatically.
The solved forms (either from input or generated within
LIEPDE) will be used for substitutions, to find
all symmetries satisfied by solutions of the equations.
Sufficient conditions for this procedure to be correct,
i.e. to get *all* symmetries of the specified type on the
solution space are:
- There are equally many equations and functions.
- Each function is used once for a substitution and
each equation is used once for a substitution.
- All functions differentiated on the left hand sides
(lhs) depend on all variables.
- In no equation df(..,..[,..]) = .. does the right hand
side contain the derivative on the lhs nor any
derivative of it.
- No equation does contain a lhs or the derivative
of a lhs of another equation.
These conditions are checked in LIEPDE and execution
is stoped if they are not satisfied, i.e. if the input
was not correct, or if the program was not able to
write the input expressions properly the solved
form ..=.. . One then should find for each function
one derivative which occurs linearly in one equation.
The chosen derivatives should be as high as possible,
at least there must no derivative of them occur in any
equation. An easy way to get the equations in the
desired form is to use
FIRST SOLVE({eq1,eq2,...},{list of derivatives})
NOTE that to improve efficiency it is advisable not to
express lower order derivatives on the left hand side
through higher order derivatives on the right hand side.
SEE also the implications on completeness for the
determination of generalized symmetries with
characteristic functions of a given order, as described
below and the two examples with the Burgers equation.
symtype:
========
{"point"} % for point symmetries
{"contact"} % for contact symmetries, is only
% applicable if only one function,
% only one equation of order>1
{"general",order} % for generalized symmetries of
% order `order' which is an integer>0
% NOTE: Characteristic functions of
% generalized symmetries (i.e. the
% eta_.. if xi_..=0) are equivalent
% if they are equal on the solution
% manifold. Therefore all dependencies
% of characteristic functions on
% the substituted derivatives and their
% derivatives are dropped. This has the
% consequence that if, e.g. for the heat
% equation df(u,t)=df(u,x,2), df(u,t) is
% substituted by df(u,x,2) then
% {"general",2) would not include
% characteristic functions depending
% on df(u,t,x), or df(u,x,3). THEREFORE:
% If you want to find all symmetries up
% to a given order then
% - either avoid substituting lower
% order derivatives by expressions
% involving higher derivatives, or,
% - go up in the order specified in
% symtype.
%
% Example:
%
% depend u,t,x
% liepde({{df(u,t)=df(u,x,2)+df(u,x)**2},
% {u},{t,x}},
% {"general",3},{})
%
% will give 10 symmetries + one infinite
% family of symmetries whereas
%
% liepde({{df(u,x,2)=df(u,t)-df(u,x)**2},
% {u},{t,x}},
% {"general",3},{})
%
% will give 28 symmetries + one infinite
% family of symmetries.
{xi!_x1 =...,
...
eta!_y3=... } % - An ansatz must specify all xi!_.. for
% all indep. variables and all eta!_..
% for all dep. variables in terms of
% differential expressions which may
% involve unknown functions/constants.
% The dependencies of the unknown
% functions have to declared earlier
% using the DEPEND command.
% - If the ansatz should consist of the
% characteristic functions then set
% all xi!_..=0 and assign the charac-
% teristic functions to the eta!_.. .
flist:
======
{- all parameters and functions in the equations which are to
be determined, such that there exist symmetries,
- if an ansatz has been made in symtype then flist contains
all unknown functions and constants in xi!_.. and eta!_..}
Further comments:
=================
The syntax of input is the usual REDUCE syntax. For example, the
derivative of y3 wrt x1 once and x2 twice would be df(y3,x1,x2,2).
--> One exception: If in the equations or in the ansatz the dependence
of a free function F on a derivative, like df(y3,x1,x2,2) shall be
declared then the declaration has to have the form:
DEPEND F, Y3!`1!`2!`2
- the ! has to preceede each special character, like `,
- `i stands for the derivative with respect to the i'th variable in
the list of variables (the third list in the problem above)
If the REDUCE switch TIME is set on with ON TIME then times for the
individual steps in the calculation are shown.
Further switches and parameters which can be changed to affect the
output and performance of CRACK in solving the symmetry conditions
are listed in the file CRINIT.RED.
return list('LIST,'LIST . symcon,'LIST . append(xilist,etalist),
'LIST . flist);
end$ % of liepde
endmodule$
end$