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.

110 KAPITEL 3. FUNKTIONEN<br />

§ 438 Eine andere Möglichkeit, die Funktion an fplot zu übergeben, ist die Verwendung<br />

eines Handles:<br />

>> fhandle = @(x) x+sin(x).*cos(x); fplot(fhandle,[-2*pi 2*pi],’k’) ←↪<br />

Der Parameter hinter dem Klammeraffen @ gibt an, welches (bzw. bei einer Liste welche)<br />

Argumente an die im anschließenden Ausdruck dargestellte Funktion übergeben werden sollen.<br />

In diesem Fall ist es ein Parameter. Die Funktion wird bei der Definition des Handles<br />

nicht als String angegeben sondern ohne Hochkommata, so wie wir sie auch direkt in einem<br />

m-File eingeben würden. Genauere Informationen finden sich in der MatLab-Hilfe unter<br />

Anonymous Functions.<br />

§ 439 In der oben gegebenen Form erzeugt fplot keine Vektoren der x und y-Werte –<br />

im Workspace treten keine zusätzlichen Variablen auf. fplot kann jedoch auch verwendet<br />

werden, um anstelle der Abbildung zwei Vektoren X und Y mit den Ordinaten- und Abszissenwerten<br />

zu erstellen:<br />

>> [X Y] = fplot(’x.*x + 2*x + 4’,[-5 5]); ←↪<br />

Diese können dann mit plot dargestellt oder anderweitig verarbeitet werden.<br />

eval und feval<br />

eval<br />

feval<br />

§ 440 Die Funktion fplot greift auf die MatLab-Funktion eval zurück, die eine als String<br />

oder über einen Handle gegebene Funktion an verschiedenen Stellen auswertet:<br />

>> fun=’x + sin(x).*cos(x)’; x=2; y=eval(fun) ←↪<br />

y =<br />

1.6216<br />

liefert den Funktionswert von y = x + sin x cos x an der Stelle x = 2;<br />

>> fun=’x + sin(x).*cos(x)’; x=[1 2 3 4]; y=eval(fun) ←↪<br />

y =<br />

1.4546 1.6216 2.8603 4.4947<br />

liefert die Funktionswerte an den im Vektor x spezifizierten Punkten. 6<br />

§ 441 Eng mit eval verwandt ist die universeller verwendbare Funktion feval:<br />

>> fhandle = @(x) x+sin(x).*cos(x); x=2; y=feval(fhandle,x) ←↪<br />

y =<br />

1.6216<br />

Der Vorteil von feval liegt darin, dass feval ein Handle als Argument akzeptiert.<br />

§ 442 Die Möglichkeit, eine Funktion als String, über einen Handle oder durch Aufruf einer<br />

Datei auszuwerten, hat immer dann Vorteile, wenn die Funktion nicht direkt in den m-File<br />

geschrieben werden kann (z.B. bei einem GUI oder einem Algorithmus, der mehrfach auf<br />

verschiedene Funktionen angewandt werden soll) oder wenn die Funktion innerhalb eines<br />

Programms mehrfach ausgewertet werden muss, wie es z.B. bei einem Verfahren zur numerischen<br />

Integration (siehe Abschn. 5.5) oder zur numerischen Lösung einer Differentialgleichung<br />

vorkommt (siehe Abschn. 7.9.7 und 7.10).<br />

6 Achten Sie auf das Multiplikationszeichen! fplot arbeitet auch dann vernünftig, wenn bei der Definition<br />

der Funktion ein Multiplikationszeichen * statt der punktweisen Multiplikation .* verwendet wurde. Auch<br />

eval liefert beim ersten Beispiel einen vernünftigen Wert zurück, da die Funktion nur für einen Skalar ausgewertet<br />

wird. Beim zweiten Beispiel dagegen wird die Funktion für einen Vektor ausgewertet, so dass es bei<br />

Verwendung von * Probleme bei der Ausführung des Produkts sin(x)*cos(x) gibt und MatLab sich mit der<br />

üblichen Fehlermeldung ??? Error using ==> mtimes; Inner matrix dimensions must agree. verabschiedet.<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!