Lie-Klammer
(%i1) 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 ) )
) $
Steuerbarkeitsmatrix
(%i2) ControllabilityMatrix ( f , g , x ) : = block ( [ i , n , L ] ,
   n : length ( x ) ,
   if length ( f ) # n then
       error ( "Dimensionen von f und x müssen übereinstimmen." ) ,
   if length ( g ) # n then
       error ( "Dimensionen von g und x müssen übereinstimmen." ) ,
   L : makelist ( LieBracket ( f , g , x , i ) , i , 0 , n 1 ) ,
   transpose ( apply ( matrix , L ) )
   ) $
Beispiel: Mobiler Roboter
(%i5) f : [ sin ( x3 ) , cos ( x3 ) , 0 ] $
g : [ 0 , 0 , 1 ] $
x : [ x1 , x2 , x3 ] $
Berechnung der Steuerbarkeitsmatrix
(%i6) ControllabilityMatrix ( f , g , x ) ;

\[\operatorname{ }\begin{pmatrix}0 & \cos{\left( \ensuremath{\mathrm{x3}}\right) } & 0\\ 0 & -\sin{\left( \ensuremath{\mathrm{x3}}\right) } & 0\\ 1 & 0 & 0\end{pmatrix}\]


Created with wxMaxima.