|
|
Element in einem Vektor suchen |
|
skyforce |

Forum-Fortgeschrittener
|
 |
Beiträge: 82
|
 |
|
 |
Anmeldedatum: 04.09.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.11.2012, 16:08
Titel: Element in einem Vektor suchen
|
 |
hallo zusammen,
gegeben ist ein Vektor
Nun möchte ich die erste Zahl im x suchen, die >= eine vorgegebene Zahl a ist.
Matlab braucht dafür ca 0.002639s, wie kann ich das ganze noch beschleunigen?
Ich freue mich auf Eure Vorschläge
skyforce
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 19.11.2012, 19:22
Titel: Re: Element in einem Vektor suchen
|
 |
Hallo skyforce,
Ist das schneller?
Für eine zuverlässige Messung ist es wichtig, den Befehl mehrfach auszuführen, da man sonst viel Rauschen erhält.
Aber auch dann ist Matlab manchmal schlauer und die JIT-Acceleration erkennt, dass sich die Werte gar nicht in der Schleife ändern. Dann hilft:
Dann misst man zwar auch die Zeit für das Löschen der Variable, aber es ist trotzdem noch realisitischer.
Gruß, Jan
|
|
|
skyforce |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 82
|
 |
|
 |
Anmeldedatum: 04.09.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 14:12
Titel:
|
 |
also mit
komm ich nun auf ca 0.00137s, etwas schneller immer hin
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 14:25
Titel:
|
 |
Hallo,
dauert das bei dir wirklich für dieses konkrete Beispiel so lange?
Bei mir dauert das mit quad-core Laptop unter 2012b mit Win 7, 64 bit weniger als 0.00002 Sekunden.
Falls x immer ein Vektor mit gleichmäßiger Unterteilung ist, kann man ja auch selbst bestimmen, wo das Element sein muss, etwa so:
Grüße,
Harald
|
|
|
skyforce |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 82
|
 |
|
 |
Anmeldedatum: 04.09.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 14:46
Titel:
|
 |
ich weiß nicht was da los ist. Ich hab 2012a 64 bit, windows 7 64 bit, Core(TM) i7 2670 QM.
Der Rechner ist schnell genug, ich hab mir auch gedacht, dass es schneller laufen sollte
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 14:57
Titel:
|
 |
Hallo skyforce,
Solange x winzig ist (also z.B. die 33 Elemente aus Deinem Beispiel), ist der Overhead beim Aufruf einer Unterfunktion wichtig. Wenn Du größere Vektoren testen möchtest, wäre eine Mex-Funktion effizient, weil sie gleich beim ersten Fund mit dem Testen aufhören könnte, während Matlab immer den gesamten Vektor "x >= a" berechnet und speichert.
Gruß, Jan
|
|
|
skyforce |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 82
|
 |
|
 |
Anmeldedatum: 04.09.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 15:52
Titel:
|
 |
das ist eigentlich das orginale Beispiel
Könnt Ihr da bitte kurz messen, wie lange es bei Euch dauert. Bei mir sind immer ca 0.002s (alle o.g. Variationen schon ausprobiert). Liegt es daran, dass die Zahlen so genau mit vielen Nachkommastellen gespeichert werden?
Irgendwas ist bei mir faul!
|
|
|
skyforce |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 82
|
 |
|
 |
Anmeldedatum: 04.09.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 16:42
Titel:
|
 |
ich hab folgendes rausgefunden:
wenn ich den gesamten Code markiere und F9 drücke, kommt ca. 0.002s raus.
Wenn ich aber auf den grünen Run-button (grüner Pfeil) drücke und den Code abschicke, kommt ca 0.000089s raus.
Kann mir jemand das bitte erklären? Wie sollte man am besten vorgehen, wenn man die Zeit von Programmcode-Abschnitten messen will? Anscheinend ist "Abschnitt markieren -> F9 drücken" der falsche Weg
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 16:59
Titel:
|
 |
Hallo skyforce,
Die Laufzeitmessung winziger Code-Schnipsel ist sinnfrei. Wenn Du den Code über eine GUI-Aktion aufrufst, wird das Update des GUI-Fensters einige Rechnenzeit verschlingen. Auch eine startende Festplatten-Defragmentierung und der Virenscanner kann einen so kleinen Code-Abschnitt deutlich verzögern. Solche Effekt können sogar reproduzierbar sein.
Ich würde Messwerten wie "0.000089" auf keinen Fall vertrauen. Alles unterhalb von 0.01 Sekunden ist von statistisches Rauschen verzerrt.
Es gibt in Matlab's FileExchange die Funktion "timeit". Im Allgemeinen hilft aber auch die Schleifen-Methode, die ich oben bereits gezeigt habe.
Gruß, Jan
|
|
|
|
|
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.
|
|