Lie-Ableitung eines Skalarfeldes

LieScalar([l]):=block([f,h,x,k,Lfh],
    if (length(l)<3) or (length(l)>4) then 
       error ("Aufruf mit 3 oder 4 Argumenten."),
    f:l[1], /* Vektorfeld */
    h:l[2], /* Skalarfeld */
    x:l[3], /* Variable   */
    if length(l)=3 then k:1 else k:l[4],
    if not(nonnegintegerp(k)) then 
       error ("Ordnung k muss natürliche Zahl sein."),
    if k=0 then return(h)
    else 
        Lfh:jacobian([h],x).f,
        return(LieScalar(f,Lfh,x,k-1))
)$

Relativer Grad

RelativeDegree(f,g,h,x):=block([n,r:inf,lie],
    n:length(x),
    for k:1 thru n do (
        lie:ratsimp(LieScalar(g,h,x)),
        if not (lie=0)
        then (r:k, return(r)),
        h:LieScalar(f,h,x) 
    ),
    r
)$

Beispiel: Mobiler Roboter

f:[sin(x3),cos(x3),0];
g:[0,0,1];
h:c1*x1+c2*x2;
x:[x1,x2,x3];

Berechnung des relativen Grades

RelativeDegree(f,g,h,x);