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.

294 KAPITEL 7. GEWÖHNLICHE DIFFERENTIALGLEICHUNGEN<br />

§ 1107 Wie für die bisher die anderen Verfahren ist aus dem MatLab-Skript auch eine<br />

Funktion rungekutta abgeleitet mit der Syntax wie in den anderen selbst-gestrickten Funk-<br />

tionen.<br />

rungekutta<br />

7.10.5 Etwas MatLab-Tuning<br />

Alternative zur Eingabe einer Funktion<br />

§ 1108 Bisher haben wir die die Differentialgleichung beschreibende mathematische Funktion<br />

stets über ein Handle an die MatLab-Funktionen übergeben. Dieses Verfahren ermöglicht<br />

es, alle MatLab-Funktionen aus einem Skript heraus nach einander aufzurufen und die Ergebnisse<br />

so zu vergleichen. Eine Alternative Form der Eingabe der mathematischen Funktion<br />

ist deren Definition mit Hilfe einer MatLab-Funktion. Unsere mathematische Funktion aus<br />

§ 1085 lässt sich z.B. in einer Funktion Namens dglinput definieren in der Form<br />

function xdot = dglinput(t,x)<br />

xdot = (t ∧ 2+4+x)/t;<br />

Der Name dieser Funktion wird dann beim Aufruf der MatLab-Funktion als String an diese<br />

übergeben, z.B.<br />

>> a=1;b=5;dt=0.2;x0=2;<br />

>> [t,x] = rungekutta(’dglinput’,a,b,dx,x0);<br />

§ 1109 Die in MatLab implementierten Lösungsverfahren für gewöhnliche DGLs verwenden<br />

ebenfalls eine MatLab-Funktion zur Definition der mathematischen Funktion.<br />

Interaktiv statt Skript<br />

rungekutta<br />

§ 1110 Jetzt können wir die Eingabe der Parameter wie Schrittweite oder Grenzen des Integrationsintervalls<br />

komfortabler gestalten. Das Verfahren ist im Skript rungekuttainter<br />

enthalten:<br />

format compact<br />

a=input(’Untere Grenze a= ’)<br />

b=input(’Obere Grenze b= ’)<br />

dt=input(’Schrittweite dt= ’)<br />

x0=input(’Anfangswert x0= ’)<br />

datei=input(’Datei mit dotx (Name in Hochkommata) ’)<br />

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

Die ersten sechs Zeilen beschäftigen sich mit der Eingabe der zur numerischen Integration<br />

erforderlichen Parameter. Die oberste Zeile dient zur Komprimierung der Darstellung im<br />

MatLab-Kommandozeilenfenster (unterdrücken der Leerzeilen), die anderen vier Zeilen fragen<br />

die benötigten Parameter in diesem Fenster ab. Die folgende Zeile enthält den Aufruf<br />

der von uns geschriebenen MatLab-Funktion rungekutta. Dabei wird die zu integrierende<br />

Funktion über die MatLab-Datei dglinput eingegeben, d.h. für die Integration einer anderen<br />

Funktion ist nur eine weitere Datei mit der mathematischen Funktion als MatLab-Funktion<br />

anzulegen und diese einzugeben.<br />

7.10.6 MatLab-Solver<br />

§ 1111 Gewöhnliche Differentialgleichungen können in MatLab mit verschiedenen Verfahren<br />

gelöst werden. Die Lösungsverfahren heißen alle ode, gefolgt von einer Ziffernkombination.<br />

Darin steht ode für Ordinary Differential Equation. Die Syntax zum Aufruf einer der<br />

Funktionen ist sehr ähnlich der in den handgestrickten Lösungen verwendeten:<br />

>> [t,x] = solver(odefun,tspan,x0,options) ←↪<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!