12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235 |
- \documentclass[12pt]{article}
- %Sets size of page and margins
- \oddsidemargin 10mm \evensidemargin 10mm
- \topmargin 0pt \headheight 0pt \headsep 0pt
- \textwidth 15cm
-
- \title{The computer algebra package {\sc Crack}
- for solving over-determined systems of equations}
-
- \author{Thomas Wolf \\
- Department of Mathematics \\
- Brock University \\
- St.Catharines \\
- Ontario, Canada L2S 3A1 \\
- twolf@brocku.ca}
- \begin{document}
- \maketitle
- \tableofcontents
- \section{Online help}
- \subsection{Help to help}
- \begin{tabbing}
- {\bf hd} \ \= Help to inspect data \\
- {\bf hp} \> Help to proceed \\
- {\bf hf} \> Help to change flags \& parameters \\
- {\bf hc} \> Help to change data of equations \\
- {\bf hi} \> Help to work with identities \\
- {\bf hb} \> Help to trace and debug
- \end{tabbing}
- \subsection{Help to inspect data}
- \begin{tabbing}
- {\bf e}\ \ \ \ \= Print equations \\
- {\bf eo} \> Print overview of functions in equations \\
- {\bf pi} \> Print inequalities \\
- {\bf f} \> Print functions and variables \\
- {\bf v} \> Print all derivatives of all functions \\
- {\bf s} \> Print statistics \\
- {\bf fc} \> Print no of free cells \\
- {\bf pe} \> Print an algebraic expression \\
- {\bf ph} \> Print history of interactive input \\
- {\bf pv} \> Print value of any lisp variable \\
- {\bf pd} \> Plot the occurence of functions in equations \\
- {\bf ss} \> Find and print sub-systems \\
- {\bf w} \> Write equations into a file
- \end{tabbing}
- \subsection{Help to proceed}
- \begin{tabbing}
- {\bf a}\ \ \ \ \= Do one step automatically \\
- {\bf g} \> Go on for a number of steps automatically \\
- {\bf t} \> Toggle between automatic and user selection of
- equations ({\tt expert\_mode=nil/t}). \\
- {\bf p1} \> Print a list of all modules in batch mode \\
- {\bf p2} \> Print a complete list of all modules \\
- {\bf \#} \> Execute the module with the number `\#' once \\
- {\bf l} \> Execute a specific module repeatedly \\
- {\bf sb} \> Save complete backup to file \\
- {\bf rb} \> Read backup from file \\
- {\bf ep} \> Enable parallelism \\
- {\bf dp} \> Disable parallelism \\
- {\bf pp} \> Start an identical parallel process \\
- {\bf kp} \> Kill a parallel process \\
- {\bf x} \> Exit interactive mode for good \\
- {\bf q} \> Quit current level or crack if in level 0 \\
- \end{tabbing}
- \subsection{Help to change flags \& parameters}
- \begin{tabbing}
- {\bf pl} \ \ \ \= Maximal length of an expression to be printed \\
- {\bf pm} \> Toggle to print more or less information about
- pdes ({\tt print\_more}) \\
- {\bf pa} \> Toggle to print all or not all information
- about the pdes ({\tt print\_all}) \\
- {\bf cp} \> Change the priorities of procedures \\
- {\bf og} \> Toggle ordering between `lexicographical
- ordering of functions having\\
- \> a higher priority than any ordering of
- derivatives' and the opposite \\
- \> ({\tt lex\_fc=t}) resp.\ ({\tt lex\_fc=nil}) \\
- {\bf od} \> Toggle ordering between `the total order
- of derivatives having a higher\\
- \> priority than lexicographical ordering'
- ({\tt lex\_df=nil}) or not ({\tt lex\_df=t}) \\
- {\bf oi} \> Interactive change of ordering on variables \\
- {\bf or} \> Reverse ordering on variables \\
- {\bf om} \> Mix randomly ordering on variables \\
- {\bf of} \> Interactive change of ordering on functions \\
- {\bf op} \> Print current ordering \\
- {\bf ne} \> Root of the name of new generated equations
- (default: e\_) \\
- {\bf nf} \> Root of the name of new functions and constants
- (default: c\_) \\
- {\bf ni} \> Root of the name of new identities
- (default: id\_) \\
- {\bf na} \> Toggle for the NAT output switch ({\tt !*nat}) \\
- {\bf as} \> Input of an assignment \\
- {\bf kp} \> Toggle for keeping a partitioned copy of each
- equation ({\tt keep\_parti}) \\
- {\bf fi} \> Toggle for allowing or not allowing
- integrations of equations which \\
- \> involve unresolved integrals ({\tt freeint\_}) \\
- {\bf fa} \> Toggle for allowing or not allowing solutions of ODEs
- involving the \\
- \> {\tt abs} function ({\tt freeabs\_}) \\
- {\bf cs} \> Switch on/off the confirmation of intended substitutions
- and of the \\
- \> order of the investigation of subcases
- resulting in a factorization \\
- {\bf fs} \> Enforce direct separation \\
- {\bf ll} \> change of the line length \\
- {\bf re} \> Toggle for allowing to re-cycle equation names
- ({\tt do\_recycle\_eqn}) \\
- {\bf rf} \> Toggle for allowing to re-cycle function names
- ({\tt do\_recycle\_fnc}) \\
- {\bf st} \> Setting a CPU time limit for un-interrupted run \\
- {\bf cm} \> Adding a comment to the history\_ list \\
- {\bf lr} \> Adding a LET-rule \\
- {\bf cr} \> Clearing a LET-rule
- \end{tabbing}
- \subsection{Help to change data of equations}
- \begin{tabbing}
- {\bf r}\ \ \ \ \ \= Replace or add one equation \\
- {\bf n} \> Replace one inequality \\
- {\bf d} \> Delete one equation \\
- {\bf c} \> Change a flag or property of one pde
- \end{tabbing}
- \subsection{Help to work with identities}
- \begin{tabbing}
- {\bf i}\ \ \ \ \ \= Print identities between equations \\
- {\bf id} \> Delete redundand equations \\
- {\bf iw} \> Write identities to a file \\
- {\bf ir} \> Remove list of identities \\
- {\bf ia} \> Add or replace an identity \\
- {\bf ih} \> Start recording histories and identities \\
- {\bf ip} \> Stop recording histories and identities \\
- {\bf ii} \> Integrate an identity \\
- {\bf ic} \> Check the consistency of identity data \\
- {\bf iy} \> Print the history of equations
- \end{tabbing}
- \subsection{Help to trace and debug}
- \begin{tabbing}
- {\bf tm} \ \= Toggle for tracing the main procedure ({\tt tr\_main}) \\
- {\bf tg} \> Toggle for tracing the generalized separation
- ({\tt tr\_gensep}) \\
- {\bf ti} \> Toggle for tracing the generalized integration
- ({\tt tr\_genint}) \\
- {\bf td} \> Toggle for tracing the decoupling process
- ({\tt tr\_decouple}) \\
- {\bf tl} \> Toggle for tracing the decoupling length reduction
- process ({\tt tr\_redlength}) \\
- {\bf ts} \> Toggle for tracing the algebraic length reduction
- process ({\tt tr\_short}) \\
- {\bf to} \> Toggle for tracing the ordering procedures
- process ({\tt tr\_orderings}) \\
- {\bf tr} \> Trace an arbitrary procedure \\
- {\bf ut} \> Untrace a procedure \\
- {\bf br} \> Lisp break \\
- {\bf pc} \> Do a function call \\
- {\bf in} \> Reading in a REDUCE file
- \end{tabbing}
- \section{The purpose of Crack}
- The package {\sc Crack} attempts the solution of an overdetermined
- system of algebraic or ordinary or partial differential
- equations (ODEs/PDEs) with at most polynomial nonlinearities.
- Under `normal circumstances' differential
- equations (DEs) which describe physical
- processes are not overdetermined, i.e.\ the number of DEs
- matches the number of unknown functions which are involved.
- Applying the package {\sc Crack} to such problems directly may be
- successful, especially if these are ODEs, but the main type of
- application is to investigate qualitative properties of such DEs/systems
- of DEs and to solve the overdetermined PDE-systems that result in these
- investigations.
- Applications of {\sc Crack} include a program {\sc Conlaw}
- for the computation of conservation laws of DEs, a program
- {\sc LiePDE} for the computation of infinitesimal symmetries of DEs
- and a program {\sc ApplySym} for the computation of symmetry and
- similarity variables from infinitesimal symmetries.
- \section{Technical details}
- \subsection{System requirements}
- The required system is {\sc Reduce}, version
- 3.6. or 3.7. (either the PSL version of {\sc Reduce} as distributed by
- the Konrad Zuse Institut / Berlin or the CSL version of {\sc Reduce}
- as distributed by CODEMIST Ltd). The PSL version is faster whereas
- the CSL version seems to be more stable under WINDOWS. Also it
- provides a portable compiled code.
- Memory requirements depend crucially on the
- application. The {\tt crack.rlg} file is produced from running
- {\tt crack.tst} in a 4MB session running {\sc Reduce}, version 3.7 under
- {\sc Linux}. On the other hand it is not difficult to formulate problems that
- consume any amount of memory.
- \subsection{Installation}
- In a running {\sc Reduce} session either do \\
- \verb+ in "crack.red"$ + \\
- or, in order to speed up computation, either compile it with
- \verb+ on comp$ + \\
- before the above command, or, generate a fast-loading compiled
- file once with \\
- \verb+ faslout "crack"$ + \\
- \verb+ in "crack.red"$ + \\
- \verb+ faslend$ + \\
- and load that file to run {\sc Crack} with \\
- \verb+ load crack$ +
- \subsection{Updates / web demos}
- %%{\sc Crack} can be run from a web demo
- %A web demo under the address
- %\verb+http://cathode.maths.qmw.ac.uk/demo.html+
- %that was created by Francis Wright and Arrigo Triulzi
- %allows to run problems of restricted size.
- The latest version of {\sc Crack} and related programs
- is available from \\
- \verb+http://lie.math.brocku.ca/twolf/crack/+.
- Publications related to {\sc Crack} can be found under \\
- \verb+http://lie.math.brocku.ca/twolf/home/publications.html#1+.
- \subsection{The files}
- The following files are provided with {\sc Crack}
- \begin{itemize}
- \item {\tt crack.red} contains read-in statements of a number
- of files {\tt cr*.red}.
- \item {\tt crack.tst} contains test-examples.
- \item {\tt crack.rlg} contains the output of {\tt crack.tst}.
- \item {\tt crack.tex} is this manual.
- \end{itemize}
- \subsection{The call}
- {\sc Crack} is called by
- \begin{tabbing}
- {\tt crack}(\=\{{\it equ}$_1$, {\it equ}$_2$, \ldots , {\it equ}$_m$\}, \\
- \>\{{\it ineq}$_1$, {\it ineq}$_2$, \ldots , {\it ineq}$_n$\}, \\
- \>\{{\it fun}$_1$, {\it fun}$_2$, \ldots , {\it fun}$_p$\}, \\
- \>\{{\it var}$_1$, {\it var}$_2$, \ldots , {\it var}$_q$\});
- \end{tabbing}
- $m,n,p,q$ are arbitrary.
- \begin{itemize}
- \item
- The {\it equ}$_i$ are identically vanishing partial differential expressions,
- i.e.\
- they represent equations $0 = {\it equ}_i$, which are to be solved for the
- functions ${\it fun}_j$ as far as possible, thereby drawing only necessary
- conclusions and not restricting the general solution.
- \item
- The {\it ineq}$_i$ are algebraic or differential expressions which must
- not vanish identically for
- any solution to be determined, i.e. only such solutions are computed for which
- none of the expressions {\it ineq}$_i$ vanishes identically in all independent
- variables.
- \item
- The dependence of the (scalar) functions ${\it fun}_j$ on independent
- variables must be defined beforehand with {\tt DEPEND} rather than
- declaring these functions
- as operators. Their arguments may themselves only be identifiers
- representing variables, not expressions.
- Also other unknown functions not in ${\it fun}_j$ must not be represented
- as operators but only using {\tt DEPEND}.
- \item
- The functions ${\it fun}_j$ and their derivatives may only occur polynomially.
- \item
- The ${\it var}_k$ are further independent variables, which are not
- already arguments
- of any of the ${\it fun}_j$. If there are none then the fourth argument is
- the empty list \{\}, although it does no harm to include arguments of
- functions ${\it fun}_j$.
- \item
- The dependence of the ${\it equ}_i$ on the independent variables and on
- constants and functions other than ${\it fun}_j$ is arbitrary.
- \item
- {\sc Crack} can be run in automatic batch mode (by default) or
- interactively with the switch {\tt OFF BATCH\_MODE}.
- \end{itemize}
- \subsection{The result}
- The result is a list of solutions
- \[ \{{\it sol}_1, \ldots \} \]
- where each solution is a list of 4 lists:
- \begin{tabbing}
- \{\=\{${\it con}_1, \; {\it con}_2, \ldots , \; {\it con}_q$\}, \\
- \>\{${\it fun}_a={\it ex}_a, \;\;
- {\it fun}_b={\it ex}_b, \ldots , \;\; {\it fun}_p={\it ex}_p$\},\= \\
- \>\{${\it fun}_c, \;\; {\it fun}_d, \ldots , \;\; {\it fun}_r$\}, \> \\
- \>\{{\it ineq}$_1$, {\it ineq}$_2$, \ldots , {\it ineq}$_s$\}. \> \}
- \end{tabbing}
- For example, in the case of a linear system, the input consists of at
- most one solution ${\it sol}_1$.
- If {\sc Crack} finds a contradiction as e.g. $0=1$ then there exists no
- solution and it returns the empty list \{\}. If {\sc Crack}
- can factorize algebraically a non-linear equation then factors are set
- to zero individually and different sub-cases are studied by
- {\sc Crack} calling itself recursively.
- If during such a recursive call a contradiction results,
- then this sub-case will not have a solution but other sub-cases still
- may have solutions.
- The empty list is also returned if no solution exists
- which satisfies the inequalities
- {\it ineq}$_i \neq 0.$
- The expressions ${\it con}_i$ (if there are any), are the
- remaining necessary and sufficient conditions for the functions
- ${\it fun}_c,\ldots,{\it fun}_r$ in the third list. Those
- functions can be original functions from the equations to be
- solved (of the second argument of the call of {\sc Crack}) or new
- functions or constants which arose from integrations.
- The dependence of new functions on variables is declared with {\tt DEPEND}
- and to visualize this dependence the algebraic mode function
- ${\tt FARGS({\it fun}_i)}$ can be used.
- If there are no ${\it con}_i$ then all equations are solved and the
- functions in the third list are unconstrained.
- The second list contains
- equations ${\it fun}_i={\it ex}_i$ where each ${\it fun}_i$ is an
- original function and ${\it ex}_i$ is the computed expression
- for ${\it fun}_i$.
- The elements of the fourth
- list are the expressions who have been assumed to be unequal zero
- in the derivation of this solution.
- \subsection{Interactive mode, flags, parameters and the list of procedures}
- Under normal circumstances one will try to have problems solved
- automatically by {\sc Crack}. An alternative is to input
- {\tt OFF BATCH\_MODE;} before calling {\sc Crack} and to solve problems
- interactively. In interactive mode it is possible to
- \begin{itemize}
- \item inspect data, like equations and their properties, unknown
- functions, variables, identities, a statistics,
- \item save, change, add or drop equations,
- \item add inequalities,
- \item inspect and change flags and parameters which govern individual
- modules as well as their interplay,
- \item pick a list of methods to be used out of about 30 different
- ones, and specify their priorities and in this way very easily
- compose an automatic solving strategy,
- \item or, for more interactive work, to specify how to proceed, i.e.\
- which computational step to do and how often, like doing
- \begin{description}
- \item one automatic step,
- \item one specific step,
- \item a number of automatic steps,
- \item a specific step as often as possible or a specified number of times.
- \end{description}
- \end{itemize}
- To get interactive help one enters `h' or `?'.
- Flags and parameters are stored as symbolic fluid variables
- which means that they can be accessed by {\tt lisp( ... )},
- like {\tt lisp( print\_:=5 );} before calling {\sc Crack}.
- {\tt print\_}, for example, is a measure of the maximal
- length of expressions to be printed on the screen
- (the number of factors in terms).
- A complete list of flags and parameters is given at the beginning of
- the file {\tt crinit.red}.
- One more parameter shall be mentioned, which is the list of modules/procedures
- called {\tt proc\_list\_}. In interactive mode this list can be looked
- at with {\tt `p'} or be changed with {\tt `cp'}. This list defines
- in which order the different modules/procedures are tried whenever
- {\sc Crack} has to decide of what to do next. Exceptions
- to this rule may be specified. For example, some procedure, say
- $P_1$, requires after its execution another
- specific procedure, say $P_2$, to be executed, no matter whether
- $P_2$ is next according to {\tt proc\_list\_} or not. This is managed by $P_1$
- writing a task for procedure $P_2$ into a hot-list. Tasks listed in
- the global variable {\tt `to\_do\_list'} are
- dealt with in the {\tt `to\_do'} step which should
- always come first in {\tt proc\_list\_}.
- A way to have the convenience of running {\sc Crack} automatically
- and still being able to break the fixed rhythm prescribed by {\tt
- proc\_list\_} is to have the entry {\tt stop\_batch} in {\tt proc\_list\_}
- and have {\sc Crack} started in automatic batch mode. Then execution
- is continuing
- until none of the procedures which come before {\tt stop\_batch} are
- applicable any more so that {\tt stop\_batch} is executed next which will
- stop automatic execution and go into interactive mode. This allows
- either to continue the computation interactively, or to change the
- {\tt proc\_list\_} with {\tt `cp'} and to continue in automatic mode.
- The default value of {\tt proc\_list\_} does not include all possible
- modules because not all are suitable for any kind of overdetermined
- system to be solved. The complete list is shown in interactive mode
- under {\tt `cp'}. A few basic modules are described in the following
- section. The efficiency of {\sc Crack} in automatic mode is very much
- depending on the content of {\tt proc\_list\_} and the sequence of its
- elements. Optimizing {\tt proc\_list\_} for a given task needs
- experience which can not be formalized in a few simple rules and will
- therefore not be explained in more detail here. The following remarks
- are only guidelines.
- \begin{description}
- \item[{\tt to\_do :}] hot list of steps to be taken next, should
- always come first,
- \item[{\tt subst\_level\_? :}] substitutions of functions by
- expressions, substitutions differ by their maximal allowed size and other
- properties,
- \item[{\tt separation :}] what is described as direct separation in the
- next section,
- \item[{\tt gen\_separation :}] what is described as indirect separation in the
- next section, only to be used for linear problems,
- \item[{\tt quick\_gen\_separation :}] generalized separation of
- equations with an upper size limit,
- \item[{\tt quick\_integration :}] integration of very specific short equations,
- \item[{\tt full\_integration :}] integration of equations which lead
- to a substitution,
- \item[{\tt integration :}] any integration,
- \item[{\tt factorization :}] splitting the computation into the
- investigation of different subcases resulting from the algebraic
- factorization of an equation, only useful for non-linear problems,
- \item[{\tt change\_proc\_list :}] reserved name of a procedure to be
- written by the user that does nothing else but changing proc\_list\_ in
- a fixed manner. This is to be used if the computation splits naturally
- into different parts and if it is clear from the beginning what the
- computational methods (proc\_list\_) have to be.
- \item[{\tt stop\_batch :}] If the first steps to simplify or partially
- solve a system of equations are known and should be done automatically
- and afterwards {\sc Crack} should switch into interactive mode
- then {\tt stop\_batch} is added to {\tt proc\_list} with a priority
- just below the steps to be done automatically.
- \item[{\tt drop\_lin\_dep :}] module to support
- solving big linear systems (still experimental),
- \item[{\tt find\_1\_term\_eqn :}] module to support
- solving big linear systems (still experimental),
- \item[{\tt trian\_lin\_alg :}] module to support
- solving big linear systems (still experimental),
- \item[{\tt undetlinode :}] parametric solution of single under determined
- linear ODE (with non-constant coefficients), only applicable for
- linear problems (Too many redundant functions resulting from
- integrations may prevent further integrations. If they are involved in
- single ODEs then the parametric solution of such ODEs treated as
- single underdetermined equations is useful. Danger: new generated
- equations become very big if the minimal order of any function in the ODE is high.),
- \item[{\tt undetlinpde :}] parametric solution of single under determined
- linear PDE (with non-constant coefficients), only applicable for
- linear problems (still experimental),
- \item[{\tt alg\_length\_reduction :}] length reduction by algebraic
- combination, only for linear problems, one has to be careful when
- combining it with decoupling as infinite loops may occur when
- shortening and lowering order reverse each other,
- \item[{\tt diff\_length\_reduction :}] length reduction by differential
- reduction,
- \item[{\tt decoupling :}] steps towards the computation of a
- differential Gr\"{o}bner Basis,
- \item[{\tt add\_differentiated\_pdes :}] only useful for non-linear
- differential equations with leading derivative occuring non-linearly,
- \item[{\tt add\_diff\_star\_pdes :}] for the treatment of non-linear
- indirectly separable equations,
- \item[{\tt multintfac :}] to find integrating factors for a system
- of equations, should have very slow priority if used at all,
- \item[{\tt alg\_solve\_deriv :}] to be used for equations quadratic in
- the leading derivative,
- \item[{\tt alg\_solve\_system :}] to be used if a (sub-)system of
- equations shall be solved for a set of functions or their derivatives
- algebraically,
- \item[{\tt subst\_derivative :}] substitution of a derivative of a
- function everywhere by a new function if such a derivative exists
- \item[{\tt undo\_subst\_derivative :}] undo the above substitution.
- \item[{\tt del\_redundant\_fc :}] Drop redundant functions and
- constants. An overdetermined PDE-system is
- formulated and solved to set
- redundant constants / functions of integration to zero. This may take longer
- if many functions occur.
- \item[{\tt point\_trafo :}] An interactive point transformation not to
- be used in automatic batch mode,
- \item[{\tt sub\_problem :}] Solve a subset of equations first (still
- experimental),
- \item[{\tt del\_redundant\_de :}] Delete redundant equations,
- \item[{\tt idty\_integration :}] Integrate an identity (still experimental).
- \end{description}
- \subsection{Performing long computations}
- \subsubsection{The backup facility}
- If one does a long computation automatically then the computer or the
- link to it may go down and the computation may have to be started again.
- Even worse in a longer interactive session which is of an
- exploring nature, i.e.\ where every step may blow up the size of
- expressions or where a step (for example, decoupling, solving a subsystem,
- searching for a length-reduction, dropping redundant functions,...)
- may just take too long and where
- one would want to go back to the situation before this step and try
- something else. For these situations there is an interactive command
- for saving a bakup:
- {\tt sb "file\_name"} which saves all global variables + data into an
- ASCII file and a command {\tt rb "file\_name"} which reads these data from a file.
- The format is independent of the computer used and independent
- of the underlying {\sc Lisp} version. This has been used
- by the author to set up long and complex computations on a small
- computer and to continue the same interactive session on larger computers
- later. To continue such a session one calls {\sc Crack} without data:
- \verb+ CRACK({},{},{},{})$ +\\ %$
- and loads the complete environment with {\tt rb "file\_name"}.
- \subsubsection{The history facility}
- Sometimes one does not only want to store an environment but also how one
- got there in an interactive session, to repeat the same steps or only
- some of them in a later session.
- In the global variable {\tt history\_} all interactive
- input during one call of {\sc Crack} is recorded and can be looked at
- during a {\sc Crack} run with the {\tt pv} (print-variable) command {\tt
- pv history\_}. In order to save typing the same input in a later
- session the program {\sc Crack} always tries to read any expected input
- first from the global variable {\tt old\_history}. All that is needed
- is to do is typing\\
- {\tt lisp reverse history\_;}\\
- after a run of {\sc Crack} and to assign the result to the {\sc Lisp}
- variable {\tt old\_history}. The next run of {\sc Crack} will try to read
- any expected interactive input first from {\tt old\_history} and only
- if that is {\tt nil} then read it from the keyboard.
- \subsection{Global variables}
- The following is a complete list of identifiers used as global
- lisp variables (to be precise symbolic fluid variables)
- within {\sc Crack}. Some are flags and parameters, others are glaboal
- variables, some of them can be accessed after the {\sc Crack}
- run. \vspace{6pt} \\
- \noindent
- {\tt !*allowdfint\_bak !*dfprint\_bak !*exp\_bak !*ezgcd\_bak !*fullroots\_bak \\
- !*gcd\_bak !*mcd\_bak !*nopowers\_bak !*ratarg\_bak !*rational\_bak \\
- !*batch\_mode abs\_ adjust\_fnc allflags\_ batchcount\_ backup\_ \\
- collect\_sol confirm\_subst cont\_ contradiction\_ cost\_limit5 \\
- current\_dir default\_proc\_list\_ do\_recycle\_eqn do\_recycle\_fnc \\
- eqname\_ expert\_mode explog\_ facint\_ flin\_ force\_sep fname\_ \\
- fnew\_ freeabs\_ freeint\_ ftem\_ full\_proc\_list\_ gcfree!* genint\_ \\
- glob\_var global\_list\_integer global\_list\_ninteger \\
- global\_list\_number high\_gensep homogen\_ history\_ idname\_ \\
- idnties\_ independence\_ ineq\_ inter\_divint keep\_parti last\_steps \\
- length\_inc level\_ lex\_df lex\_fc limit\_time lin\_problem \\
- lin\_test\_const logoprint\_ low\_gensep max\_gc\_counter \\
- max\_gc\_elimin max\_gc\_fac max\_gc\_red\_len max\_gc\_short \\
- max\_gc\_ss max\_red\_len maxalgsys\_ mem\_eff my\_gc\_counter \\
- nequ\_ new\_gensep nfct\_ nid\_ odesolve\_ old\_history \\
- orderings\_ target\_limit\_0 target\_limit\_1 target\_limit\_2 \\
- target\_limit\_3 target\_limit\_4 poly\_only potint\_ print\_ \\
- print\_all print\_more proc\_list\_ prop\_list pvm\_able \\
- quick\_decoup record\_hist recycle\_eqns recycle\_fcts recycle\_ids \\
- reducefunctions\_ repeat\_mode safeint\_ session\_ simple\_orderings \\
- size\_hist size\_watch sol\_list solvealg\_ stepcounter\_ stop\_ \\
- struc\_dim struc\_eqn subst\_0 subst\_1 subst\_2 subst\_3 subst\_4 \\
- time\_ time\_limit to\_do\_list tr\_decouple tr\_genint tr\_gensep \\
- tr\_main tr\_orderings tr\_redlength tr\_short trig1\_ trig2\_ \\
- trig3\_ trig4\_ trig5\_ trig6\_ trig7\_ trig8\_ userrules\_ vl\_}
- \subsection{Global flags and parameters}
- The list below gives a selection of
- flags and global parameters that are available
- to fine tune the performance according to specific needs of the system
- of equations that is studied. Usually they are not needed and very few
- are used regularly by the author. The interactive command that changes the
- flag/parameter is given in [ ], default values of the flags/parameters
- are given in (). The values of the flags and parameters can either be
- set after loading {\sc Crack} and before starting {\sc Crack} with a
- lisp assignment, for example,\\
- \verb+lisp(print_:=8)$+ \\ %$
- or after starting {\sc Crack} in interactive mode with specific commands,
- like {\tt pl} to change specifically the print length determining parameter
- {\tt print\_}, or the command {\tt as} to do an assignment. The values of
- parameters/flags can be inspected interactively using {\tt pv}.
- \begin{description}
- \item[{\tt !*batch\_mode [x] (t) :}] running crack in interactive mode
- ({\tt !*batch\_mode=nil}) or not ({\tt !*batch\_mode=t}). It can also be
- set in algebraic mode before starting {\sc Crack}
- by {\tt ON/OFF BATCH\_MODE}. Interactive mode can be left and automatic
- computation be started by the interactive commant {\tt x}.
- \item[{\tt expert\_mode [t] (nil) :}] For {\tt expert\_mode=t} the
- equations that are involved in the next computational step are
- selected by {\sc Crack}, for {\tt expert\_mode=nil} the user is asked
- to select one or two equations which are to be worked with in the next
- computational step.
- %\item[{\tt repeat\_mode [] () :}]
- \item[{\tt nfct\_ (1) :}] index of the next new function or constant
- \item[{\tt nequ\_ (1) :}] index of the next new equation
- \item[{\tt nid\_ (1) :}] index of the next new identity
- \item[{\tt fname\_ [nf] ('c\_) :}] name of new functions and constants
- (integration)
- \item[{\tt eqname\_ [ne] ('e\_) :}] name of new equations
- \item[{\tt idname\_ [ni] ('id\_) :}] name of new equations
- %\item[{\tt level\_ (nil) :}] actual level of crack recursion
- \item[{\tt cont\_ (nil) :}] interactive user control for integration
- or substitution of large expressions (enabled = t)
- \item[{\tt independence\_ (nil) :}] interactive control of linear
- independence (enabled = t)
- \item[{\tt genint\_ (15) :}] if =nil then generalized integration disabled
- else equal the maximal number of new functions and extra
- equations due to the generalized integration of
- one equation
- \item[{\tt facint\_ (1000) :}] if equal nil then no search for
- integrating factors otherwise equal the max
- product terms*kernels for searching an integrating
- factor
- \item[{\tt potint\_ (t) :}] allowing `potential integration'
- \item[{\tt safeint\_ (t) :}] uses only solutions of ODEs with
- non-vanishing denominator
- \item[{\tt freeabs\_ [fi] (t) :}] Do not use solutions of ODEs that
- involve the {\tt abs} function
- \item[{\tt freeint\_ [fi] (t) :}] Do only integrations if expl.\ part
- is integrable
- \item[{\tt odesolve\_ (100) :}] maximal length of a de (number of terms) to be
- integrated as ode
- \item[{\tt max\_factor (400) :}] maximal number of terms to be factorized
- \item[{\tt low\_gensep (6) :}] max.\ size of expressions to be separated in a
- generalized way by `quick\_gen\_separation'
- \item[{\tt high\_gensep (300) :}] min. size of expressions to separate in a
- generalized way by `quick\_gen\_separation'
- \item[{\tt new\_gensep (nil) :}] whether or not a newer (experimental)
- form of gensep should be used
- \item[{\tt subst\_* :}] maximal length of an expression to be substituted,
- used with different values for different
- procedures {\tt subst\_level\_*}
- \item[{\tt cost\_limit5 (100) :}] maximal number of extra terms
- generated by a subst.
- \item[{\tt max\_red\_len (50000) :}] maximal product of lengths of two
- equations to be combined with length-reducing decoupling
- \item[{\tt target\_limit\_* (nil) :}] maximal product
- length(pde)*length(substituted expression) for
- PDEs in which substitutions are to be made,
- nil ==> no length limit,
- used with different values for different
- procedures {\tt subst\_level\_*}
- \item[{\tt length\_inc (1.0) :}] factor by which the length of an
- expression may grow when performing
- {\tt diff\_length\_reduction}
- \item[{\tt tr\_main [tm] (nil) :}] Trace main procedure
- \item[{\tt tr\_gensep [ts] (nil) :}] Trace generalized separation
- \item[{\tt tr\_genint [ti] (nil) :}] Trace generalized integration
- \item[{\tt tr\_decouple [td] (nil) :}] Trace decoupling process
- \item[{\tt tr\_redlength [tr] (nil) :}] Trace length reduction
- \item[{\tt tr\_orderings [to] (nil) :}] Trace orderings stuff
- \item[{\tt homogen\_ (nil) :}] Test for homogeneity of each equation
- (for debugging)
- \item[{\tt solvealg\_ (nil) :}] Use SOLVE for algebraic equations
- \item[{\tt print\_ [pl] (12) :}] maximal length of an expression to be printed
- \item[{\tt print\_more [pm] (t) :}] Print more informations about the pdes
- \item[{\tt print\_all [pa] (nil) :}] Print all informations about the pdes
- \item[{\tt logoprint\_ (t) :}] print logo after crack call
- \item[{\tt poly\_only (nil) :}] all equations are polynomials only
- \item[{\tt time\_ (nil) :}] print the time needed for running crack
- \item[{\tt dec\_hist (0) :}] length of pde history list during decoupling
- \item[{\tt maxalgsys\_ (20) :}] max. number of equations to be solved
- in specialsol
- \item[{\tt adjust\_fnc (nil) :}] if t then free constants/functions
- are scaled and redundant ones are dropped to
- simplify the result after the computation has been
- completed
- %\item[{\tt orderings\_ (nil) :}] Stores the orderings list, nil initially
- %\item[{\tt simple\_orderings (t) :}] Turn off orderings support
- % except for trivial case
- \item[{\tt lex\_df [od] (nil) :}] if t then use lexicographical
- instead of total degree ordering of derivatives
- \item[{\tt lex\_fc [og] (t) :}] if t then lexicographical ordering of
- functions has higher priority than any ordering of
- derivatives
- \item[{\tt collect\_sol (t) :}] whether solutions found shall be collected and
- returned together at the end or not (to save
- memory), matters only for non-linear problems with
- very many special solutions. If a computation has
- to be performed with any solution that is found,
- then these commands can be put into a procedure
- {\tt algebraic procedure crack\_out(eqns,assigns,freef,ineq)}
- which is currently empty in file {\tt crmain.red}
- but which is called for each solution.
- \item[{\tt struc\_eqn (nil) :}] whether the equations has the form of
- structural equations (an application are the
- Killing vector and Killing tensor computations)
- \item[{\tt quick\_decoup (nil) :}] whether decoupling should be done
- faster with less care for saving memory
- \item[{\tt idnties\_ (nil) :}] list of identities resulting from reductions and
- integrability conditions
- \item[{\tt record\_hist (nil) :}] whether the history of equations is
- to be recorded
- \item[{\tt keep\_parti [kp] (nil) :}] whether for each equation a copy
- in partitioned form is to be stored to speed up
- several simplifications but which needs more memory
- \item[{\tt size\_watch (nil) :}] whether before each computational step
- the size of the system shall be recorded in the
- global variable size\_hist
- \item[{\tt inter\_divint (nil) :}] whether the integration of divergence
- identities with more than 2 differentiation variables
- shall be confirmed interactively
- \item[{\tt do\_recycle (nil) :}] whether function names shall be recycled
- or not (saves memory but computation is less clear to follow)
- \item[{\tt old\_history (nil) :}]
- old\_history is interactive input to be read from
- this list
- \item[{\tt confirm\_subst [cs] (nil) :}] whether substitutions have to be
- confirmed interactively
- \item[{\tt mem\_eff (t) :}] whether to be memory efficient even if slower
- \item[{\tt force\_sep (nil) :}] whether direct separation should be forced even
- if functions occur in the supposed to be linear
- independent explicit expressions (for non-lin. prob.)
- \end{description}
- \section{Contents of the Crack package}
- The package {\sc Crack} contains a number of modules.
- The basic ones are for computing a pseudo differential Gr\"{o}bner
- Basis (using integrability conditions in a systematic way), integrating
- exact PDEs, separating PDEs, solving DEs containing functions of only
- a subset of all variables and solving standard ODEs (of Bernoulli or
- Euler type, linear, homogeneous and separable ODEs). These facilities
- will be described briefly together with examples. The test file
- {\tt crack.tst} demonstrates these and others.
- \subsection{Pseudo Differential Gr\"{o}bner Basis}
- This module (called `decoupling' in {\tt proc\_list\_})
- reduces derivatives in equations by using other equations and it applies
- integrability conditions to formulate additional equations which are
- subsequently reduced, and so on.
- A general algorithm to bring a system of PDEs into a standard form
- where all integrability conditions are satisfied by applying
- a finite number of additions, multiplications and differentiations
- is based on the general theory of involutive systems \cite{Riq,Th,Ja}.
- Essential to this theory is a total ordering of partial derivatives
- which allows assignment to each PDE of a {\em Leading Derivative}
- (LD) according to a chosen ordering of functions
- and derivatives. Examples for possible orderings are
- \begin{description}
- \item lex.\ order of functions $>$ lex.\ order of variables,
- \item lex.\ order of functions $>$ total differential order $>$ lex.\
- order of variables,
- \item total order $>$ lex.\ order of functions $>$ lex.\ order of variables
- \end{description}
- or mixtures of them by giving weights to individual functions and variables.
- Above, the `$>$' indicate ``before'' in priority of criteria. The principle
- is then to
- \begin{description}
- \item take two equations at a time and differentiate them as often as
- necessary to get equal LDs,
- \item regard these two equations as algebraic equations in
- the common LD and calculate the remainder w.r.t.\ the LD, i.e.\ to
- generate an equation without the LD by the Euclidean algorithm, and
- \item add this equation to the system.
- \end{description}
- Usually pairs of equations are taken first, such that only one must be
- differentiated. If in such a generation step one of both equations is not
- differentiated then it is called a
- simplification step and this equation will be replaced by the new equation.
- The algorithm ends if each combination of two equations yields only equations
- which simplify to an identity modulo the other equations.
- A more detailed description is given e.g. in \cite{Alex,Reid1}.
- Other programs implementing this algorithm are described e.g. in
- \cite{FS,Alex,Fush,Reid1,Reid2,Reid3} and \cite{Mans}.
- In the interactive mode of {\sc Crack} it is possible to change the
- lexicographical ordering of variables, of functions, to choose between
- `total differential order' ordering of variables or lexicographical
- ordering of variables and to choose whether lexicographical ordering
- of functions should have a higher priority than the ordering of the
- variables in a derivative, or not.
- An example of the computation of a differential Gr\"{o}bner Basis is
- given in the test file {\tt crack.tst}.
- \subsection{Integrating exact PDEs}
- The technical term `exact' is adapted for PDEs from exterior calculus and
- is a small abuse of language but it is useful to characterize the kind of PDEs
- under consideration.
- The purpose of the integration module in {\sc Crack} is to decide
- whether a given differential
- expression $D$ which involves unknown functions $f^i(x^j),\;\; 1\leq i\leq m$
- of independent variables $x^j, 1\leq j\leq n$
- is a total derivative of another expression $I$
- w.r.t. some variable $x^k, 1\leq k\leq n$
- \[ D(x^i,\; f^j,\; f^j,_p,\; f^j,_{pq}, \ldots)
- = \frac{d I(x^i,\; f^j,\; f^j,_p,\; f^j,_{pq}, \ldots)}{d x^k}. \]
- The index $k$ is
- reserved in the following for the integration variable $x^k.$
- With an appropriate function of integration $c^r,$
- which depends on all variables except $x^k$ it is no loss of generality
- to replace $0 = D$ by $0 = I + c^r$ in a system of equations.
- Of course there
- always exists a function $I$ with a total derivative equal to $D$ but
- the question is whether for \underline{arbitrary} $f^i$ the integral
- $I$ is functionally dependent only on the $f^i$ and their derivatives,
- and \underline{not on integrals of $f^i.$} \\
- \underline{Preconditions:} \\
- $D$ is a polynomial in the $f^i$ and their derivatives. The number of
- functions and variables is free.
- For deciding the existence of $I$ only, the explicit occurrence of the
- variables $x^i$ is arbitrary. In order to actually
- calculate $I$ explicitly, $D$ must have the property that all terms in $D$
- must either contain an unknown function of $x^k$ or
- must be formally integrable w.r.t. $x^k.$
- That means if $I$ exists then
- only a special explicit occurrence of $x^k$ can prevent the
- calculation of $I$
- and furthermore only in those terms which do not contain
- any unknown function of $x^k.$
- If such terms occur in $D$ and $I$ exists then $I$ can still be expressed
- as a polynomial in the $f^i, f^i,_j, \ldots$ and terms containing
- indefinite integrals with integrands explicit in $x^k.$ \\
- \underline{Algorithm:} \\
- Successive partial integration of the term with the highest
- $x^k$-derivative of any $f^i.$ By that the
- differential order w.r.t. $x^k$ is reduced
- successively. This procedure is always applicable because steps involve only
- differentiations and the polynomial
- integration $(\int h^n\frac{\partial h}{\partial x}dx =
- h^{n+1}/(n+1))$ where $h$ is a partial derivative of some function
- $f^i.$ For a more detailed description see \cite{WoInt}.\\
- \underline{Stop:} \\
- Iteration stops if no term with any $x^k$-derivative of any $f^i$ is left.
- If in the remaining un-integrated terms any $f^i(x^k)$ itself occurs,
- then $I$ is not expressible with $f^i$ and its derivatives only. In
- case no $f^i(x^k)$ occurs then any remaining terms can contain $x^k$ only
- explicitly. Whether they can be integrated depends on their formal
- integrability. For their integration the {\sc Reduce} integrator is
- applied. \\
- \underline{Speed up:} \\
- The partial integration as described above preserves derivatives with
- respect to other variables. For example, the three terms $f,_x, f
- f,_{xxx}, f,_{xxy}$ can not combine somehow to the same terms in the
- integral because if one ignores $x$-derivatives then it is clear that
- $f, f^2$ and $f,_y$ are like three completely different expressions
- from the point of view of $x$-integrations.
- This allows the following drastic speed up
- for large expressions. It is possible to partition the complete sum of
- terms into partial sum such that each of the partial sum has to be
- integrable on its own. That is managed by generating a label for each
- term and collecting terms with equal label into partial sums. The
- label is produced by dropping all $x$-derivatives from all functions
- to be computed and dropping all factors which are not powers of derivatives of
- functions to be computed.
- The partitioning into partial sums has two effects. Firstly, if the
- integration of one partial sum fails then the remaining sums do not have
- to be tried for integration. Secondly, doing partial integration for
- each term means doing many subtractions. It is much faster to subtract
- terms from small sums than from large sums.
- \underline{Example :} \\
- We apply the above algorithm to
- \begin{equation}
- D := 2f,_yg' + 2f,_{xy}g + gg'^3 + xg'^4 + 3xgg'^2g'' = 0
- \label{D}
- \end{equation}
- with $f = f(x,y), \, g = g(x), \, '\equiv d/dx.$
- Starting with terms containing $g$
- and at first with the highest derivative $g,_{xx},$ the steps are
- \[
- \begin{array}{rcccl}
- \int 3xgg,_x^2g,_{xx} dx
- & = & \int d(xgg,_x^3)
- & - & \int \left( \partial_x(xg) g,_x^3\right) dx \\ \\
- & = & xgg,_x^3 & - & \int g,_x^3(g + xg,_x) dx,
- \end{array} \]
- \[ I := I + xgg,_x^3 \]
- \[ D := D - g,_x^3(g + xg,_x) - 3xgg,_x^2g,_{xx} \]
- The new terms $- g,_x^3(g + xg,_x)$ are of lower order than $g,_{xx}$
- and so in the expression $D$ the maximal order of $x$-derivatives
- of $g$ is lowered. The conditions that $D$ is exact are the following.
- \begin{description}
- \item The leading derivative must occur linearly before each partial
- integration step.
- \item After the partial integration of the terms with first order
- $x$-derivatives of $f$ the remaining $D$ must not contain $f$
- or other derivatives of $f$, because such terms cannot
- be integrated w.r.t.\ $x$ without specifying $f$.
- \end{description}
- The result of $x$- and $y$-integration in the above example is
- (remember $g=g(x)$)
- \begin{equation}
- 0 = 2fg + xygg,_x^3 + c_1(x) + c_2(y) \; \; (=I). \nonumber
- \end{equation}
- {\sc Crack} can now eliminate $f$ and substitute
- for it in all other equations. \\
- \underline{Generalization:} \\
- If after applying the above basic algorithm, terms are left which contain
- functions of $x^k$ but each of these functions depends only on a subset of
- all $x^i, 1\leq i\leq n,$ then a generalized version of the above algorithm
- can still provide a formal expression for the integral $I$
- (see \cite{WoInt}). The price consists of
- additional differential conditions, but they are equations in less variables
- than occur in the integrated equation. Integrating for example
- \begin{equation}
- \tilde{D} = D + g^2(y^2 + x\sin y + x^2e^y) \label{Dnew}
- \end{equation}
- by introducing as few
- new functions and additional conditions as possible gives as the integral
- $\tilde{I}$
- \begin{eqnarray*}
- \tilde{I} & = & 2fg + xygg,_{x}^{3} + c_1(x) + c_2(y) \\
- & & + \frac{1}{3}y^3c_3'' - \cos y(xc_3'' - c_3)
- + e^y(x^2c_3'' - 2xc_3' + 2c_3)
- \end{eqnarray*}
- with $c_3 = c_3(x), \, '\equiv d/dx$ and the single additional
- condition $g^2 = c_3'''.$
- The integration of the new terms of (\ref{Dnew}) is
- achieved by partial integration again, for example
- \begin{eqnarray*}
- \int g^2x^2 dx & = & x^2\int g^2 dx - \int (2x\!\int g^2 dx) dx \\
- & = & x^2\int g^2 dx - 2x\int\!\!\int g^2 dx
- + 2 \int\!\!\int\!\!\int g^2 dx \\
- & = & x^2c_3'' - 2xc_3' + 2c_3.
- \end{eqnarray*}
- \underline{Characterization:} \\
- This algorithm is a decision algorithm which does not involve any
- heuristic.
- After integration the new equation is still a polynomial
- in $f^i$ and in the new constant or function of integration.
- Therefore the algorithms for bringing the system into standard form can still
- be applied to the PDE-system
- after the equation $D = 0$ is replaced by $I = 0.$
- The complexity of algorithms for bringing a PDE-system into a standard
- form depends nonlinearly on the order of these equations because of
- the nonlinear increase of the number of different leading derivatives
- and by that the number of equations generated intermediately by such
- an algorithm. It therefore in general pays off to integrate equations
- during such a standard form algorithm.
- If an $f^i,$ which depends on all variables, can be eliminated after an
- integration, then depending on its length
- it is in general helpful to substitute $f^i$ in other equations and
- to reduce the number of equations and functions by one. This is especially
- profitable if the replaced expression is short and
- contains only functions of less variables than $f^i.$ \\
- \underline{Test:} \\
- The corresponding test input is
- \begin{verbatim}
- depend f,x,y;
- depend g,x;
- crack({2*df(f,y)*df(g,x)+2*df(f,x,y)*g+g*df(g,x)**3
- +x*df(g,x)**4+3*x*g*df(g,x)**2*df(g,x,2)
- +g**2*(y**2+x*sin y+x**2*e**y)},
- {},{f,g},{});
- \end{verbatim}
- The meaning of the {\sc Reduce} command {\tt depend} is to declare that $f$
- depends in an unknown way on $x$ and $y$. For more details on the
- algorithm see \cite{WoInt}.
- \subsection{Direct separation of PDEs}
- As a result of repeated integrations the functions in the
- remaining equations have less and less variables. It therefore may happen
- that after a substitution an equation results where at least one variable
- occurs only explicitly and not as an argument of an unknown function.
- Consequently all coefficients of linearly independent expressions in this
- variable can be set to zero individually. \\
- {\em Example:} \\
- $f = f(x,y), \;\; g = g(x), \;\; x,y,z$ are independent variables.
- The equation is
- \begin{equation}
- 0 = f,_y + z(f^2+g,_x) + z^2(g,_x+yg^2) \label{sep}
- \end{equation}
- $x$-separation? $\rightarrow$ no \\
- $y$-separation? $\rightarrow$ no \\
- $z$-separation? $\rightarrow$ yes: $0 \,=\, f,_y \,=\, f^2+g,_x \,=\,
- g,_x+yg^2$ \\
- $y$-separation? $\rightarrow$ yes: $0 = g,_x = g^2\;\;$
- (from the third equation from the $z$-separation)
- If $z^2$ had been replaced in (\ref{sep}) by a third
- function $h(z)$ then direct separation would not have been possible.
- The situation changes if $h$ is a parametric function which is
- assumed to be independently given and which should not be
- calculated, i.e.\ $f$ and $g$ should be calculated for any
- arbitrary given $h(z)$. Then the same separation could have been
- done with an extra treatment of the special case $h,_{zz} = 0,$
- i.e.\ $h$ linear in $z$. This different treatment of unknown functions
- makes it necessary to input explicitly the functions to be
- calculated as the third argument to {\sc Crack}. The input
- in this case would be
- \begin{verbatim}
- depend f,x,y;
- depend g,x;
- depend h,z;
- crack({df(f,y)+z*f**2+(z+h)*df(g,x)+h*y*g**2},{},{f,g},{z});
- \end{verbatim}
- The fourth parameter for {\sc Crack} is necessary to make clear that
- in addition to the variables of $f$ and $g$, $z$ is also an independent
- variable.
-
- If the flag {\tt independence\_} is not {\tt nil} then {\sc Crack} will
- stop if linear independence of the explicit expressions of the
- separation variable (in the example $1,z,z^2$) is not clear and ask
- interactively whether separation should be done or not.
- \subsection{Indirect separation of PDEs}
- For the above direct separation a precondition is that at least one
- variable occurs only explicitly or as an argument of parametric
- functions. The situation where each variable is an argument of at least
- one function but no function contains all independent variables of an
- equation needs a more elaborate treatment.
- The steps are these
- \begin{description}
- \item A variable $x_a$ is chosen which occurs in as few functions as possible.
- This variable will be separated directly later which
- requires that all unknown functions $f_i$ containing $x_a$ are to be
- eliminated. Therefore, as long as $F:=\{f_i\}$ is not empty do the following:
- \begin{description}
- \item Choose the function $f_i(y_p)$ in $F$ with the smallest number of
- variables $y_p$ and with $z_{ij}$ as those variables on which $f_i$ does
- not depend.
- \item Identify all different products $P_{ik}$ of powers of
- $f_i$-derivatives and of $f_i$ in the equation.
- Determine the $z_{ij}$-dependent factors $C_{ik}$ of the coefficients
- of $P_{ik}$ and store them in a list.
- \item For each $C_{il}$ ($i$ fixed, $l=1,\ldots)$ choose a $z_{ij}$ and :
- \begin{description}
- \item divide by $C_{il}$ the equation and all following elements
- $C_{im}$ with $m>l$ of this list, such that these elements are
- still the actual coefficients in the equation after the division,
- \item differentiate the equation and the $C_{im}, m>l$ w.r.t.\ $z_{ij}$
- \end{description}
- \end{description}
- \item The resulting equation no longer contains any unknown function of $x_a$
- and can be separated w.r.t.\ $x_a$ directly in case $x_a$ still occurs
- explicitly. In both cases the equation(s) is (are) free of $x_a$ afterwards
- and inverting the sequence of integration and multiplication
- of all those equations (in case of direct separability) will also result
- in an equation(s) free of $x_a.$ More exactly, the steps are
- \begin{description}
- \item multiplication of the equation(s) and the $C_{im}$ with
- $m<l$ by the elements
- of the $C_{ik}$-lists in exactly the inverse order,
- \item integration of these exact PDEs and the $C_{im}$ w.r.t.\ $z_{ij}$.
- \end{description}
- \item The equations originating that way are used to evaluate those
- functions which do not depend on $x_a$ and which survived in the above
- differentiations. Substituting these functions in the original equation,
- may enable direct separability w.r.t. variables on which the $f_i$
- do not depend on.
- \item The whole procedure is repeated for another variable $x_b$ if the
- original DE could not be separated directly and still has the property that
- it contains only functions of a subset of all variables in the equation.
- \end{description}
- The additional bookkeeping of coefficients $C_{ik}$ and their updating by
- division, differentiation, integration and multiplication is done to use
- them as integrating factors for the backward integration.
- The following example makes this clearer. The equation is
- \begin{equation}
- 0 = f(x) g(y) - \frac{1}{2}xf'(x) - g'(y) - (1+x^2)y. \label{isep}
- \end{equation}
- The steps are (equal levels of indentation in the example correspond to
- those in the algorithm given above)
- \begin{description}
- \item $x_1:=x, \, F=\{f\}$
- \begin{description}
- \item Identify $f_1:=f, \; \; \; \; \; y_1:=x, \; \; \; \; \; z_{11}:=y$
- \item and $P_1=\{f',f\}, \; \; \; \; \; C_1=\{1,g\}$
- \begin{description}
- \item Divide $C_{12}$ and
- (\ref{isep}) by $C_{11}=1$ and differentiate w.r.t. $z_{11}=y:$
- \begin{eqnarray}
- 0 & = & fg' - g'' - (1+x^2) \label{isep2} \\
- C_{12} & = & g' \nonumber
- \end{eqnarray}
- \item Divide (\ref{isep2}) by $C_{12}=g'$ and differentiate w.r.t. $z_{11}=y:$
- \[ 0 = - (g''/g')' - (1+x^2)(1/g')' \]
- \end{description}
- \end{description}
- \item Direct separation w.r.t.\ $x$ and integration:
- \[\begin{array}{rclclcl}
- x^2: 0 & = & (1/g')' & \Rightarrow & c_1g' = 1 & \Rightarrow &
- g = y/c_1 + c_2 \\
- x^0: 0 & = & (g''/g')' & \Rightarrow & c_3g' = g'' & \Rightarrow &
- c_3 = 0
- \end{array} \]
- \item Substitution of $g$ in the original DE
- \[0 = (y/c_1+c_2)f - \frac{1}{2}xf' - 1/c_1 - (1+x^2)y \]
- provides a form which allows {\sc Crack} standard methods to succeed
- by direct separation w.r.t.\ $y$
- \[\begin{array}{rclcl}
- y^1: 0 & = & f/c_1 - 1 - x^2 & \Rightarrow & f' = 2c_1x \\
- y^0: 0 & = & c_2f - \frac{1}{2}xf' - 1/c_1 & \Rightarrow & 0 =
- c_2c_1(1+x^2) - c_1x^2 - 1/c_1
- \end{array}\]
- and direct separation w.r.t.\ $x$:
- \begin{eqnarray*}
- x^0: 0 & = & c_2c_1 - c_1 \\
- x^2: 0 & = & c_2c_1 - 1/c_1 \\
- & \Rightarrow & 0 = c_1 - 1/c_1 \\
- & \Rightarrow & c_1 = \pm 1 \Rightarrow c_2 = 1.
- \end{eqnarray*}
- \end{description}
- We get the two solutions $f = 1 + x^2, g = 1 + y$ and
- $f = - 1 - x^2, g = 1 - y.$ The corresponding input to {\sc Crack} would be
- \begin{verbatim}
- depend f,x;
- depend g,y;
- crack({f*g-x*df(f,x)/2-df(g,y)-(1+x**2)*y},{},{f,g},{});
- \end{verbatim}
-
- \subsection{Solving standard ODEs}
- For solving standard ODEs the package {\sc ODESolve} by Malcalm MacCallum and
- Francis Wright
- \cite{Mal} is applied. This package is distributed with {\sc Reduce}
- and can be used independently of {\sc Crack}. The syntax of
- {\sc ODESolve} is quite similar to that of {\sc Crack} \\
- \verb+depend+ {\it function}, {\it variable}; \\
- \verb+odesolve(+ODE, {\it function}, {\it variable}); \\
- In the present form (1998) it solves standard first order ODEs
- (Bernoulli and Euler type, with separable variables, $\ldots$) and linear
- higher order ODEs with constant coefficients.
- An improved version is currently under preparation by Francis Wright.
- The applicability of {\sc ODESolve} is
- increased by a {\sc Crack}-subroutine which recognizes such PDEs in which
- there is only one unknown function of all variables and all occurring
- derivatives of this function
- are only derivatives w.r.t. one variable of only one partial derivative.
- For example the PDE for $f(x,y)$
- \[ 0 = f,_{xxy} + f,_{xxyy} \]
- can be viewed as a first order ODE in $y$ for $f,_{xxy}.$
- \section{General hints}
- \subsection{Problems involving $\sin, \cos$ or other special functions}
- If the equations to be solved involve special functions, like $\sin$
- and $\cos$ then one is inclined to add {\tt let}-rules for simplifying
- expressions. Before doing this the simplification rules at the end of
- the file {\tt crinit.red} should be inspected such that new rules do
- not lead to cycles with existing rules. One possibility is to replace
- existing rules, for example to substitute the existing rule \\
- \verb+ trig1\_:={sin(~x)**2 => 1-cos(x)**2}$ + by the new rule \\
- \verb+ trig1\_:={cos(~x)**2 => 1-sin(x)**2}$ +.
- These rules are switched off when integrations are performed in order
- not to interfere with the {\sc Reduce} Integrator.
- \subsection{Exchanging time for memory}
- The optimal order of applying different methods to the equations of a system
- is not fixed. It does depend, for example, on the distributions of
- unknown functions in the
- equations and on what the individual methods would produce in the next
- step. For example, it is possible that the
- decoupling module which applies integrability conditions through cross
- differentiations of equations is going well up to a stage when it
- suddenly produces huge equations. They not only occupy much memory,
- they also are slow to handle.
- Right {\em before} this explosion started other methods should
- have been tried (shortening of equations, any integrations, solution of
- underdetermined ODEs if there are any,...). These alternative methods are normally
- comparatively slow or unfavourable as they introduce new functions but
- under the current circumstances they may be perfect to avoid any growth
- and to complete the calculation. How could one have known beforehand that some
- method will lead to an explosion? One does not know. But one can
- regularly make a backup with the interactive {\tt sb} command and
- restart at this situation if necessary.
- \section*{Acknowledgement}
- Andreas Brand is the author of a number of core modules of {\sc
- Crack}. The currently used data structure and program structure of the
- kernel of {\sc Crack} are due to him. He contributed to the
- development of {\sc Crack} until 1997.
- Francis Wright contributed a module that provides simplifications
- of expressions involving symbolic derivatives and integrals. Also, {\sc Crack}
- makes extensive use of the {\sc Reduce} program {\sc ODESolve} written
- by Malcolm MacCallum and Francis Wright.
- Arrigo Triulzi contributed in supporting the use of different total
- orderings of derivatives in doing pseudo differential Gr\"{o}bner
- basis computations.
- Work on this package has been supported by the Konrad Zuse
- Institute / Berlin through a fellowship of T.W.. Winfried
- Neun and Herbert Melenk are thanked for many discussions and
- constant support.
- Anthony Hearn provided free copies of {\sc Reduce} to us as a
- {\sc Reduce} developers group which also is thankfully acknowledged.
- \begin{thebibliography}{99}
- \bibitem{Riq} C. Riquier, Les syst\`{e}mes d'\'{e}quations aux d\'{e}riv\'{e}es
- partielles, Gauthier--Villars, Paris (1910).
- \bibitem{Th} J. Thomas, Differential Systems, AMS, Colloquium
- publications, v. 21, N.Y. (1937).
- \bibitem{Ja} M. Janet, Le\c{c}ons sur les syst\`{e}mes d'\'{e}quations aux
- d\'{e}riv\'{e}es, Gauthier--Villars, Paris (1929).
- \bibitem{Topu} V.L. Topunov, Reducing Systems of Linear Differential
- Equations to a Passive Form, Acta Appl. Math. 16 (1989) 191--206.
- \bibitem{Alex} A.V. Bocharov and M.L. Bronstein, Efficiently
- Implementing Two Methods of the Geometrical Theory of Differential
- Equations: An Experience in Algorithm and Software Design, Acta. Appl.
- Math. 16 (1989) 143--166.
- \bibitem{Reid1} G.J. Reid, A triangularization algorithm which
- determines the Lie symmetry algebra of any system of PDEs, J.Phys. A:
- Math. Gen. 23 (1990) L853-L859.
- \bibitem{Reid2} G. J. Reid, A. D. Wittkopf and A. Boulton, Reduction
- of systems of nonlinear partial differential equations to simplified
- involutive forms, European Journal of Applied Mathematics,
- Vol 7. (1996) 604-635.
- \bibitem{Reid3} G. J. Reid, A. D. Wittkopf and P. Lin,
- Differential-Elimination Completion Algorithms for Differential Algebraic
- Equations and Partial Differential Algebraic Equations, to appear in
- Studies in Applied Mathematics (Submitted July 1995).
- \bibitem{FS} F. Schwarz, Automatically Determining Symmetries of Partial
- Differential Equations, Computing 34, (1985) 91-106.
- \bibitem{Fush} W.I. Fushchich and V.V. Kornyak, Computer Algebra
- Application for Determining Lie and Lie--B\"{a}cklund Symmetries of
- Differential Equations, J. Symb. Comp. 7, (1989) 611--619.
- \bibitem{Mans} E.L. Mansfield,
- The differential algebra package diffgrob2, Mapletech 3, (1996) 33-37 .
- \bibitem{Ka} E. Kamke, Differentialgleichungen, L\"{o}sungsmethoden
- und L\"{o}sungen, Band 1, Gew\"{o}hnliche Differentialgleichungen,
- Chelsea Publishing Company, New York, 1959.
- \bibitem{Wo} T. Wolf, An Analytic Algorithm for Decoupling and Integrating
- systems of Nonlinear Partial Differential Equations, J. Comp. Phys.,
- no. 3, 60 (1985) 437-446 and, Zur analytischen Untersuchung und exakten
- L\"{o}sung von Differentialgleichungen mit Computeralgebrasystemen,
- Dissertation B, Jena (1989).
- \bibitem{WoInt} T. Wolf, The Symbolic Integration of Exact PDEs,
- preprint, (1991).
- \bibitem{WM} M.A.H. MacCallum, F.J. Wright, Algebraic Computing with REDUCE,
- Clarendon Press, Oxford (1991).
- \bibitem{Mal} M.A.H. MacCallum, An Ordinary Differential Equation
- Solver for REDUCE, Proc. ISAAC'88, Springer Lect. Notes in Comp Sci.
- 358, 196--205.
- \bibitem{Step} H. Stephani, Differential equations, Their solution using
- symmetries, Cambridge University Press (1989).
- \bibitem{LIEPDE} T. Wolf, An efficiency improved program {\sc LiePDE}
- for determining Lie - symmetries of PDEs, Proceedings of the workshop on
- Modern group theory methods in Acireale (Sicily) Nov. (1992)
- \bibitem{Karp} V.I. Karpman, Phys. Lett. A 136, 216 (1989)
- \bibitem{Cham} B. Champagne, W. Hereman and P. Winternitz, The computer
- calculation of Lie point symmetries of large systems of differential
- equation, Comp. Phys. Comm. 66, 319-340 (1991)
- \end{thebibliography}
-
- \end{document}
|