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

randperm liefert doppelte Werte

 

Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 18.09.2014, 16:23     Titel:
  Antworten mit Zitat      
Vorbermerkung: Nein, es sind standardmässig DOUBLE Datentypen. Integer sind es nur, wenn man sie so festlegt. Und genau ist das Missverständnis. Ob es aber hier relevant ist werde ich gleich feststellen- ich experiementiere mal mit den Beispielwerten.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 18.09.2014, 17:13     Titel:
  Antworten mit Zitat      
Ich habe es noch nicht ganz, aber ich glaube ich verstehe den Algorithmus. Es werden einzelne Werte zwischen mate1 und mate2 gesswappt. Es sollen aber keine doppelten Werte vorkommen. Und deshalb wird einer der doppelten Werte wieder geswappt.

Ich glaube es liegt am Abbruchkriterium. Wenn ich diesen Code mehrfach ausführe, dann merke ich, dass beim Vorletzten Durchlauf alles stimmt, aber dann wird noch einmal etwas ver(schlimm)bessert.


Code:

mate1=[6 1 3  9 8 7 2 5 4 10];
mate2=[7 1 5 6 4 10 2 9 8 3];

disp(['mate1: ' num2str(mate1)]);
disp(['mate2: ' num2str(mate2)]);
disp(['    ']);
   
xp=ceil(rand*10)
xs=xp;

temp=mate1;
while mate1(xp)~=mate2(xs) % gleiche Positionen, da xs=xp
   mate1(xp)=mate2(xp); % first half of swap
   mate2(xp)=temp(xp);  % second half of swap

   disp(['mate1: ' num2str(mate1)]);
   disp(['mate2: ' num2str(mate2)]);
   disp(['    ']);
   
   xs=find(temp==mate1(xp));
   xp=xs
end


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Nikki
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2014, 17:19     Titel:
  Antworten mit Zitat      
ja, genau, du hast den Algorithmus richtig verstanden.
Es soll so lange ausgeführt werden, bis jeder mate alle Werte (wieder) einmal hat.

Danke für deine Mühe!

Nikki
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 19.09.2014, 08:28     Titel:
  Antworten mit Zitat      
Na dann hilft ein BREAK, vielleicht so:

Code:

while mate1(xp)~=mate2(xs) % gleiche Positionen, da xs=xp
   mate1(xp)=mate2(xp); % first half of swap
   mate2(xp)=temp(xp);  % second half of swap

   disp(['mate1: ' num2str(mate1)]);
   disp(['mate2: ' num2str(mate2)]);
   disp(['    ']);
   
   xs=find(temp==mate1(xp));
   xp=xs
   if (sum(mate1)==checksum1)
      break
   end    
       
end
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Nikki
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2014, 14:32     Titel:
  Antworten mit Zitat      
hallo Andreas,

es klappt jetzt! Smile

Vielen Dank!

Nikki
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.