Verfasst am: 31.08.2018, 10:02
Titel: Mögliche Kombinationen von Variablen
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?!).
werte = [1.21.53.55.56.78.510.314];
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
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:
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.)
Falls du nicht drauf kommst, meldest du dich einfach nochmal, dann poste ich dir die Lösung
Grüße
Jonas
_________________
1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
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?
Code:
clearall
werte = [1.21.53.55.56.78.510.314];
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), :) = [];
wie gesagt, die Anfangsbedingungen von deinen Schleifen anpassen hätte schon gereicht:
Code:
werte = [12345678];
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
wie gesagt, die Anfangsbedingungen von deinen Schleifen anpassen hätte schon gereicht:
Code:
werte = [12345678];
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
Im Fex gibt es eine super funktion dazu
_________________
Viele Grüße
Einstellungen und Berechtigungen
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
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.