13.01.2014 Aufrufe

Link - Hochschule Ulm

Link - Hochschule Ulm

Link - Hochschule Ulm

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!