Lie-Klammer bzw. Lie-Ableitung eines Vektorfeldes

LieBracket([l]):=block([f,g,x,k,Df,Dg,ad],
    if (length(l)<3) or (length(l)>4) then 
       error ("Aufruf mit 3 oder 4 Argumenten."),
    f:l[1],
    g:l[2],
    x:l[3],
    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(g)
    else 
        Df:jacobian(f,x),
        Dg:jacobian(g,x),
        ad:list_matrix_entries(Dg.f-Df.g),
        return(LieBracket(f,ad,x,k-1))
)$

Beispiel: Mobiler Roboter

f:[sin(x3),cos(x3),0];
g:[0,0,1];
x:[x1,x2,x3];

Lie-Klammer erster Ordnung

LieBracket(f,g,x);

Lie-Klammer zweiter Ordnung

LieBracket(f,g,x,2);