% variablen erstellen
syms x1 x2 x3 u a r b gg m c0 c1 c2 c3 t; global sinus;
                                                        
% def. von f, g, h und x des erweiterten modells x. = f(x)+g(x)*u^, y = h(x)
f = [ x2 ; gg - 1/m*(x3/(a+b*x1))^2 ; 0];

g = [ 0 ; 0 ; 1 ];      h = x1;      x = [ x1 ; x2 ; x3 ];

% lie-klammern berechnen
 L_fh = lie_der(f,h,x,1);           L_f2h = lie_der(f,h,x,2);
L_f3h = lie_der(f,h,x,3);        L_gL_f2h = lie_der(g,L_f2h,x,1);

if sinus % fuer sinus-foermige referenz u^ bestimmen
      y_d = 0.05 + 0.02*sin(t);             dy_d = diff(y_d,t);
    ddy_d = diff(dy_d,t);                 dddy_d = diff(ddy_d,t);
    
    uhat = simple( 1/L_gL_f2h*( -L_f3h -dddy_d + ...
        1/c3*(-c0*(h-y_d) -c1*(L_fh-dy_d) -c2*(L_f2h-ddy_d) )));

else % fuer sprung ^u bestimmen
    uhat = simple( 1/L_gL_f2h*( -L_f3h + (r - c2*L_f2h - c1*L_fh - c0*h)/c3 ) );
end

% polvorgabe
pp = conv( conv([1 10],[1 20]),[1 30]);
% erstellen der koeff des monischen polynoms
c3 = pp(1) / pp(4); c2 = pp(2) / pp(4); c1 = pp(3) / pp(4); c0 = pp(4) / pp(4);
% einige der die bisher symbolischen groessen "numerisch machen"
a = 0.2042; b = 72.988; m = 0.0682; gg = 9.81; x1 = 0.01;