12.02.2014 Aufrufe

Mathematik für Physiker - Numerische Physik: Modellierung

Mathematik für Physiker - Numerische Physik: Modellierung

Mathematik für Physiker - Numerische Physik: Modellierung

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

B.6. MATLAB SKIPTE, FUNKTIONEN UND GUIS: QUELLCODE 509<br />

% Differentialgleichung nach dem Runge--Kutta Verfahren. Als<br />

% Beispiel wird die DGL xy’-y=x^2+4<br />

clear;clf<br />

% Festlegung von Integrationsintervall und Schrittweite<br />

tl = 1.; % untere Grenze des Integrationsintervalls<br />

tr = 5.; % obere Grenze des Integrationsintervalls<br />

dt = 0.2; % Schrittweite des numerischen Schemas<br />

fh = @(t,x) (t.^2+4+x)/t; % Definition der Funktion über ein Handle<br />

% Erzeugen der analytischen Lösung im Integrationsintervall an den<br />

% Stützstellen, die auch von der numerischen Lösung benutzt werden<br />

t=[tl:dt:tr];<br />

xanalytisch=t.^2-4+5.*t;<br />

%%%%%%%%%%%%%%<strong>Numerische</strong> Lösung%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />

x(1)=2; % Randbedingung vorgeben<br />

for i=2:length(t);<br />

k1=feval(fh,t(i-1),x(i-1));<br />

k2=feval(fh,t(i-1)+dt/2,x(i-1)+dt*k1/2);<br />

k3=feval(fh,t(i-1)+dt/2,x(i-1)+dt*k2/2);<br />

k4=feval(fh,t(i),x(i-1)+dt*k3);<br />

x(i)=x(i-1) + dt*(k1+2*k2+2*k3+k4)/6;<br />

end<br />

%%%%%%%%%%%%%%%Ende numerische Lösung%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />

% Darstellung von numerischer und analytischer Lösung<br />

subplot(2,1,1), plot(t,xanalytisch,’-r’); % analytische Lösung in rot<br />

hold on<br />

plot(t,x,’:ob’);<br />

xlabel(’x-Achse’,’Fontsize’,14);<br />

ylabel(’y-Achse’,’Fontsize’,14);<br />

title(’Runge-Kutta Verfahren’,’Fontsize’,18);<br />

text(1.1,55.,’rot: analytisch’);<br />

text(1.1,50.,’blau: numerisch’);<br />

subplot(2,1,2),plot(t,(x-xanalytisch)./xanalytisch);<br />

xlabel(’x-Achse’,’Fontsize’,14);<br />

ylabel(’relative Abweichung’,’Fontsize’,14);<br />

hold off<br />

Func: rungekutta<br />

function [t,x] = rungekutta(f,a,b,dt,x0)<br />

% Funktion zur Lösung einer DGL der Form dot(x)=f mit Hilfe des<br />

% Runge-Kutta-Verfahrens 4ter Ordnung.<br />

% Eingabe: Funktion f<br />

% Integrationsintervall a, b<br />

% Schrittweite dx<br />

% Anfangswert x0<br />

% Ausgabe: graphisch<br />

% Vektoren t und x<br />

% Aufruf: [t,x] = rungekutta(f,a,b,dx,x0)<br />

t=[a:dt:b]; x(1)=x0;<br />

for i=2:length(t);<br />

k1=feval(f,t(i-1),x(i-1));<br />

k2=feval(f,t(i-1)+dt/2,x(i-1)+dt*k1/2);<br />

k3=feval(f,t(i-1)+dt/2,x(i-1)+dt*k2/2);<br />

k4=feval(f,t(i),x(i-1)+dt*k3);<br />

c○ M.-B. Kallenrode 13. März 2007

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!