Zur Startseite
Statik, Festigkeitslehre, Kinematik/Kinetik, 4. Auflage

Beispiel 2 auf Seiten 501 und 502 mit MATLAB, Animation der Bewegung

Das nachfolgend gelistete Script kann aus dem Command Window mit maximal zwei Parametern (Anfangswert der dimensionslosen Koordinate x/a und der Zeit tEnd) aufgerufen werden. Ohne Parameter oder beim Start über Debug|Run werden die Standardwerte  (x/a)Anf = - 4,493 und  tEnd = 10 s verwendet.

% Aufgabe von Seite 501/502

function S501Ani (xAnf , tEnd)

if (nargin > 0) x0   = [xAnf ; 0] ; else x0   = [-4.493 ; 0] ; end
if (nargin > 1) tspan = [0 , tEnd] ; else tspan = [0 ; 10]     ; end

global cadmg bda gda
cadmg = 1 ;            % ... = c * a / (m * g)
bda = 4 ;              % ... = b / a
gda = 9.81 ;           % ... =  g / a   in 1/s²

options = odeset ('MaxStep' , 0.1) ;
[t x]  = ode45  (@RechteSeite , tspan , x0 , options) ;

xi = [1 0] * x' ;
a = 1 ;
Vektorlaenge = length(t)
tt = tspan(1) ;
maxi = max(xi) ; if (maxi < 0) maxi =  a/4 ; end
mini = min(xi) ; if (mini > 0) mini = -a/4 ; end
clf ;
plot ([0 -a/2 -a/2 0],[0 a/3 -a/3 0] , 'r-') ;
hold on
plot ([a a],[-1.1*mini -1.1*maxi] , 'r-') ;
hold on
[xs ys nc] = SpringCoords ([0 0] , [a -xi(1)] , 4 , 2*bda) ;
[xs(nc+1:nc+8) ys(nc+1:nc+8) nc2] = MassCoords ([a -xi(1)] , a/2 , a) ;
p  = plot (xs , ys , 'EraseMode' , 'xor') ;
h  = findobj ;
axis ([-a/4 1.3*a -1.2*maxi -1.2*mini]) ; axis equal ;
zeit = title (sprintf('t = %8.2f s' , tt)) ;
set (gca , 'userdata' , zeit)

deltatt  = 1/25    ;    % 25 Bilder pro Sekunde
zeitlupe = 1       ;    % Verzögerungsfaktor
cstart   = cputime ;
Zeitschritte = length (t)

for ii=1:Zeitschritte    % Schleife über alle berechneten Zeitschritte
   if (t(ii) >= tt)      % Ausgabe jeweils nur nach deltatt
       [xs ys nc] = SpringCoords ([0 0] , [a -xi(ii)] , 4 , 2*bda) ;
       [xs(nc+1:nc+8) ys(nc+1:nc+8) nc2] = MassCoords ([a -xi(ii)] , a/2 , a) ;
       set(p , 'XData' , xs , 'YData' , ys)
       while (cputime-cstart < tt*zeitlupe)  % Warteschleife
       end
       zeit = get (gca , 'userdata');
       set(zeit , 'string' , sprintf('t = %8.2f s' , tt))
       drawnow
       tt = tt + deltatt ;
   end
end

% ====== Definition des Differenzialgleichungssystems:  ================
function xpunkt = RechteSeite (t , x)
global cadmg bda gda
xpunkt = [x(2); gda*(1-cadmg*(sqrt(1+x(1)^2)-bda)*x(1)/sqrt(1+x(1)^2))] ;

Der nebenstehende Schnappschuss zeigt eine Momentaufnahme der Animation.

Das oben gelistete Function-Script ist als S501Ani.m zum Download verfügbar. Es ruft die beiden Funktionen SpringCoords und MassCoords auf, die als SpringCoords.m bzw. MassCoords.m verfügbar sind.

Homepage

www.D@nkert.de

D

nkert.de