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

Mögliche Kombinationen von Variablen

 

Vaati
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.02.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2018, 10:02     Titel: Mögliche Kombinationen von Variablen
  Antworten mit Zitat      
Hallo,

ich hoffe ich bin hier richtig. Ich lese mit MATLAB 8 Zeitpunkte ein. Zum Beispiel:
x1 = 1sec
x2 = 3sec
x3 = 7sec
.
.
x8 = 30sec.
Also die einzelnen Zeitpunkte sind alle aufsteigend von ihrem Wert her. Jetzt hätte ich gerne alle möglichen Kombinationen der Länge 4 mit aufsteigenden Zeitpunkten.
Beispiel:
Möglichkeit1 = [x1 x2 x3 x4]
Möglichkeit2 = [x1 x3 x4 x5]
.
.
Möglichkeitk = [x5 x6 x7 x8]

Gibt es dafür etwas in MATLAB oder kann mir jmd. einen mathematischen Ansatz liefern, sodass ich das implementieren kann? Kombinationen in denen die Zeitpunkte nicht aufsteigend vorkommen sollen nicht vorkommen (aber generell ws nicht schlimm kann man dann ja später ggf. noch rauslöschen?!).

Vielen Dank für euren Input!

Grüße Vaati
Private Nachricht senden Benutzer-Profile anzeigen


Vaati
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.02.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2018, 10:23     Titel:
  Antworten mit Zitat      
Das war mein erster Ansatz:

Code:

werte = [1.2 1.5 3.5 5.5 6.7 8.5 10.3 14];
r = 1;
for i = 1:1:8
    for j = i:1:8
        for k = j:1:8
            for m = k:1:8
                tmp(r,:) = [werte(i) werte(j) werte(k) werte(m)];
                r = r + 1;
            end
        end
    end
end
 


Aber irgendwie passt das noch nicht so Recht... Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 31.08.2018, 11:38     Titel:
  Antworten mit Zitat      
Hallo Vaati,

Zitat:

Aber irgendwie passt das noch nicht so Recht...

Meistens ist es einfacher, wenn du gleich sagst was nicht passt.

Wenn du das über Schleifen machen möchtest war dein Ansatz fast richtig. Bevor ich dir jetzt eine Lösung poste gebe ich dir mal einen Tipp:
Ersetze mal deinen "werte" Vektor durch:
Code:
werte = [1 2 3 4 5 6 7 8];

Da siehst du viel schneller woran es liegen kann (zum Beispiel an den Anfangsbedingungen deiner Schleifen - wenn der erste Wert 1 ist willst du ja nicht, dass der nächste Wert auch bei 1 anfängt, sondern bei 2, usw.) Wink

Falls du nicht drauf kommst, meldest du dich einfach nochmal, dann poste ich dir die Lösung Smile

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
Vaati
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.02.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2018, 11:54     Titel:
  Antworten mit Zitat      
Hi J0nas,

danke dir.
Ich habe es jetzt so gelöst, scheint mir aber mächtig kompliziert. Das kann man sicher noch optimieren, kannst du mir dabei helfen? Smile
Code:

clear all
werte = [1.2 1.5 3.5 5.5 6.7 8.5 10.3 14];
r = 1;
alleKombinationen=zeros(330,4);
for i = 1:1:8
    for j = i:1:8
        for k = j:1:8
            for m = k:1:8
                alleKombinationen(r,:) = [werte(i) werte(j) werte(k) werte(m)];
                r = r + 1;
            end
        end
    end
end
%tmp = sort(tmp);

for i = 1:1:length(alleKombinationen(:,1))
    if alleKombinationen(i,1) == alleKombinationen (i,2) || alleKombinationen(i,1) == alleKombinationen(i,3) || alleKombinationen(i,1) == alleKombinationen(i,4)
        alleKombinationen(i,:) = 0;
    elseif alleKombinationen(i,2) == alleKombinationen (i,3) || alleKombinationen(i,2) == alleKombinationen(i,4)
        alleKombinationen(i,:) = 0;
    elseif alleKombinationen(i,3) == alleKombinationen (i,4)
        alleKombinationen(i,:) = 0;
    end
end
alleKombinationen( all(alleKombinationen ==0, 2), :) = [];
 
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 31.08.2018, 12:14     Titel:
  Antworten mit Zitat      
Hi Vaati,

wie gesagt, die Anfangsbedingungen von deinen Schleifen anpassen hätte schon gereicht:

Code:

werte = [1 2 3 4 5 6 7 8];
r = 1;
for i = 1:1:8
    for j = i+1:1:8
        for k = j+1:1:8
            for m = k+1:1:8
                tmp(r,:) = [werte(i) werte(j) werte(k) werte(m)];
                r = r + 1;
            end
        end
    end
end
 


Musst halt wieder deinen werte-Vektor nehmen.

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
Vaati
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.02.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2018, 12:57     Titel:
  Antworten mit Zitat      
J0nas hat Folgendes geschrieben:
Hi Vaati,

wie gesagt, die Anfangsbedingungen von deinen Schleifen anpassen hätte schon gereicht:

Code:

werte = [1 2 3 4 5 6 7 8];
r = 1;
for i = 1:1:8
    for j = i+1:1:8
        for k = j+1:1:8
            for m = k+1:1:8
                tmp(r,:) = [werte(i) werte(j) werte(k) werte(m)];
                r = r + 1;
            end
        end
    end
end
 


Musst halt wieder deinen werte-Vektor nehmen.

Grüße
Jonas


Komisch, das hatte ich probiert und bei mir kam quatsch raus...habe ich wohl irgendwo was vergeigt.
Danke dir auf jeden Fall und schönes Wochenende Smile.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
huhu0815
Forum-Century

Forum-Century


Beiträge: 141
Anmeldedatum: 20.02.14
Wohnort: Dresden
Version: R2013b, R2014b, R2016b, R2018a
     Beitrag Verfasst am: 31.08.2018, 14:12     Titel:
  Antworten mit Zitat      
Hi

Im Fex gibt es eine super funktion dazu Wink
_________________

Viele Grüße
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.