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

Kombinatorik für Matrizen

 

ThoRie
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2019, 00:32     Titel: Kombinatorik für Matrizen
  Antworten mit Zitat      
Hallo,

ich habe mal ein ganz besonderes Anliegen. Und zwar muss ich eine bestimmte Berechnung durchführen und dafür brauche ich Kombinatorik. Genauer gesagt, suche ich eine Funktion, die für eine 3x3-Matrix der Form
A=\left(\begin{array}{ccc}
<br />
a\;  b\;  c\\
<br />
d \; e  \;f\\
<br />
g\;h\;i
<br />
\end{array}\right) mit a,b,c,d,e,f,g,h,i=\{0,1,2,3\}
alle Möglichen Kombinationen nacheinander durchgeht.

Soll heißen, er soll halt alle Möglichkeiten mit a=1 probieren, dann alle mit a=2 usw. Dabei ist auch noch wichtig, dass Wiederholungen möglich sind. Es sind also insgesamt 6561 Möglichkeiten. Warum ich die nicht alle händisch durchspielen will, sollte sich damit also erübrigt haben.

Vielleicht kennt jemand ja eine Funktion, die genau das macht Smile
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: 04.08.2019, 15:17     Titel: Re: Kombinatorik für Matrizen
  Antworten mit Zitat      
Hallo ThoRie,

Nein, es gibt keine Funktion, die genau das macht.
Ist das eine Hausaufgabe? Was hast du bereits selbst probiert? Welche Schwierigkeiten sind dabei aufgetreten?
Was bedeutet genau "Wiederholungen dürfen auftreten"?
Wie kommst du auf 6561=3^8 Lösungen? 4^9 wäre logischer.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2019, 17:35     Titel:
  Antworten mit Zitat      
Also zum einen habe ich schon probiert, dass ich ihm sagen wollte, dass er das erste Element von 0-3 hochzählen soll, dabei in jedem Schritt das nächste Element ebenso behandeln soll usw. Daran bin ich aber kläglich gescheitert.

ich werde gleich nochmal ein pdf erstellen, welches zeigt, was ich meine.

Und auf die Zahl bin ich gekommen, da ich ja 9 Positionen (3x3) mit je 4 Möglichkeiten habe, also dachte ich an die Berechnung 9^4.

Wiederholung heißt, dass auch wenn zum Beispiel auf Position 1 schon eine 0 steht, trotzdem auch auf einer anderen wieder eine 0 kommen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
ThoRie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2019, 17:50     Titel:
  Antworten mit Zitat      
Also, ich glaube, ich bin raus, wenn nicht noch jemand mit den bisherigen Angaben eine zündende Idee hat.

Der Grund, warum ich es nicht als Code geschrieben bekomme ist tatsächlich der, dass ich es nicht mal für die ersten zwei Beispiele auf Papier hinkriege :/

Ich hoffe also, jemand hier kann sich vorstellen, wie ich das in meiner Beschreibung meinte :/
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.08.2019, 18:21     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
also dachte ich an die Berechnung 9^4.

Es ist aber genau umgekehrt.

Wie wäre es damit?
https://www.mathworks.com/matlabcen.....xchange/11462-n_permute_k

Auf die Schnelle würde ich alternativ sagen:
Code:
M = zeros(4^9, 9);
for k=1:9
    M(:,k) = repmat(repelem((0:3)', 4.^(k-1)), 4.^(9-k), 1);
end


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ThoRie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2019, 19:38     Titel:
  Antworten mit Zitat      
Also das mit der geschriebenen Funktion hatte ich schon versucht, aber das hat leider auch nicht geklappt.

Ich habe es jetzt zumindest erstmal so gelöst:
Code:
a=2;
b=3;
c1=1;
s=[a b a; b c1 b;a b a];
Wert=0;
S3=[3 3 3;3 3 3;3 3 3];
Null=[2 1 2;1 0 1;2 1 2];
k=0;
M=zeros(3,3);
while Wert==0
  if any(M==[randi([0 3]) randi([0 3]) randi([0 3]);randi([0 3]) randi([0 3]) randi([0 3]);randi([0 3]) randi([0 3]) randi([0 3])])
    k+=1
  else
    M=[randi([0 3]) randi([0 3]) randi([0 3]);randi([0 3]) randi([0 3]) randi([0 3]);randi([0 3]) randi([0 3]) randi([0 3])];
    x=sandhaufen(M,S3);
    z=sandhaufen(x,s);
    if z==Null
      Wert=1
      disp(x);
    endif
  endif
endwhile


Das ist jetzt der komplette Code, der also nicht nur die komplette Kombinatorik macht, sondern auch das, was dann weiter damit geschehen soll. Er ist zwar alles andere als effizient, aber immerhin funktioniert er xD Da ich gerade einen Lauf mache, kann ich deinen Vorschlag leider nicht gleich ausprobieren, werde aber den nächsten Lauf einfach einmal damit versuchen. Dann gebe ich noch einmal Rückmeldung, ob der direkt funktioniert Smile

Aber auf jeden Fall erstmal Danke für die Antwort Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
ThoRie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2019, 19:44     Titel:
  Antworten mit Zitat      
Also das funktioniert zwar im Kern, aber in der Form, wie ich es brauche leider nicht.
Das ist aber nicht schlimm, da ich nur noch einen Lauf machen muss.

Damit ist dann eine weitere Antwort hier nicht mehr nötig.
Ich werde es dennoch als beantwortet markieren. Vielleicht hat ja irgendjemand mal ein ähnliches Problem, bei dem deine Antwort weiterhilft.

Also noch einmal Danke an euch beide für die Hilfe und die Zeit die ihr investiert habt Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.08.2019, 20:15     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Also das funktioniert zwar im Kern, aber in der Form, wie ich es brauche leider nicht.

Heißt nun was? Die Matrizen sind zwar da Zeilenvektoren, aber das sollte ja jetzt nicht das Problem sein. Was ist dann das Problem?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ThoRie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2019, 12:01     Titel:
  Antworten mit Zitat      
Zitat:
Heißt nun was? Die Matrizen sind zwar da Zeilenvektoren, aber das sollte ja jetzt nicht das Problem sein. Was ist dann das Problem?


Das bezog sich auf eine Antwort, die irgendwie nicht mehr da ist :/

Aber mittlerweile habe ich es geschafft ein Skript zu schreiben, das mir alles anzeigt, was ich haben will:

Code:
for a= 0:3
  for b=0:3
    for c=0:3
      for d=0:3
        for e=0:3
          for f=0:3
            for g=0:3
              for h=0:3
                for i=0:3
                  M=[a b c;d e f;g h i]
                end
              end
            end
          end
        end
      end
    end
  end
end


Es kann zwar sein, dass das auch nicht unbedingt die effizienteste Variante ist, aber sie ist immerhin funktional und einfach Smile
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 - 2024 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.