Up | Next | Prev | PrevTail | Tail |
This package computes first integrals of ordinary differential equations (ODEs) or
conservation laws (CLs) of partial differential equations (PDEs) or systems of both. Four
different approaches to compute CLs have been implemented in four different procedures
CONLAW1
…CONLAW4
. All use the package CRACK to solve the overdetermined system
of conditions they generate.
The procedures CONLAW1
, CONLAW2
, CONLAW3
, CONLAW4
try to find conservation
laws for a given single/system of differential equation(s) (ODEs or PDEs)
CONLAW1
tries to find the conserved current \(P^i\) by solving
directly. CONLAW3
tries to find \(P^i\) and the characteristic functions (integrating factors) \(Q^{\nu }\) by solving
identically in all \(u\)-derivatives. Applying the Euler operator (variational derivative) for
each \(u^{\nu }\) on (20.58) gives a zero left hand side and therefore conditions involving
only \(Q^{\nu }\). CONLAW4
tries to solve these conditions identically in all \(u\)-derivatives
and to compute \(P^i\) afterwards. CONLAW2
does substitutions based on (20.56)
before solving these conditions on \(Q^{\nu }\) and therefore computes adjoined symmetries.
These are completed, if possible, to conservation laws by computing \(P^i\) from the
\(Q^{\nu }\).
All four procedures have the same syntax. They have two parameters, both lists. The first parameter specifies the equations (20.56), the second specifies the computation to be done. One can either specify an ansatz for \(P^i, Q^{\nu }\) or investigate a general situation, only specifying the order of the characteristic functions or the conserved current.
The procedures CONLAWi
, \(i=1,2,3,4\), are called through
CONLAWi(problem, runmode);
where both parameters are lists.
The first parameter problem specifies the DEs to be investigated. It has the form
{equations, ulist, xlist}
where …
equations is a list of equations, each of the form df(ui,…)=…
where the
left-hand side df(ui,…)
is selected such that
If CONLAW3
or CONLAW4
are run where no substitutions are made then the
left-hand sides of equations can be df(ui,…)**n=…
where n
is a number. No
distinction is made between equations and constraints.
ulist is a list of function names, which can be chosen freely; the number of functions and equations need not be equal.
xlist is a list of variable names, which can be chosen freely.
The second parameter runmode specifies the calculation to be done. It has the form
{minord, maxord, expl, flist, inequ}
where …
minord and maxord are respectively the minimum and maximum of the highest order of derivatives of \(u\)
p_t
for CONLAW1
, where t
is the first variable in xlist;
q_j
for CONLAW2
, CONLAW3
and CONLAW4
.expl is t
or nil
to indicate whether or not the characteristic functions q_i
or
conserved current may depend explicitly on the variables of xlist.
flist is a list of unknown functions in any ansatz for p_i
, 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 flist is the
empty list {}
.
inequ is a list of expressions none of which may be identically zero for the
conservation law to be found; if there is no such expression then inequ is an empty
list {}
.
The procedures CONLAWi
return a list of conservation laws {\(C_1,C_2,\ldots \)}
; if no non-trivial
conservation law is found they return the empty list {}
. Each \(C_i\) representing a
conservation law has the form {{\(P^1,P^2,\ldots \)},{\(Q^1,Q^2,\ldots \)}}
.
An ansatz for a conservation law can be formulated by specifying one or more of the
components \(P^i\) for CONLAW1
, one or more of the functions \(Q^{\mu }\) for CONLAW2
and CONLAW4
,
or one or more of \(P^i, Q^{\mu }\) for CONLAW3
. The \(P^i\) are input as p_i
where i
stands for a
variable name, and the \(Q^{\mu }\) are input as q_i
where i
stands for an index, which
is the number of the equation in the input list equations with which q_i
is
multiplied.
There is a restriction in the structure of all the expressions for p_i
and q_j
that are
specified: they must be homogeneous linear in the unknown functions or constants which
appear in these expressions. The reason for this restriction is not for CRACK to be able to
solve the resulting overdetermined system but for CONLAWi
to be able afterwards to
extract the individual conservation laws from the general solution of the determining
conditions.
All such unknown 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\) as a function of \(t,x,u\). If one wants to have \(f\) as a function of derivatives of \(u(t,x)\), say \(f\) depending on \(u_{txx}\), then one cannot write
DEPEND f, df(u,t,x,2)$
but instead must write
DEPEND f, u!`1!`2!`2$
if xlist has been specified as {t,x}
, because t
is the first variable and x
is the second
variable in xlist and u
is differentiated once wrt. t
and twice wrt. x
; we therefore get
u!`1!`2!`2
. The character !
is the escape character to allow special characters like `
to occur in an identifier name.
It is possible to add extra conditions like PDEs for \(P^i, Q^{\mu }\) as a list cl_condi
of expressions
that shall vanish.
The input to each of CONLAW1
, CONLAW2
, CONLAW3
and CONLAW4
is the same
apart from:
CONLAW1
;
CONLAW2
and CONLAW4
;
mindensord
, maxdensord
is different in
CONLAW1
on the one hand and CONLAW2
, CONLAW3
, and CONLAW4
on the other (see above).CONLAW1
and choosing maxdensord
=1 then \(P^i\) will be of at most
first order, Div \(P\) of second order and \(u_{xxx}\) 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 \(u_{xxx}\); one only has to go to
maxdensord
=2 with longer computations as a consequence compared to the
input \(u_t=-uu_x-u_{xxx}\) where maxdensord
=0 is enough to find non-trivial conservation
laws.
Although for any equivalence class of conserved currents with \(P^i\) differing only by a
curl there exist characteristic functions \(Q^{\mu }\), this need not be true for any particular \(P^i\).
Therefore one cannot specify a known density \(P^i\) for CONLAW3
and hope to calculate
the remaining \(P^j\) and the corresponding \(Q^{\mu }\) with CONLAW3
. What one can do is to use
CONLAW1
to calculate the remaining components \(P^j\), and from this a trivial
conserved density \(R\) and characteristic functions \(Q^{\nu }\) are computed such that
quasilin_rhs
can be set to t
(see
below).
lisp(print_ := nil/0/1/ ...)$
print_:=nil
suppresses all CRACK output; for print_:=
\(n\) (\(n\) an integer) CRACK
prints only equations with at most \(n\) factors in their terms.
crackhelp()$
shows other flags controlling the solution of the overdetermined PDE-system.
off batch_mode$
solves the system of conditions with CRACK interactively.
lisp(quasilin_rhs := t)$
reduces in the ansatz for \(P^i\) the order to \(m-1\) if the order of the right-hand side is \(m\). This can be used to speed up computations if the right-hand side is known to be linear in the highest derivatives (see the note above).
load_package crack, conlaw0, conlaw1$
where conlaw1
can be replaced by conlaw2
, conlaw3
or conlaw4
as
appropriate.
Below 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
.
More details concerning these examples are given when running the file conlaw.tst
(in the REDUCE packages/crack
directory).
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,y,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};
Up | Next | Prev | PrevTail | Front |