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

Sortierung in Matlab

 

Manfred

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2016, 11:32     Titel: Sortierung in Matlab
  Antworten mit Zitat      
Hallo zusammen,

ich bin noch ziemlich neu in Matlab und habe ein etwas komplexeres Sortierproblem. Daher habe ich unten ein ausführliches stark verkürztes Beispiel hingeschrieben, wodurch sich mein Problem hoffentlich etwas veranschaulichen lassen kann:

Ich habe 2 Matrizen NFA und RX. Diese sind jeweils 4x4 Matrizen

--NFA: (4 1 6 3)-----RX: (1 5 3 8)
--------(9 7 3 8)----------(3 4 5 2)
--------(4 6 2 5)----------(7 3 4 5)
--------(3 6 5 9)----------(1 8 4 7)

Die Lösung sollte so aussehen, dass NFA der Größe nach sortiert wird und in 2 Gruppen aufgespalten wird. RX soll aber nach dem Schema der Sortierung von NFA quasi mitsortiert werden und ebenfalls in 2 Gruppen getrennt werden. Also:

--NFA: (1 3 4 6)------RX:(5 8 1 3)
--------(3 7 8 9)----------(5 4 2 3)
--------(2 4 5 6)----------(4 7 5 3)
--------(3 5 6 9)----------(1 4 8 7)

Jeweils In 2 Gruppen (G1 und G2) aufgespaltet:

----------G1----G2------------G1---G2
--NFA: (1 3) (4 6) -----RX:(5 8) (1 3)
--------(3 7) (8 9) ---------(5 4) (2 3)
--------(2 4) (5 6)----------(4 7) (5 3)
--------(3 5) (6 9)----------(1 4) (8 7)

Jetzt gibt es aber noch einen dritten Faktor LDC, der dieselben Werte wie NFA beinhaltet aber anders sortiert ist.


LDC: (6 4 3 1)
------(7 8 3 9)
------(2 6 4 5)
------(9 6 5 3)

Ich möchte jetzt gerne jede Gruppe der NFA so neuordnen, dass die Reihenfolge des Faktors LDC entscheidet, welches Element in der jeweiligen Gruppe der NFA vorne steht. Die Lösung sollte so aussehen:

--------G1-----G2------------G1----G2
--NFA: (3 1) (6 4) -----RX:(8 5) (3 1)
--------(7 3) (8 9) ----------(4 5) (2 3)
--------(2 4) (6 5)-----------(4 7) (3 5)
--------(5 3) (9 6)-----------(4 1) (7 8)

Bsp.: 1.Zeile: In LDC steht die 3 vor der 1 und die 6 vor der 4, so dass die Reihenfolge auch in NFA tauscht.
In Zeile 2 ist in LDC die 7 vor der 3, die 8 aber weiterhin vor der 9, so dass nur Gruppe 1 tauschen würde. Wichtig ist daher, dass nicht komplett neu sortiert wird, sondern nur innerhalb der Gruppe getauscht werden soll (auf Basis des Faktors LDC). RX soll sich auch wieder der neuen Sortierung anpassen.

Ich hoffe das mein Problem verständlich geworden ist und ihr mir weiterhelfen könnt.

Viele Grüße und vielen Dank vorab,

Manfred


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.04.2016, 11:54     Titel:
  Antworten mit Zitat      
was hast du denn bis jetzt versucht und welche fehler sind dabei aufgetreten ?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Manfred

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2016, 15:10     Titel:
  Antworten mit Zitat      
Hallo,

offen gesagt bin ich noch nicht wirklich weit gekommen.

Ich kann NFA sortieren mit:

Code:
NFA.neu=sort(NFA,2)


Jetzt müsste ich aber jede Zeile von RX so wie NFA sortieren und da hakt es schon:

Mein Versuch:
Code:
[NFA.neu,ind]=sort(NFA.neu);
RX.neu=[NFA.neu;RX(:,ind)


Da bekomme ich aber den Fehler "vertcat, Dimensions of matrices being concatenated are not consistent"

Wahrscheinlich es gar nicht soo schwer, aber...

Viele Grüße,
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.04.2016, 16:36     Titel:
  Antworten mit Zitat      
wenn du dir ind anguckst stehen da die indexe bezogen auf jede zeile drin. am einfachsten und für anfänger am übersichtlichsten ist es dann diese einfach mit einer schleife abzuarbeiten.
Code:
[NFAneu,ind]=sort(NFA,2)
for k=1:size(ind,1)
RXneu(k,:)=RX(k,ind(k,:))
end

_________________

richtig Fragen
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.