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

Erzeugung aller Permutationen einer quadrat. Bool-Matrix

 

EliteTUM
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 21.04.11
Wohnort: München
Version: ---
     Beitrag Verfasst am: 12.09.2012, 20:51     Titel: Erzeugung aller Permutationen einer quadrat. Bool-Matrix
  Antworten mit Zitat      
Hi Leute,

ich habe folgendes Problem:

Ich möchte boolsche Matrizen der Größe n-x-n in allen möglichen Permutationen erzeugen. Weiß wer wie das gehen könnte? Wollte zuerst mit zwei for-loops über alle Matrix-Elemente gehen aber das reicht ja nicht wirklich.

Zum Verständnis: Angenommen ich möchte alle Permutationen einer 2-x-2 Matrix erzeugen, dann wären das folgende 2^(2x2)=16 Möglichkeiten:



|00| , |10| , |01| , |00| , |00| , |11| , |10| , |00|
|00| , |00| , |00| , |10| , |01| , |00| , |10| , |11|


|01| , |10| , |01| , |01| , |10| , |11| , |11| , |11|
|01| , |01| , |10| , |11| , |11| , |01| , |10| , |11|

Bin für jede Hilfe dankbar. Hab irgendwie gerade eine absolute Denkblockade!
_________________

- EliteTUM
_____________________________________
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2012, 22:07     Titel:
  Antworten mit Zitat      
geht laut Docu leider nur bis 7x7 (dann ist der Speicher eh voll Wink:
Code:
m=zeros(n,n,2^(n+n));
for k=0:(2^(n+n)-1)
    m(:,:,k)=reshape(dec2bin(k,n+n)=='1',n,n);
end;


Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.09.2012, 23:47     Titel: Re: Erzeugung aller Permutationen einer quadrat. Bool-Matrix
  Antworten mit Zitat      
Hallo EliteTUM,

Wenn ich mir die Daten so anschaue und für eine 2x2 Matrix 16 Werte herauskommen, also 2^4, kommt mir das bekannt vor. Da stehen ja die Binär-Darstellungen der Zahlen 0 bis 15, wenn man mal die Zeilen aneinandersetzt.

DEC2BIN ist da eine Lösung, aber es gibt leider ein CHAR-Vektor zurück. Aber es geht auch direkt:
Code:
rem(floor(x / 2^(4 - 1)), 2)

Dies prüft z.B. ob das 4.te Bit der Zahl x in der Binärdarstellung gesetzt ist oder nicht.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
EliteTUM
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 21.04.11
Wohnort: München
Version: ---
     Beitrag Verfasst am: 13.09.2012, 12:57     Titel:
  Antworten mit Zitat      
@Sirius3:

Ah, vielen Dank für deinen Code. Musste noch 1-2 Kleinigkeiten anpassen, jetzt klappt es immerhin für n=1 bis n=4. Vielen vielen Dank! Auf die Idee, wie von "Jan S" nochmal geschrieben, das Ganze als die Zahlen 0 bis 2^(n*n)-1 in Binärdarstellung zu sehen, bin ich nicht gekommen.

@Jan S:
Jap, Danke für deinen Hinweis. Jetzt hab ich auch verstanden woher Sirius3 seinen Code nimmt Smile
dec2bin ist insofern jedoch geeigneter, da damit automatisch der gesuchte String erzeugt wird. Mit der Abfrage ==1 macht man damit ja schnell ein Logical.

Der endgültige Code sieht so aus, leider wird das ganze für n = 5 sehr speicherintensiv und langsam. Für n = 4 dauert folgender code ca. 2.5s bei mir, für n = 5 würde er dann bei Annahme eines linearen Zusammenhangs ca. 20-30min brauchen. Evtl. versuche ich das doch in C oder zumindest als mex-Function umzusetzen.

Code:
clear
clc
n = 4;
m=zeros(n,n,2^(n*n)); % für n = 5 muss man hier zeros(n,n,1) setzen
for k=0:(2^(n*n)-1)
    m(:,:,k+1)=reshape(dec2bin(k,n*n)=='1', [n n 1]);
end

_________________

- EliteTUM
_____________________________________
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.