24.04.2013 Aufrufe

MATLAB - Eine Einführung - TUM

MATLAB - Eine Einführung - TUM

MATLAB - Eine Einführung - TUM

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.

Kapitel 8<br />

Optimierung von M-Files<br />

Bei großen Problemen ist es sinnvoll und notwendig, Algorithmen effizient zu implementieren. Durch<br />

die Beachtung einiger Regeln kann man enorme Zeitgewinne erreichen (vor allem in älteren <strong>MATLAB</strong>-<br />

Versionen ohne JIT-Compiler).<br />

8.1 Vektorisierung<br />

In <strong>MATLAB</strong> sind Matrix- und Vektoroperationen annähernd optimal implementiert. Deshalb sollte man<br />

so oft wie möglich auf sie zurückgreifen, insbesondere for-Schleifen sollten möglichst ersetzt werden. Dazu<br />

ein Beispiel:<br />

>> n = 5e5; x = randn(n,1);<br />

>> tic, s = 0; for i=1:n, s = s+x(i)^2; end, toc<br />

elapsed time is 1.532000 seconds<br />

>> tic t=sum(x.^2); toc<br />

elapsed time is 0.046000 seconds<br />

>>s-t<br />

ans = 0<br />

>> 0.046/1.532<br />

ans = 0.0300<br />

Offensichtlich wird in beiden Fällen die Summe der Quadrate der Elemente von x berechnet, beide<br />

Male mit dem selben Ergebnis. Der Zeitgewinn ist allerdings phänomenal: Durch die vektorielle Implementierung<br />

benötigt man lediglich 3% der Zeit der intuitiven Version mittels einer for-Schleife. 1<br />

Weitere Beispiele:<br />

• Berechnung der Fakultät:<br />

>> n=1e7;<br />

>> p1=1; for i=1:n, p=p*i; end %9.625 sec<br />

>> p2=prod(1:n) %0.531 sec<br />

• Ersetzen zweier Zeilen einer Matrix durch Linearkombinationen:<br />

⎛<br />

⎜<br />

⎝<br />

←− A1 −→<br />

.<br />

←− Aj −→<br />

.<br />

.<br />

←− Ak −→<br />

.<br />

⎞ ⎛<br />

⎟ ⎜<br />

⎟ ⎜<br />

⎟ ⎜<br />

⎟ ⎜<br />

⎟ ⎜<br />

⎟ ⎜<br />

⎟ ↩→ ⎜<br />

⎟ ⎜<br />

⎟ ⎜<br />

⎟ ⎜<br />

⎟ ⎜<br />

⎠ ⎝<br />

←− A1 −→<br />

.<br />

←− c ∗ Aj − s ∗ Ak −→<br />

.<br />

.<br />

←− s ∗ Aj + c ∗ Ak −→<br />

.<br />

←− An −→<br />

←− An −→<br />

1 Dieses Missverhältnis ist in aktuelleren <strong>MATLAB</strong> Versionen nicht mehr so drastisch, trotzdem hat man häufig noch<br />

einen Unterschied vom Faktor 4.<br />

46<br />

⎞<br />

⎟<br />

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!