WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Parallele Ausführung bis eine Funktion terminiert.

 

xfrost
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 14.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 19:56     Titel: Parallele Ausführung bis eine Funktion terminiert.
  Antworten mit Zitat      
Hi,

bin neu hier im Forum und hoffe mal, dass ich dieses Theme ins richtige Unterforum gestellt habe.

Mein Anliegen ist folgendes:
Ich habe eine n x 3 - Matrix und einen 1 x 3 Vektor und ich weiß, dass dieser Vektor in jener Matrix enthalten ist. Nun möchte ich wissen, an welcher Stelle sich dieser Vektor befindet.

Mein vorgehen bisher ist:

Code:
index = ismember(array,vector,'rows');


Der Profile Viewer sagt mir, dass diese Funktion (und die Funktionen die sie aufruft) am meisten Rechenzeit verbraucht und daher würde ich das gerne beschleunigen.

Dazu wollte ich zwei Funktionen schreibt (später evtl. mehr), welche das Array einmal von oben nach unten durchsuchen und einmal von unten nach oben und das ganze parallel. Sobald eine der beiden Funktionen terminiert, soll das Ergebnis zurückgegeben werden.

Hier mal ein Beispiel (die fastFindAsc und fastFindDesc werde ich noch optimieren):


Code:
function[index] = fastFind(array,vector)

%   Hier sollte Code stehen, der die fastFindAsc und
%   fastFindDesc parallel ausführt und sobald eine der
%   beiden terminiert, ein Ergebnis ausgibt.

end

function[index] = fastFindAsc(array,vector)

[length,~] = size(array);
index = 0;

for i=1:length
   if(array(i,3) == vector(3))
      if(array(i,2) == vector(2))
         if(array(i,1) == vector(1))
             index = i;
         end
      end
   end
end

return

end

function[index] = fastFindDesc(array,vector)

[length,~] = size(array);
index = 0;

k=1:length;
k=sort(k,'descend');

for i=k
   if(array(i,3) == vector(3))
      if(array(i,2) == vector(2))
         if(array(i,1) == vector(1))
             index = i;
         end
      end
   end
end

return

end


Ist so ein Vorhaben mit MATLAB realisierbar? Kann mir dabei jemand auf die Sprünge helfen?


MfG,
Xaver

// EDIT: Na, eben nochmal nach Alternative zu ismember geschaut, und
Code:
function[index] = fastFind(array,vector)

index = find(array(:,1)==vector(1) & array(:,2)==vector(2) & array(:,3)==vector(3),1,'last');

end

macht den Job hervorragend. Dennoch würde mich interessieren, ob man parallele Prozesse solange ausführen kann, bis einer einen Wert zurückgibt.
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.