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

Funktion für "ist-noch-nicht"-Abgleich

 

ThoRie
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2019, 11:58     Titel: Funktion für "ist-noch-nicht"-Abgleich
  Antworten mit Zitat      
Hallo Smile

Ich habe mich mal an einem kleinen Test versucht. Und zwar geht es um folgenden code (der so nicht funktioniert, wie er soll):

Code:
a=zeros(1,3);
b=0;
for a(1,1)=1:3
  for a(1,2)=1:3
    for a(1,3)=1:3
      if ~(any(a)==a)
        b+=1
        a=a
      end      
    end
  end
end


Und zwar soll er bis zur if-Abfrage alles genau so machen, wie es der Fall ist. Also das funktioniert schon mal. Aber genau in diesem if-teil liegt der Fehler.
Jetzt möchte ich dem Programm sagen, dass er mir den Vektor genau dann ausgeben soll, wenn es keine Dopplungen gibt. Also gibt es ja 6 Möglichkeiten (dafür der Laufindex b, damit man das direkt erkennen kann).

Wie kann ich das dem Programm sagen?


PS.: Der Hintergrund ist, dass ich das ganze dann in abgewandelter Form auf eine 9x9-Matrix übertragen möchte, aber wenigstens erst einmal eine Grundidee brauche.
Private Nachricht senden Benutzer-Profile anzeigen


sijuherm
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 01.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2019, 12:25     Titel:
  Antworten mit Zitat      
Mal davon abgesehen, dass der Code nicht in Matlab läuft, scheint mir das auch reichlich kompliziert. Bin mir auch nicht sicher, was du eigentlich willst. Du willst einen Vektor (oder später eine Matrix?) ausgeben lassen, wenn kein Element mehrfach vorkommt?
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: 21.08.2019, 12:36     Titel: Re: Funktion für "ist-noch-nicht"-Abgleich
  Antworten mit Zitat      
Hallo ThoRie,
Zitat:
Code:
a=zeros(1,3);
b=0;
for a(1,1)=1:3

Und zwar soll er bis zur if-Abfrage alles genau so machen, wie es der Fall ist. Also das funktioniert schon mal.

Wieso meinst du, dass das funktioniert? for a(1,1)=1:3 erzeugt eine Fehlermeldung, weil das keine valide Matlab-Syntax ist. Was bedeutet dann "alles genau so machen, wie es der Fall ist"?

Der Ausdruckl "a=a" ist sinnfrei. Wozu soll dies gut sein?

Zitat:
Jetzt möchte ich dem Programm sagen, dass er mir den Vektor genau dann ausgeben soll, wenn es keine Dopplungen gibt.

Die Beschreibung ist noch nicht ganz klar. Der gezeigt Code läuft nicht und die Erklärung ist nicht eindeutig. Darum müsste ich raten, was du überhaupt erreichen möchtest. Raten ist aber keine effiziente Problemlösung. Ich versuche es trotzdem:
Du möchtest alle 1x3 Vektoren ausgeben, die die Ziffern 1 bis 3 enthalten, aber keine davon doppelt. Richtig? Dann nennt man das "Permutation". Für solch kleine Probleme läuft ein Brute-Force-Ansatz mit Schleifen, aber mit wachsender Größe des Problems explodiert die benötigte Rechnenzeit.

Zitat:
PS.: Der Hintergrund ist, dass ich das ganze dann in abgewandelter Form auf eine 9x9-Matrix übertragen möchte, aber wenigstens erst einmal eine Grundidee brauche.

In abgewandelter Form?! Das ist also gar nicht das eigentliche Problem, das du lösen möchtest?

Code:

Was soll diese Zeile bewirken? any(a) ist TRUE, wenn irgendein Element von a ungleich Null ist. any(a)==a wäre in deinem Fall wohl immer 1, zumindest wenn die FOR-Schleifen so funktionieren würden (was sie aber nicht tun). Dann vergleichst du elementweise: 1==a. Mit dem ~ Operator verneinst du die Ausgabe, bekommst also für a = [1,2,3] die Bedingung [FALSE, TRUE, TRUE]. Da Matlab aber immer skalare Bedingungen benötigt, wird implizit ein all() eingefügt.

Möchtest du nur die Anzahl der möglichen Permutationen berechnen, oder brauchst du eine Liste aller möglichen Vektoren?
Code:
v = [1,2,3];
perms(v)
n = factorial(numel(v))

Dein Code würde so laufen:
Code:
a = zeros(1, 3);
b = 0;
for i1=1:3
  for i2=1:3
    for i3=1:3
      if i1 ~= i2 && i1 ~= i3 && i2 ~= i3
        b = b + 1;
      end      
    end
  end
end


Gruß, Jan
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.