|
|
Funktionsvektorisierung (inkl. logische Operationen)-GELÖST |
|
gurke111 |

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 13.01.09
|
 |
|
 |
Wohnort: http://gehrcke.de
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.01.2009, 17:47
Titel: Funktionsvektorisierung (inkl. logische Operationen)-GELÖST
|
 |
|
 |
|
Hallo! Mein erster Beitrag hier; ich hoffe er entspricht gewissen Normen
Kommen wir auch gleich zu meinem Problem: Ich habe eine Funktion function tri = triangle_periodic(t) geschrieben, die einen Parameter t übergeben bekommt und den Wert tri zurückgibt, wobei folgendes der entscheidende Funktionsinhalt ist:
Innerhalb der Funktion wird der Rückgabewert also u.a. mithilfe von logischen Ausdrücken berechnet.
Nun würde ich der Funktion gerne einen Vektor mit mehreren t-Werten übergeben können, sodass diese einen Vektor zurückgibt, dessen Komponenten den tri-Ergebnissen zu den einzelnen t-Werten entsprechen. Unkompliziert ausgedrückt: Eigentlich möchte ich das selbe Verhalten erzielen, wie sich z.B. die sin()-Funktion verhält:
Ich muss die Funktion also nun verändern/vektorisieren; weiß aber nicht wie, weil mich die logischen Ausdrücke dabei ungemein stören
Auf eine for-Schleife sollte ich aus Performancegründen wohl verzichten, denn ich habe später vor, recht große t-Vektoren zu übergeben.
Die Frage ist also: Wie vektorisiere ich diese Funktion? Ich hoffe, dass ich nur etwas übersehe und die Lösung eigentlich ganz einfach ist..
Vielen Dank für Eure Hilfe im Voraus!
Zuletzt bearbeitet von gurke111 am 14.01.2009, 16:27, insgesamt einmal bearbeitet
|
|
|
|
|
gurke111 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 13.01.09
|
 |
|
 |
Wohnort: http://gehrcke.de
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.01.2009, 16:24
Titel:
|
 |
Ich habe meine eigene Denkmaschine nochmal angeschmissen und folgende Lösung erarbeitet:
Nochmals gepasted hier (dort sieht es vll schöner aus..):
http://paste.pocoo.org/show/wmpwoL0LlE7hvf4tJJDH/
Diese Funktion nimmt Vektoren entgegen und verarbeitet diese (nur mithilfe von Vektoroperationen), sodass am Ende auch ein Ergebnisvektor dabei herauskommt.
Die Funktion aus meinem ersten Post habe ich um eine for-Schleife erweitert, sodass sie bei selbem Input das selbe Ergebnis erzeugt, wie meine vektorisierte Funktion:
Die Profiler-Ergebnisse...
...sind überzeugend! Für einen 100000 Elemente großen t_vec ist die vektorisierte Funktion ca. 1900 mal schneller; für einen 200000 Elemente großen Vektor ist sie sogar schon 5000 mal schneller! Es gibt also einerseits einen riesigen Geschwindigkeitsunterschied ansich und zusätzlich noch ein stark verschiedenes Skalierungsverhalten für größer werdenden Input.
|
|
|
gurke111 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 13.01.09
|
 |
|
 |
Wohnort: http://gehrcke.de
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.01.2009, 17:19
Titel:
|
 |
Die Profiler-Ergebnisse oben sind unfair gegenüber der for-Schleife. Wie sich unschwer erkennen lässt, kann ich durch ändern dieser Stelle die Performance der for-Schleife erhöhen:
Hier weiß ich ja bereits, wie groß triangle_vec werden wird:
Die oben genannten Ergebnisse ändern sich dadurch drastisch. Die Warnung blabla might be growing inside a loop. Consider preallocating for speed hat starke Berechtigung:
t_vec mit 1.000.000 Elementen:
Die vektorisierte Funktion ist 4.68 mal so schnell wie die for-Methode
t_vec mit 2.000.000 Elementen:
Die vektorisierte Funktion ist 5.08 mal so schnell wie die for-Methode
t_vec mit 4.000.000 Elementen:
Die vektorisierte Funktion ist 5.17 mal so schnell wie die for-Methode
Die Skalierung bei größerem Input ist also gar nicht so verschieden zwischen for-Methode und vektorisierter Funktion.
Ein Geschwindigkeitsgewinn um den Faktor 5 spricht dennoch deutlich für die vektorisierte Funktion.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|