123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- Help file for CONLAW versions 1,2,3
- ___________________________________
- Thomas Wolf, Oct. 1997
- Purpose:
- --------
- The procedures CONLAW1, CONLAW2, CONLAW3 try to find conservation laws
- for a given single/system of differential equation(s) (ODEs or PDEs)
- df(ui,...) = wi(x,uj,...,df(uj,...),...) (1)
- CONLAW1 tries to find the conserved current p_i by solving
- df(p_t,t) + df(p_x,x) [+ ...] = 0 modulo (1) (2)
- directly. CONLAW2 tries to solve determining equations for characteristic
- functions q_i such that
- df(p_t,t) + df(p_x,x) [+ ...] = sum_i q_i*( df(ui,...) - wi ) (3)
- holds. CONLAW3 tries to find p_i and q_j by solving (3) directly.
- All three procedures have the same syntax. They have two parameters,
- both are lists. The first parameter specifies the equations (1), the second
- specifies the computation to be done. One can either specify an ansatz for
- p_i, q_j or investigate a general situation, only specifying the order of the
- characteristic functions or the conserved current. For a more detailed
- description see the file conlaw.tex.
- Syntax:
- -------
- CONLAWi(problem,runmode); where i=1,2,3
- problem ~ {equations, ulist, txlist}
- equations ... list of equations,
- each has the form df(ui,..) = ...
- where the LHS (left hand side) df(ui,..)
- is selected such that
- - The RHS (right h.s.) of an equations must
- not include the derivative on the LHS
- nor a derivative of it.
- - The LHS of any equation must not occur in any
- other equation nor any derivative of the
- LHS.
- - Each of the unknown functions occurs on the
- LHS of exactly one equation
- ulist ... list of function names, which can be chosen freely
- txlist ... list of variable names, which can be chosen freely
- runmode ~ {mindensord, maxdensord, expl, flist, inequ}
- mindensord ... the minimum of the highest order of derivatives in u
- in p_x1 for CONLAW1
- in q_j for CONLAW2,CONLAW3
- maxdensord ... the maximum of the highest order of derivatives in u
- in p_x1 for CONLAW1
- in q_j for CONLAW2,CONLAW3
- expl ... (t/nil) whether or not the charac. functions q_i
- or conserved current may depend explicitly on
- the variables of txlist
- flist ... unknown functions in any expressions p_i, q_j
- which have been assigned before calling CONLAW
- in order to investigate a special ansatz for
- the p_i or q_j,
- also all parameters and parametric functions in
- the equation that are to be calculated such that
- conservation laws exist,
- if there are no such unknown functions then
- input the empty list: {}
- inequ ... inequ is a list of expressions non of which
- may be identically zero for the conservation
- law to be found, if there is no such expression
- then input an empty list: {}
- How to formulate an ansatz:
- ---------------------------
- An ansatz for a conservation law can be formulated by specifying one
- or more of the functions p_i for CONLAW1, one or more of the functions
- q_i for CONLAW2, one or more of p_i,q_i for CONLAW3.
- The `i' in p_i stands for a variable name, the `i' in q_i stands for
- an index - the number of the equation in the input system of equations
- with which q_i is multiplied to give the RHS of (1).
- There is a restriction in the structure of all the
- expressions for p_i, q_j that are specified: they must be homogeneous linear
- in some unknown function or constant.
- All such functions and constants must be
- listed in flist (see above). The dependencies of such functions
- must be defined before calling CONLAWi. This is done with the
- command DEPEND, e.g.
- DEPEND f,t,x,u$
- to specify f=f(t,x,u).
- If one wants to have f as a function of derivatives of u(t,x), say
- f depending on df(u,t,x,2), then one can *not* write
- DEPEND f,df(u,t,x,2)$ % wrong
- but instead
- DEPEND f,u!`1!`2!`2$ % correct
- if txlist has been specified as {t,x}. As t is the first variable and
- x is the second variable in txlist and u is differentiated ones wrt. t
- and two times wrt. x we therefore get u!`1!`2!`2. The character ! is the
- exempt character to allow special characters like ` to occur in an
- identifier name.
- Comments:
- ---------
- 1. The input to CONLAW1, CONLAW2, CONLAW3 is the same apart from:
- - an ansatz for q_i is ignored in CONLAW1
- - an ansatz for p_i is ignored in CONLAW2
- - the meaning of mindensord, maxdensord is different in CONLAW1 on
- one hand and CONLAW2,CONLAW3 on the other (see above).
- 2. It matters how the differential equations are input, i.e. which
- derivatives are eliminated. For example, the Korteweg - de Vries
- equation if input in the form df(u,x,3)=-u*df(u,x)-df(u,t) instead of
- df(u,t)=-u*df(u,x)-df(u,x,3) in CONLAW1 and choosing maxdensord=1 then
- P_i will be of at most first order, Div P of second order and df(u,x,3)
- will not be substituted and no non-trival conservation laws can be found.
- This does not mean that one will not find low order conservation laws at
- all with the substitution df(u,x,3)=..., one only has to go to
- maxdensord=2 with longer computations as a consequence compared to the
- input df(u,t)=-u*df(u,x)-df(u,x,3) where maxdensord=0 is enough to find
- non-trivial conservation laws.
- 3. It is not the case, that for any conserved current p_i, satisfying (2),
- there must exist characteristic function(s) q_i such that they satisfy (3).
- One can therefore not specify a known density p_t for CONLAW3 and hope to
- calculate the remaining p_i and the corresponding q_i with CONLAW3. What one
- can do is to use CONLAW1 to calculate the other components of p_i. But this
- restriction for CONLAW3 does not imply that it misses conservation laws.
- If (1) is a totally non-degenerate system then for each current p_i
- satisfying (2) there exists a current P_i differing from p_i only by a curl
- (-> trivial conservation law) such that P_i satisfies (3) for some suitable
- q_i.
- 4. The q_i are uniquely determined only modulo the original equations (1).
- If one makes an ansatz for q_i then this freedom should be removed by having
- the q_i independent of the LHS's of the equations (1) and independent of
- derivatives of the LHS's of (1). If the q_i were allowed to depend on
- anything, (3) could be solved for one q_i in terms of arbitrary p_j and other
- q_j, giving a triviality and not a conservation law. Also, these q_i would
- be singular for solutions of the differential equations as the expression
- of the differential equation would appear in the denominator.
- 5. Any ansatz for p_i made for CONLAW1 or p_i,q_j made for CONLAW2 should
- as well be independent of the LHS's of the equations (1) and independent of
- derivatives of the LHS's of (1).
- Flags:
- ------
- LISP (PRINT_:= NIL/0/1/ ...)$
- print_=nil suppresses all CRACK output, if print_=n (an integer) then
- CRACK prints only equations with at most n terms
- LISP (LOGOPRINT_:=t/nil)$
- print of a logo at the start of CONLAWi or not
- CRACKHELP()$
- for other flags regarding the solution of the overdetermined PDE-system
- OFF BATCH_MODE$
- to solve the system of conditions with CRACK interactively
- Requirements:
- -------------
- REDUCE 3.5 or higher and
- the files crack.red, conlaw0.red and one of the files
- conlaw1.red, conlaw2.red, conlaw3.red depending which
- program should be used
- Either read in files with
- IN "crack.red","conlaw0.red","conlaw1.red"$
- (and appropriate paths) or compile them before with
- FASLOUT "crack"$
- IN "crack"$
- FASLEND$
- FASLOUT "conlaw0"$
- IN "conlaw0.red"$
- FASLEND$
- FASLOUT "conlaw1"$
- IN "conlaw1.red"$
- FASLEND$
- BYE$
- and load them later with
- LOAD crack,conlaw0,conlaw1$
- conlaw2, conlaw3 are treated like conlaw1.
- Examples: (see also conlaw.tst)
- ---------
- (A CRACK-procedure nodepnd is used to clean up after each run and
- delete all dependencies of each function in the list of functions
- in the argument of nodepnd.)
- lisp(print_:=nil); % to suppress output from CRACK
- - a single PDE:
- depend u,x,t$
- conlaw1({{df(u,t)=-u*df(u,x)-df(u,x,3)}, {u}, {t,x}},
- {0, 1, t, {}, {}})$
- nodepnd {u}$
- - a system of equations:
- depend u,x,t$
- depend v,x,t$
- conlaw1({{df(u,t)=df(u,x,3)+6*u*df(u,x)+2*v*df(v,x),
- df(v,t)=2*df(u,x)*v+2*u*df(v,x) }, {u,v}, {t,x}},
- {0, 1, t, {}, {}})$
- nodepnd {u,v}$
- - a system of equations with ansatz:
- depend u,x,t$
- depend v,x,t$
- depend r,t,x,u,v,u!`2,v!`2$
- q_1:=r*df(u,x,2)$
- conlaw2({{df(u,t)=df(v,x),
- df(v,t)=df(u,x) }, {u,v}, {t,x}},
- {2, 2, t, {r}, {r}})$
- nodepnd {u,v,r}$
- - for the determination of parameters, such that conservation laws exist:
- depend u,x,t;
- conlaw1({{df(u,t)=-df(u,x,5)-a*u**2*df(u,x)-b*df(u,x)*df(u,x,2)
- -c*u*df(u,x,3)},
- {u}, {t,x}},
- {0, 1, t, {a,b,c}, {}});
- nodepnd {u};
- - for first integrals of an ODE-system including the determination of
- parameter values s,b,r such that conservation laws exist:
- depend x,t;
- depend y,t;
- depend z,t;
- depend a1,x,t;
- depend a2,y,t;
- depend a3,z,t;
- p_t:=a1+a2+a3;
- conlaw2({{df(x,t) = - s*x + s*y,
- df(y,t) = x*z + r*x - y,
- df(z,t) = x*y - b*z},
- {x,y,z},{t}
- },
- {0,0,t,{a1,a2,a3,s,r,b},{}});
- nodepnd {x,y,z,a1,a2,a3};
|