%******************************************************************** % * % 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$