MATLAB - Eine Einführung - TUM
MATLAB - Eine Einführung - TUM
MATLAB - Eine Einführung - TUM
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 />
⎠