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] ;
|