|
|
|
SCHNELLES finden in geordneter menge |
|
| BigSkylie |

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 15.10.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.01.2012, 13:04
Titel: SCHNELLES finden in geordneter menge
|
 |
Hallo,
ich habe einen Vektor x aus einigen hundert Zufallszahlen zwischen 0 und 1 und eine Skalare Zufalllszahl randn zwischen 0 und 1. Nun möchte ich den Index der Zahl in x, die randn am nächsten ist. Bisher sieht mein Algorithmus so aus:
Dabei ist mir völlig wurst, dass er immer die nächstgrößere Zahl findet, aber der Algorithmus ist mir zu langsam. Noch langsamer ist
Beide Codes berücksichtigen nicht, dass meine Menge geordnet ist. Meine Idee wäre jetzt eine For-Schleife, die in der Mitte von x anfängt, schaut ob randn größer oder kleiner als die Mitte ist und dann das Intervall halbiert und das gleiche noch einmal macht. In C++ wäre das sicher schneller, in Matlab wohl kaum, da der Code nicht vektorisiert ist.
Die Funktion wird oft benötigt und pro Verwendung ungefähr 1E10 mal aufgerufen, was locker mehreren Stunden entspricht. Eine Halbierung der Zeit wäre schon genial.
Gruß, BigSkylie
|
|
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 20.01.2012, 14:08
Titel:
|
 |
Hallo,
ich würde das an deiner Stelle mal schreiben und testen.
Was schneller sein dürfte, wäre eine Art Sekanten-Algorithmus.
Mit MATLAB Coder (früher Embedded MATLAB) könntest du daraus dann automatisch C-Code generieren, was nochmal ein wenig schneller sein dürfte.
Falls die Doku nicht aufgerufen werden kann, hast du wohl das Produkt nicht.
Grüße,
Harald
P.S.: ich gehe davon aus, dass es immer verschiedene x sind? Ansonsten könnte man ja "lernen", wo zu suchen ist.
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 21.01.2012, 18:27
Titel: Re: SCHNELLES finden in geordneter menge
|
 |
Hallo BigSkylie,
Was spräche gegen eine BinarySearch in einer C++Mex-funktion?
Gruß, Jan
|
|
|
|
| BigSkylie |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 15.10.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.01.2012, 19:01
Titel:
|
 |
Hallo Jan, Hallo Harald,
Vielen Dank euch beiden schonmal. Bin gerade dabei mir Visual Studio zu installieren, damit ich codegen verwenden kann. Ich hoffe mal damit komme ich zurecht, meine C++-Kentnisse sind eher dürftig.
BinarySearch scheint genau das zu sein was ich brauche. Wenn ich den Matlab Code in C++ portieren kann,dann wäre das sicher super.
Gruß, BigSkylie
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 21.01.2012, 21:37
Titel:
|
 |
Hallo BigSkylie,
Ich würde das direkt in C schreiben. Wenn man nur Mex-Files compilieren möchte, reicht eine Installation des SDK7.1 aus.
Ich schaue mal, ob ich eine passende Routine zusammen bekomme.
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.
|
|