Gegeben sei die Differentialgleichung (DG) einer gedämpften Schwingung:

mit der dämpfungsfreien Eigenfrequenz
und dem Reibungskoeffizienten
. Im Folgenden soll durch numerische Integration nach dem Runge-Kutta-Verfahren eine Lösung für die DG im Bereich
berechnet und dargestellt werden. Die Anfangswerte seien
und
.
Dazu wird die gegebene DG 2. Ordnung zunächst in ein System aus zwei DG erster Ordnung überführt. Mit
und
ergibt sich das System


Dieses soll nun mit Hilfe eines Runge-Kutta-Solvers gelöst werden. Gehen Sie dazu folgendermaßen vor:
- Schreiben Sie eine Funktion dx=dg¬_dampedosc(t, x, omega, gamma), die das Gleichungssystem realisiert. Der 2×1 Spaltenvektor x enthält dabei die aktuellen Werte
und
zum Zeitpunkt t. Die Funktion berechnet daraus abhängig von den Parametern omega und gamma nach obiger Gleichung die Werte der erste Ableitung und gibt diese im 2×1 Spaltenvektor dx zurück. Der Parameter t wird innerhalb der Funktion nicht verwendet, ist aber für deren späteren Aufruf in Teilaufgabe b) zwingend erforderlich. - Schreiben Sie ein Script damped_osc.m, das die Integration der DG nach dem Runge-Kutta-Verfahren für
und
durchführt. Rufen Sie dazu die MATLAB-Funktion ode45() mit geeigneten Parameterwerten auf. Konsultieren Sie ggfs. die zugehörige Beschreibung in der MATLAB Hilfe. Stellen Sie das berechnete Ergebnis dann grafisch wie gezeigt dar:

Lösung
a )
function dx=dg_dampedosc(t,x,omega,gamma) % dx=dg_dampedosc(t,x,omega,gamma) % differential equation: 2nd order damped oscillation % % x''(t)+2*gamma*x' (t)+omega^2*x (t)=0; % % x1'=x2 % x2'=-omega^2*x1-2*gamma*x2 % % t current time % x 2x1 column vector with state [x (t); x' (t)] at time t % omega frequency % gamma friction % % dx 2x1 column vector with 1st derivative of state at time t dx=[0 1;-omega^2 -2*gamma]*x; end
b )
x0=[0 1]; % initial value
ts=[0 10]; % computation interval
omega=2; % frequency of oscillation
gamma=0.2; % friction
% solve ode using Runge-Kutta approach
[t,x]=ode45(@dg_dampedosc,ts,x0,[],omega,gamma);
% plot position and velocity
figure(1)
plot(t,x)
title('damped oscillation')
legend({'
','
'},'interpreter','latex')
xlabel('
','interpreter','latex')
ylabel('position
, velocity
','interpreter','latex')
% plot phase diagram
figure(2)
plot(x(:,1),x(:,2))
title('phase diagram')
xlabel('position
','interpreter','latex')
ylabel('velocity
','interpreter','latex')


