ich habe eine Frage zur Geschwindigkeit in Matlab.
Ich führe folgende Funktion sehr oft (rund 10^10 mal) aus und habe festgestellt, dass diese Berechnung die absolute "Bremse" in meinem Gesamtkonzept ist. Habt Ihr eine Idee wie man dieses beschleunigen kann? Die Funktion berechnet den Ausgangsvekor eines Strahl in Abhängigkeit der Brechungsindizes und des Ebenen- sowie Einfallsvektors. Die Reflexion wird berücksichtigt.
die Gleichung dot(x,cross(s1,e))=0 hat unendlich viele Lösungen. Kannst du das einschränken? Dann könnte man vielleicht explizit einen Vektor bestimmen, der senkrecht auf cross(s1,e) steht. Dadurch könnte man zumindest den Aufruf des Solvers umgehen.
NORM und CROSS sind nicht effizient in Matlab implementiert. Da calcBrechung sehr oft ausgeführt wird, wäre eine handgeschriebene Version sinnvoll. Also statt "cross(X,Y)" :
Die Benutzung globaler Variablen für Parameter ist nicht optimal. Dazu benutzt man besser eine anoyme Funktion. Aber ich vermute, dass dies die Laufzeit nicht sonderlich beeinflusst.
Die Funktion Drehmatrix ist tut genau das was unter http://de.wikipedia.org/wiki/Drehmatrix Drehung in R^3 beschrieben ist. Durch diese Änderung habe ich eine Verkürzung der Rechenzeit um Faktor 60.
Das expliziete Formulieren des Kreuzproduktes hat leider keine Verbesserung gebracht.
Du berechnest im Worst-Case den Ausdruck "sin(winkel)*n1/n2" drei mal pro iteration. es wäre effizienter, die nur einmal zu machen und in einer temporären Variablen zu speichern.
Die Berechnung eines Winkels durch acos(a*b') ist numerisch instabil. ATAN2 ist besser.
"asin(sin(winkel)*n1/n2)" wirkt nicht sinnvoll, oder? Ein REM oder MOD wäre deutlich schneller.
danke für dei Tips. Man sollte vielleicht wirklich erst mal auf dem Papier kürzen bevor man mit Coy und Past die Terme einfügt (asin(sin(x)) und so
Bezüglich des REM und MOD könnte ich aber nicht ganz folgen. Kannst Du da vielleicht noch ein Wort mehr verlieren?
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.