function Aufgabe32_5 

% Parameter (global definiert, damit Wertaenderung nur an einer Stelle erforderlich):
global c1 c2 M m a1 a2 b1 b2
c1 = 80 ; c2 = 180 ; M = 20 ; m = 10 ; a1 = 0.2 ; a2 = 0.3 ; b1 = 0.25 ; b2 = 0.4 ;

x0    = [0.05 ; 0.08 ; 0 ; 0] ;         % Anfangsbedingungen   
tspan = [0 ; 30] ;                      % Zeitintervall

% Runge-Kutta 4. Ordnung: ---------------------------------
nrk4 = 4000 ;
[trk4 xrk4] = rk4 (@RechteSeite , tspan , x0 , nrk4) ;

% MATLAB-ode45-Solver mit MaxStep-Option: -----------------
options     = odeset('MaxStep' , 0.03) ;
[tode xode] = ode45 (@RechteSeite , tspan , x0 , options) ;

node = length (tode) ;
disp([' ']) ;
disp(['Anzahl der Runge-Kutta-Schritte: ',num2str(nrk4)]) ;
disp(['Anzahl der ode45-Werte:          ',num2str(node)]) ;
disp(['x1End (rk4):   ',num2str(xrk4(nrk4+1,1))]);
disp(['x1End (ode45): ',num2str(xode(node  ,1))]);
disp(['x2End (rk4):   ',num2str(xrk4(nrk4+1,2))]);
disp(['x2End (ode45): ',num2str(xode(node  ,2))]);
disp(['v1End (rk4):   ',num2str(xrk4(nrk4+1,3))]);
disp(['v1End (ode45): ',num2str(xode(node  ,3))]);
disp(['v2End (rk4):   ',num2str(xrk4(nrk4+1,4))]);
disp(['v2End (ode45): ',num2str(xode(node  ,4))]);

subplot(411)
plot(trk4 , xrk4(:,1) , tode  , xode(:,1)) ; legend ('rk4','ode45',3) ; title('x1(t)') ;
subplot(412)
plot(trk4 , xrk4(:,2) , tode  , xode(:,2)) ; legend ('rk4','ode45',3) ; title('x2(t)') ;
subplot(413)
plot(trk4 , xrk4(:,3) , tode  , xode(:,3)) ; legend ('rk4','ode45',3) ; title('v1(t)') ;
subplot(414)
plot(trk4 , xrk4(:,4) , tode  , xode(:,4)) ; legend ('rk4','ode45',3) ; title('v2(t)') ;

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

global c1 c2 M m a1 a2 b1 b2

x1 = x(1) ;
x2 = x(2) ;
v1 = x(3) ;
v2 = x(4) ;

x1p = v1 ;
x2p = v2 ;
gkl = c2*(x2-x1)*(1-b2/sqrt((x2-x1)^2+a2^2)) ;
v1p = -(c1*x1*(1-b1/sqrt(x1^2+a1^2))-gkl)/M ;
v2p = -(gkl)/m ;

f = [x1p ; x2p ; v1p ; v2p] ;