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

Elemente einer Matrix sinnvoll aneinanderreihen

 

flexi69
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 05.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 16:43     Titel: Elemente einer Matrix sinnvoll aneinanderreihen
  Antworten mit Zitat      
Hallo Community!

Ich habe folgendes Problem.
Ich möchte anhand einer vorgegebenen Matrix
Code:

mat =

     1     5
     1     8
     2     6
     2     7
     3     5
     3    10
     4     6
     4     9
     7     8
     9    10
 


einen Vektor erstellen, in dem die jeweils zugehörigen Elemente aneinandergereiht sind.

Dieser Vektor soll folgendermaßen aussehen:
Code:


reihe = [1 5 3 10 9 4 6 2 7 8]

 


Hier wird sozusagen das für 1 zugehörige Element 5 an zweiter Stelle des Vektors abgespeichert und das für 5 zugehörige Element 3 an dritter Stelle usw.

Ich wollte hier mithilfe einer for-Schleife und einem find-Befehl arbeiten, habe jedoch nichts korrektes zustande gebracht.

Wie komme ich zu meinem gewünschten Ergebnis? Irgendwelche Ideen? Smile

Vielen Dank für eure Hilfe und LG!
Private Nachricht senden Benutzer-Profile anzeigen


Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 05.11.2014, 18:20     Titel:
  Antworten mit Zitat      
Hallo Flexi,

Mir ist nicht eindeutig klar wie sich der Vektor ergibt.

1 Wert in mat(1,1) oder erster min. Wert?
5 zugehöriger Wert in Spalte 2
3 zugehöriger Wert in Spalte 1
10 zugehöriger Wert in Spalte 2
9 zugehöriger Wert in Spalte 1
4 hier hätte ich einen zweiten Wert 9 in Spalte 1 erwartet, um den zugeh. Wert in Spalte 2 zu lesen. Stattdessen wird die 9 in Spalte 2 verwendet. Was, wenn gar keine 9 mehr enthalten ist?
6 ab hier wieder abwechselnd Werte aus Spalte 1 und 2
2
7 hier wieder Spaltenwechsel
8

Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
flexi69
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 05.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 18:32     Titel:
  Antworten mit Zitat      
Hallo Seban, Smile

mit 1 ist tatsächlich der Wert 1 gemeint. Damit soll meine Reihe stets beginnen. Die 1 befindet sich aber auch stets im Feld mat(1,1).
Die Reihe wird so gebildet, wie du es beschrieben hast. Per Hand überhaupt kein Problem, jedoch mangelt es mir hier an einem Ansatz in der Programmierung.
Jede Zahl von 1 bis 10 ist stets 2 mal in der Matrix vertreten, die 1 hat in diesem Beispiel die zugehörigen Werte 5 und 8 - hier wird nun die 5 betrachtet,
welche die zugehörigen Werte 1 und 3 hat. Da die 1 bereits in der Reihe vorhanden ist, wird nun die 3 die betrachtet, welche die zugehörigen Werte 5 und 10 aufweist, und immer so weiter Arrow .
In meiner Reihe sollen diese Zahlen nun so aneinander gereiht werden,
dass sich der Kreis am Ende schließt und keine Zahl zwei mal vorkommt.
Ich hoffe ich konnte das hier einigermaßen verständlich formulieren und darstellen Confused

Danke nochmal!
Gruß, Flexi
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 05.11.2014, 20:39     Titel:
  Antworten mit Zitat      
Voll die Frickelei Very Happy Aber es scheint unter den gegebenen Bedingungen zu funktionieren.

Code:
M = [1     5;
    1     8;
    2     6;
    2     7;
    3     5;
    3    10;
    4     6;
    4     9;
    7     8;
    9    10];

for ii = 2:size(M,1)
    if ii == 2
        r(ii-1)     = M(ii-1);
        r(ii)       = M(ii-1, 2);
        last_row    = 1;
        nxt_col     = 2;
    else
        idx_lst = find(M == r(ii-1));
        [idx_row, idx_col] = ind2sub(size(M), idx_lst);
        nxt_row = idx_row(idx_row ~= last_row);
       
        if idx_col(1) == 1 &&  idx_col(2) == 1
            nxt_col = 2;
        elseif idx_col(1) == 2 &&  idx_col(2) == 2
            nxt_col = 1;
        end
       
        r(ii)       = M(nxt_row, nxt_col);
        last_row    = nxt_row;
    end
end


Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
flexi69
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 05.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2014, 02:01     Titel:
  Antworten mit Zitat      
Hallo Seban! Smile

wahnsinn, was du da auf die Beine gestellt hast. So funktioniert es optimal Smile

Besten Dank und liebe Grüße, Flexi Cool
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 06.11.2014, 02:25     Titel:
  Antworten mit Zitat      
Danke Smile

Ich frage mich bloß, warum ich statt
Code:
idx_lst = find(M == r(ii-1));
[idx_row, idx_col] = ind2sub(size(M), idx_lst);

nicht einfach
Code:
[idx_row, idx_col] = find(M == r(ii-1));

geschrieben habe. Confused

Grüße
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
HalloGemeinde

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2014, 17:39     Titel: Ähnliche Frage
  Antworten mit Zitat      
Hallo liebe Gemeinde,

ich habe eine ganz ähnliche Frage.

ich habe ebenfalls einen Vektor.

Code:


Zahlen = [20     18;
    33     54;
    89     63;
    45     77;
    99     47;];
 



Ziel ist es nun, dass Matlab zwischen den Spalten die Werte so austauschen soll, dass für die beiden Spalten der mögl. identische Mittelwert herauskommt.

Hätte jemand eine Anregung für mich? Sad(

LG
Peter
 
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.