Link - Hochschule Ulm
Link - Hochschule Ulm
Link - Hochschule Ulm
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
nate des Vektor Quotient wird mit 8 potenziert,<br />
bevor das Resultat der Variablen y zugeordnet<br />
wird.<br />
Die Matlab-Funktion vectorize vektorisiert<br />
einen String automatisch. Hierzu betrachten<br />
wir folgendes Beispiel. Sind die Vektoren<br />
Zaehler und Nenner wie folgt definiert:<br />
1 Zaehler = [1 2 3];<br />
2 Nenner = [4 5 6];<br />
dann ist Zaehler/Nenner keine vektorielle<br />
Divsion, da vor dem Divisionszeichen / der<br />
Punkt . fehlt. Die Anweisung<br />
1 >> vectorize(’Zaehler/Nenner’)<br />
2 ans =<br />
3 Zaehler./Nenner<br />
erzeugt die gewünschte Syntax. Analog setzt<br />
der Befehl vectorize vor den Zeichen * und<br />
ˆ einen Punkt und ermöglichst somit eine vektorisierte<br />
Operation.<br />
Aufgabe 72 (Effiziente Programme) Vektorisieren<br />
Sie den String ’((1+x/24)/<br />
(1-x/12+xˆ2/384))ˆ8’ und zeigen Sie grafisch,<br />
dass f eine Approximation im Intervall<br />
[0, 1] an die Exponentialfunktion e ist.<br />
Nicht alle Berechnungen sind jedoch vektorisierbar.<br />
In diesen Fällen muss man auf Schleifen<br />
zurückgreifen. Um diese Berechnungen<br />
jedoch schneller auszuführen, sollte man die<br />
Ausgabematrizen mit Nullen vorbesetzen (Preallokieren).<br />
Wir erläutern an einem Beispiel,<br />
was damit gemeint ist. Angenommen es sei die<br />
Matrix<br />
[ ] 0.8 0.3<br />
A =<br />
0.2 0.7<br />
gegeben und wir wollen die Eigenwerte der<br />
Matrizen A k für k = 1, 2, . . . , 10 berechnen.<br />
Die Eigenwerte sollen spaltenweise in der Ausgabematrix<br />
E gespeichert werden. Das folgende<br />
Script realisiert dies:<br />
1 E = zeros(2,10);<br />
2 for k=1:10<br />
3 E(:,k) = eig(A^k);<br />
4 end<br />
Mit der Anweisung E = zeros(2,10); haben<br />
wir die Ausgabematrix E mit Nullen vorbesetzt.<br />
Hätten wir dies nicht getan, so müsste<br />
Matlab in jedem Schleifendurchlauf die Größe<br />
der Matrix E durch Hinzunahme einer weiteren<br />
Spalte verändern, was sich durch eine längere<br />
Ausführungszeit bemerkbar machen würde.<br />
Darüber hinaus hat das Vorbesetzen der Ausgabematrizen<br />
den Vorteil, dass man sich bereits<br />
vorher über die Größe und Orientierung<br />
Gedanken machen muss, was zu disziplinärem<br />
Programmierstil erzieht.<br />
Wir fassen noch einmal zusammen: Das Ersetzen<br />
einer Schleife durch eine Vektoroperation<br />
nennt man Vektorisierung und hat drei Vorteile:<br />
• Geschwindigkeit. Viele eingebaute Matlab-<br />
Funktionen werden schneller ausgeführt,<br />
wenn man anstelle eines mehrfachen Aufrufs<br />
als Argument einen Vektor übergibt.<br />
• Übersichtlichkeit. Es ist übersichtlicher, ein<br />
vektorisiertes Matlab-Script zu lesen, als<br />
das skalare Gegenstück.<br />
• Ausbildung. Im wissenschaftlichen Rechnen<br />
ist man bei verschiedenen Rechnern interessiert,<br />
vektorisierte Algorithmen zu entwickeln<br />
und zu implementieren. Matlab unter-<br />
80 Copyright c○ G. Gramlich