function Laufkatze ()

% Parameter (global definiert, damit Wertaenderung nur an einer Stelle erforderlich):
global mK mL JL c lS Dt F0 a g
mK = 100 ; mL = 500 ; JL = 400 ; c = 200000 ; lS = 4 ; Dt = 1 ; F0 = 2000 ; a = 5 ; g = 9.81 ;

x0    = [0 ; 0 ; 0 ; 0] ;         % Anfangswerte
tspan = [0  10] ;                 % Zeitintervall

% Integration des Anfangswertproblems:
options = odeset('Mass' , @Massenmatrix , 'MaxStep' , 0.01) ; 
[t xv]  = ode45 (@RechteSeite , tspan , x0 , options) ;

% Grafische Ausgabe von x und phi, zunaechst "Sortieren der Ergebnisse":
x   = xv(:,1) ;  % xv ist die Matrix der Ergebnisse,
phi = xv(:,2) ;  % x und phi sind Vektoren 

subplot(2,1,1) ; plot (t  , x)   , grid on , title  ('x(t)-Diagramm:')
subplot(2,1,2) ; plot (t  , phi) , grid on , title  ('\phi(t)-Diagramm:')

% ============================================================
% Funktion, die die "Massenmatrix" des Dgl.-Systems definiert: 
function M = Massenmatrix (t , xv)

global mK mL JL c lS Dt F0 a g

phi = xv(2) ;

M = [1  0        0                0        ; 
     0  1        0                0        ; 
     0  0      mK+mL        mL*lS*cos(phi) ; 
     0  0  mL*lS*cos(phi)    mL*lS^2+JL    ] ;

% ============================================================
% Funktion, die die "rechte Seite" des Dgl.-Systems definiert: 
function r = RechteSeite (t , xv)

global mK mL JL c lS Dt F0 a g

x = xv(1) ; phi = xv(2) ; v = xv(3) ; omega = xv(4) ;

if (t < Dt) Ft = F0 ;  else   Ft = 0  ;  end
if (x < a ) ct = 0  ;  else   ct = c  ;  end

b1 = mL*lS*omega^2*sin(phi)-ct*(x-a)+Ft ;
b2 = -mL*g*lS*sin(phi) ;

r = [v ; omega ; b1 ; b2] ;