% Stabpendel mit Runge-Kutta, Aufruf der Function rk4, der fast identisch 
% mit dem Aufruf der MATLAB-ode-Functions

function RKPendel4

global pl g
pl     = 1 ;                               % Pendellaenge
g      = 9.81 ;                            % Erdbeschleunigung

t0   =  0 ;  phi0 = pi/2 ; omega0 = 0 ;    % Anfangswerte
tEnd = 30 ;                                % Ende des Integrationsintervalls

% Runge-Kutta-Algorithmus -------------------------------------------------- 
[t , xv] = rk4 (@BewDglPendel , [t0 ; tEnd] , [phi0 ; omega0] , 200) ;
% Runge-Kutta-Algorithmus --------------------------------------------------

phi   = xv(:,1) ;                          % Sortieren der Ergebnisse:
omega = xv(:,2) ;                          % Spalte 1: phi, Spalte 2: omega

phiMin   = min(phi) 
omegaMax = max(abs(omega))                 % Extremwerte ---> Command Window
subplot (2,1,1) ; plot (t,phi)   ; title ('phi(t)')  % Graphik-Ausgabe phi(t)
subplot (2,1,2) ; plot (t,omega) ; title ('phi(t)')  % ... und omega(t)

% =========================================================================
function xvp = BewDglPendel (t , xv)

global pl g                    % ... muessen an anderer Stelle definiert sein.

phi    = xv(1) ;               % Input-Werte kommen in
omega  = xv(2) ;               % einem Vektor an.

phip   = omega ;               % Die beiden Differenzialgleichungen
omegap = -1.5*g/pl*sin(phi) ;  % werden ausgewertet, ...

xvp    = [phip ; omegap] ;     % ... die Ergebnisse werden in einem Vektor abgeliefert.