maxdimsystems - determination of maximum dimensional subsystems of systems of PDE

Calling Sequences

maxdimsystems( system , maxdimvars )

maxdimsystems( system , maxdimvars , options )

Parameters

system - list or set of ODE or PDE (may contain inequations)

maxdimvars - list of the dependent variables used for the dimension count

options - (optional) sequence of options to control the behavior of maxdimsystems

Description

[Solved = list, Constraint = list, Pivots = list, dimension = integer]

tosolve, indep, arbitrary, clean, fullclean See rifsimp[options]
ezcriteria, faclimit See
rifsimp[adv_options]
mindim, pivselect See
rifsimp[cases]
grob_rank,grobonly,checkempty See
rifsimp[nonlinear]

Examples

> with(Rif):

Algebraic systems can be examined with maxdimsystems

> maxdimsystems([ u - a*v = 0, u - c*v = 0], [u,v]);

{[Solved = [u = c*v, a = c], Constraint = [], Pivot...
{[Solved = [u = c*v, a = c], Constraint = [], Pivot...
{[Solved = [u = c*v, a = c], Constraint = [], Pivot...

In the below example, inequations are given in the Pivots list, and the dimension is 2

> maxdimsystems([ (a(x)-d(x))*diff(u(x),x,x) +
b(x)*diff(u(x),x) + u(x) = 0],
[u]);

{[Solved = [diff(u(x),`$`(x,2)) = (-b(x)*diff(u(x),...
{[Solved = [diff(u(x),`$`(x,2)) = (-b(x)*diff(u(x),...

This next example has a constraint on the classvars present in the result

> maxdimsystems([diff(u(x,y),x) - f(x,y)*u(x,y) = 0,
diff(u(x,y),y) - g(x,y)*u(x,y) = 0,
f(x,y)^3 - 1 = 0], [u]);

{[Solved = [diff(u(x,y),x) = f(x,y)*u(x,y), diff(u(...
{[Solved = [diff(u(x,y),x) = f(x,y)*u(x,y), diff(u(...
{[Solved = [diff(u(x,y),x) = f(x,y)*u(x,y), diff(u(...

In each of the above examples maxdimsystems picked out the maximum dimensional case. This is in contrast to rifsimp , with its casesplit option, which obtains all cases.

For the second example, computation with rifsimp using casesplit gives 2-d, 1-d and 0-d cases, of which the 2-d case is the maximal case from the above example.

> ans := rifsimp([ (a(x)-d(x))*diff(u(x),x,x) +
b(x)*diff(u(x),x) + u(x) = 0],
[u], casesplit);

ans := TABLE([1 = TABLE([Pivots = [a(x)-d(x) <> 0],...
ans := TABLE([1 = TABLE([Pivots = [a(x)-d(x) <> 0],...
ans := TABLE([1 = TABLE([Pivots = [a(x)-d(x) <> 0],...
ans := TABLE([1 = TABLE([Pivots = [a(x)-d(x) <> 0],...
ans := TABLE([1 = TABLE([Pivots = [a(x)-d(x) <> 0],...
ans := TABLE([1 = TABLE([Pivots = [a(x)-d(x) <> 0],...
ans := TABLE([1 = TABLE([Pivots = [a(x)-d(x) <> 0],...
ans := TABLE([1 = TABLE([Pivots = [a(x)-d(x) <> 0],...
ans := TABLE([1 = TABLE([Pivots = [a(x)-d(x) <> 0],...
ans := TABLE([1 = TABLE([Pivots = [a(x)-d(x) <> 0],...
ans := TABLE([1 = TABLE([Pivots = [a(x)-d(x) <> 0],...

from which the caseplot with initial data counts could be viewed by issuing the command:

> caseplot(ans,[u]);

One example of practical use of maxdimsystems is the determination of the forms of f(y') (where f(y') is not identically zero) for which the ode y''=f(y') has the maximum dimension.

> ODE:=diff(diff(y(x),x),x)=f(diff(y(x),x));

ODE := diff(y(x),`$`(x,2)) = f(diff(y(x),x))

> symeq:=[DEtools[odepde](ODE, [xi(x,y),eta(x,y)])];

symeq := [(-3*_y1*diff(xi(x,y),y)-2*diff(xi(x,y),x)...
symeq := [(-3*_y1*diff(xi(x,y),y)-2*diff(xi(x,y),x)...
symeq := [(-3*_y1*diff(xi(x,y),y)-2*diff(xi(x,y),x)...
symeq := [(-3*_y1*diff(xi(x,y),y)-2*diff(xi(x,y),x)...
symeq := [(-3*_y1*diff(xi(x,y),y)-2*diff(xi(x,y),x)...
symeq := [(-3*_y1*diff(xi(x,y),y)-2*diff(xi(x,y),x)...

where the above symeq is an overdetermined system of PDE in the infinitesimal symmetries xi(x,y),eta(x,y) .

So we compute the maximum dimensional case which, is not displayed as it is quite large:

> t1 := time():
msys:= maxdimsystems([op(symeq),f(_y1)<>0],[xi,eta]):
time()-t1;

3.220

> nops(msys);

1

> length(msys[1]);

5362

> msys[1][4];

dimension = 8

> remove(has,rhs(msys[1][1]),[xi,eta]);

[diff(f(_y1),`$`(_y1,4)) = 0]

from which we see that we have one case, of dimension 8, and it occurs when the displayed ODE in f(_y1) is satisfied. This classical result is also explored in the ISSAC Proc. article listed in the references (the primary reference for this command).

The timing above should be compared to the rifsimp full case analysis that takes significantly longer, and has a great number of lower dimensional cases:

> t2 := time():
rsys:= rifsimp([op(symeq),f(_y1)<>0],[xi,eta],'casesplit'):
time()-t2;

81.880

> rsys['casecount'];

11

Consider the nonlinear Heat equation

> diff(u(x,t),t) = diff( k(u(x,t))*diff(u(x,t),x), x);

diff(u(x,t),t) = D(k)(u(x,t))*diff(u(x,t),x)^2+k(u(...

The overdetermined system for it's symmetries X,T,U is given by

> sys:= [
-2*diff(T(u,t,x),x),
diff(diff(U(u,t,x),u),u)-2*diff(diff(X(u,t,x),u),x)
+U(u,t,x)*diff(diff(k(u),u),u)/k(u)+1/k(u)
*diff(k(u),u)*diff(U(u,t,x),u)-U(u,t,x)/k(u)^2
*diff(k(u),u)^2,
1/k(u)*diff(X(u,t,x),u)*diff(k(u),u)
-diff(diff(X(u,t,x),u),u),
diff(diff(U(u,t,x),x),x)-1/k(u)*diff(U(u,t,x),t),
1/k(u)*diff(T(u,t,x),t)+U(u,t,x)/k(u)^2*diff(k(u),u)
-diff(diff(T(u,t,x),x),x)-2/k(u)*diff(X(u,t,x),x),
-diff(diff(X(u,t,x),x),x)+2*diff(diff(U(u,t,x),u),x)
+1/k(u)*diff(X(u,t,x),t)+2*diff(k(u),u)/k(u)
*diff(U(u,t,x),x),
-2*diff(k(u),u)/k(u)*diff(T(u,t,x),x)-2/k(u)
*diff(X(u,t,x),u)-2*diff(diff(T(u,t,x),u),x),
-1/k(u)*diff(k(u),u)*diff(T(u,t,x),u)
-diff(diff(T(u,t,x),u),u),
-2*diff(T(u,t,x),u)]:

At the same time as determining maximum dimensional cases, one can request, through a partitioning of the maxdimvars , that the dependent variables be ranked in a specific manner. To always isolate derivatives of U(u,t,x) in terms of the other dependent variables, one could specify maxdimvars=[[U],[X,T]] . For this problem we would obtain

> maxdimsystems([op(sys),diff(k(u),u)<>0],[[U],[X,T]]);

{[Solved = [U(u,t,x) = k(u)*(-diff(T(u,t,x),t)+2*di...
{[Solved = [U(u,t,x) = k(u)*(-diff(T(u,t,x),t)+2*di...
{[Solved = [U(u,t,x) = k(u)*(-diff(T(u,t,x),t)+2*di...
{[Solved = [U(u,t,x) = k(u)*(-diff(T(u,t,x),t)+2*di...

Alternatively we could try to obtain PDE only in U(u,t,x) and the classifying function k(u) by an elimination ranking:

> maxdimsystems([op(sys),diff(k(u),u)<>0],[[X,T],[U]]);

{[Solved = [diff(X(u,t,x),`$`(x,2)) = 1/2*diff(k(u)...
{[Solved = [diff(X(u,t,x),`$`(x,2)) = 1/2*diff(k(u)...
{[Solved = [diff(X(u,t,x),`$`(x,2)) = 1/2*diff(k(u)...
{[Solved = [diff(X(u,t,x),`$`(x,2)) = 1/2*diff(k(u)...
{[Solved = [diff(X(u,t,x),`$`(x,2)) = 1/2*diff(k(u)...
{[Solved = [diff(X(u,t,x),`$`(x,2)) = 1/2*diff(k(u)...
{[Solved = [diff(X(u,t,x),`$`(x,2)) = 1/2*diff(k(u)...

where you can see from the above that we have three PDE for U(u,t,x) alone (which can be quite easily solved for U(u,t,x) in terms of a function that is linear in x with coefficients as integrals in u depending on k(u) ).

Both computations show that maximal group is of dimension 5, and occurs when k(u) satisfies k'' = 7/4 (k')^2/k . This is a known result (see the Bluman/Kumei reference).

In determining how a specific ranking will be used in a system, one should consult the checkrank help page.

The final example demonstrates how to find near-maximal cases, and how to obtain rif -style output. Say we want all cases having dimension 4 or greater, and we want rifsimp output (so we can display the information in a case plot). This can be done as follows:

> rifans:=maxdimsystems([op(sys),diff(k(u),u)<>0],[X,T,U],
mindim=4, output=rif);

rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =
rifans := TABLE([1 = TABLE([status =

All cases where the initial data was smaller than the bound are tagged with a status of "free count fell below mindim". This calculation can then be displayed in a caseplot with the command:

> caseplot(rifans,[X,T,U]);

See Also

Rif , rifsimp , initialdata , checkrank , rifsimp[adv_options] , rifsimp[cases] , rifsimp[nonlinear] , rifsimp[options] , rifsimp[output] , rifsimp[overview] , rifsimp[ranking]