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

Vergleichen von zwei Matrizen

 

Perilun
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2018, 02:17     Titel: Vergleichen von zwei Matrizen
  Antworten mit Zitat      
Hallo,

ich habe eine Frage, wie kann man zwei Vektoren vergleichen und die Zahl welche in beiden Matrizen am höchsten steht bestimmen? Anschließend diese Zeile leeren.

Ein Beispiel:

A=[6; 2; 9; 8; 3; 7; 1]

B=[1; 7; 9; 4; 3; 8; 6]

C(1,1)=9;

Anschließend:
A=[6; 2; 8; 3; 7; 1]

B=[1; 7; 4; 3; 8; 6]

Das alles so lange bis A und B leer sind!
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: 22.07.2018, 07:21     Titel:
  Antworten mit Zitat      
Hallo Perliun,

als erstes würde ich beide Vektoren zu einem zusammenfügen und dann das Maximum raussuchen. Zum Beispiel so:

Code:
A=[6; 2; 9; 8; 3; 7; 1];
B=[1; 7; 9; 4; 3; 8; 6];
con = [A; B];

for k = 1:length(unique(con))
    C = max(con);
    A(A==C) = [];
    B(B==C) = [];
    con(con==C) = [];
end


Grüße
Jonas

PS: Falls du einfach 2 leere Vektoren haben möchtest geht das sogar einfacher:
Code:
A = [];
B = [];

Kleiner Spaß Laughing
_________________

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
 
Perilun
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2018, 10:35     Titel:
  Antworten mit Zitat      
Das Ziel ist folgendes Beispiel zu lösen:

Es gibt zwei Matrizen:

A=[0.1 3;0.3 1;0.6 2]

B=[0.7 2; 0.8 3; 0.9 1]


Diese Matrizen sollen jeweils nach der ersten Spalte sortiert werden. Die zweite Spalte soll nicht verändert werden. Bei der Matrix A sodass es der größte Wert oben steht, bei der Matrix B soll der kleinste Wert oben stehen. Anschließend sollen die beiden zweiten Spalten verglichen werden. Es soll herausgefunden werden, welche Nummer am höchsten in der Reihenfolge steht.

Die gefundene Nummer und die entsprechenden Werte aus den ersten Spalten sollen in eine Zeile einer Matrix C übertragen werden und aus A und B gelöscht werden. Dieser Vorgang soll wiederholt werden bis A und B leer sind.
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: 22.07.2018, 11:03     Titel:
  Antworten mit Zitat      
Hallo Perilun,

die Matrizen sortieren kannst du mit Hilfe von sort :

Code:
A = [0.3 3;0.1 1;0.6 2];
B = [0.7 2; 0.8 3; 0.9 1];

[a_res,a_idx] = sort(A(:,1));
A = A(a_idx,:);
[b_res,b_idx] = sort(B(:,1));
B = flipud(B(b_idx,:));


Was du mit folgendem Satz meinst ist mir noch nicht ganz klar.
Zitat:
Anschließend sollen die beiden zweiten Spalten verglichen werden. Es soll herausgefunden werden, welche Nummer am höchsten in der Reihenfolge steht.

Was heißt "am höchsten in der Reihenfolge steht"? Ob die oberste Zahl in Spalte 2 der Matrix A größer/keiner als jene der Matrix B ist? Oder welche Zahl jeweils in der ersten Zeile & 2. Spalte der Matrizen steht?
Wie soll denn C bei deinem genannten Beispiel oben am Schluss aussehen?

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
 
Perilun
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2018, 22:19     Titel:
  Antworten mit Zitat      
Zitat:
Anschließend sollen die beiden zweiten Spalten verglichen werden. Es soll herausgefunden werden, welche Nummer am höchsten in der Reihenfolge steht.


Mit diesem Satz meinte ich, dass es herausgefunden werden soll welche Zahl ist in den beiden Spalten (sowohl in A, wie in B) am höchsen.

Beispiel:

a=[1; 2; 3; 4; 5; 6; 7]

b=[7; 2; 4; 1; 3; 6; 5]

Die Zahl, die am höchsten Steht wäre die 2, weil die 1 in b an vierter Stelle steht und die 7 in a an siebter!
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: 23.07.2018, 08:10     Titel:
  Antworten mit Zitat      
Ok,

du willst also die Summe der Positionen der Zahlen in den beiden Vektoren vergleichen und die Zahl, die der niedrigste Summe entspricht, auslesen und aus den beiden Vektoren löschen?
Oder willst du dir für jede Zahl (i) die Positionen pos_a_i und pos_b_i auslesen und dann schauen bei welcher Zahl das Maximum von pos_a_i und pos_b_i am kleinsten ist? (und diese dann auslesen und aus den Vektoren löschen)

Im ersten Fall:
Was passiert wenn 2 Zahlen die gleiche Summe haben?
In deinem Beispiel:
Code:
a=[1; 2; 3; 4; 5; 6; 7];
b=[7; 2; 4; 1; 3; 6; 5];


Als erste Zahl wird die zwei rausgenommen, dann die eins. Anschließend hat man folgende Vektoren:
Code:
a=[3; 4; 5; 6; 7];
b=[7; 4; 3; 6; 5];


Heißt die Summen der Positionen sind folgende:
Zahl 3 -> Summe = 4
Zahl 4 -> Summe = 4
Zahl 5 -> Summe = 8
Zahl 6 -> Summe = 8
Zahl 7 -> Summe = 6

Was soll jetzt passieren? Wird die drei oder die vier rausgenommen?


Gleiches im 2. Fall:
Bei deinem Beispiel wird erst die zwei rausgenommen, anschließend enthält man folgende Vektoren:
Code:
a=[1; 3; 4; 5; 6; 7];
b=[7; 4; 1; 3; 6; 5];

Man erhält die folgenden maximalen Positionen der Zahlen:
Zahl 1 -> Pos: 3
Zahl 3 -> Pos: 4
Zahl 4 -> Pos: 3
Zahl 5 -> Pos: 6
Zahl 6 -> Pos: 5
Zahl 7 -> Pos: 6

Wird jetzt die eins oder die vier rausgenommen?

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
 
Perilun
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2018, 10:08     Titel:
  Antworten mit Zitat      
Ich verstehe nicht wieso zwei Fälle??

Wenn zwei Zahlen die Gleiche Summe haben, dann soll der Wert, welcher in Matrix A besser positioniert ist vorgezogen werden!
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: 23.07.2018, 10:19     Titel:
  Antworten mit Zitat      
Weil ich nicht weiß was von beiden du jetzt genau machen willst? Das Vorgehen der ersten Frage, oder das der zweiten Frage??

Zitat:
du willst also die Summe der Positionen der Zahlen in den beiden Vektoren vergleichen und die Zahl, die der niedrigste Summe entspricht, auslesen und aus den beiden Vektoren löschen?
Oder willst du dir für jede Zahl (i) die Positionen pos_a_i und pos_b_i auslesen und dann schauen bei welcher Zahl das Maximum von pos_a_i und pos_b_i am kleinsten ist? (und diese dann auslesen und aus den Vektoren löschen)


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
 
Perilun
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2018, 10:57     Titel:
  Antworten mit Zitat      
Für mich klingt beides ähnlich. Ich tendiere aber zum ersten Lösungsvorshlag!
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: 23.07.2018, 11:02     Titel:
  Antworten mit Zitat      
Hallo,

die beiden Varianten liefern aber unterschiedliche Ergebnisse.

Es geht bestimmt auch schöner, aber hier eine Möglichkeit wie man Variante 1 lösen könnte:

Code:
zahlen = unique([a; b]);

n = 1;
while isempty(zahlen) ~= 1
    for k = 1 : length(zahlen)
        summe(k) = find(a == zahlen(k)) + find(b == zahlen(k));
    end
   
    C(n) = zahlen(find(summe == min(summe),1)); % Rausgenommene Zahlen
   
    a(find(a == zahlen(find(summe == min(summe),1)))) = [];
    b(find(b == zahlen(find(summe == min(summe),1)))) = [];
    zahlen(find(zahlen == zahlen(find(summe == min(summe),1)))) = [];
   
    n = n + 1;
    clear summe
end


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
 
Perilun
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2018, 12:58     Titel:
  Antworten mit Zitat      
Irgendwie funktioniert der Code bei mir nicht. Könntest du bitte auch die Ausgangswerte, die du benutzt angeben?
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: 23.07.2018, 13:04     Titel:
  Antworten mit Zitat      
Hallo,

ich habe deine beiden Vektoren benutzt. Anbei nochmal der Code (auch für die 2. Variante)

Code:
a = [1; 2; 3; 4; 5; 6; 7];
b = [7; 2; 4; 1; 3; 6; 5];


%% Variante 1
zahlen = unique([a; b]);

n = 1;
while isempty(zahlen) ~= 1
    for k = 1 : length(zahlen)
        summe(k) = find(a == zahlen(k)) + find(b == zahlen(k));
    end
   
    C(n) = zahlen(find(summe == min(summe),1)); % Rausgenommene Zahlen
   
    a(find(a == zahlen(find(summe == min(summe),1)))) = [];
    b(find(b == zahlen(find(summe == min(summe),1)))) = [];
    zahlen(find(zahlen == zahlen(find(summe == min(summe),1)))) = [];
   
    n = n + 1;
    clear summe
end


%% Variante 2
zahlen = unique([a; b]);

n = 1;
while isempty(zahlen) ~= 1
    for k = 1 : length(zahlen)
        maximum(k) = max([find(a == zahlen(k)) find(b == zahlen(k))]);
    end

    C(n) = zahlen(find(maximum == min(maximum),1));

    a(find(a == zahlen(find(maximum == min(maximum),1)))) = [];
    b(find(b == zahlen(find(maximum == min(maximum),1)))) = [];
    zahlen(find(zahlen == zahlen(find(maximum == min(maximum),1)))) = [];

    clear maximum
    n = n + 1;
end


Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable

Zuletzt bearbeitet von J0nas am 23.07.2018, 13:26, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Perilun
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2018, 13:13     Titel:
  Antworten mit Zitat      
Leider kann ich den zweiten Code nicht anwenden, weil er sich bei mir aufhängt!
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: 23.07.2018, 13:27     Titel:
  Antworten mit Zitat      
Uuups, war eine alte Version Embarassed
Hab die funktionierende oben rein kopiert. Sollte jetzt gehen.

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
 
Perilun
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2018, 14:20     Titel:
  Antworten mit Zitat      
DAnke für deine Antwort, wie kann man aber bei den folgenden Matrizen die entsprechenden Werte in der Gleichen Zeile mit dem entsprechendem integer Wert mit übertragen werden?

A=[0.1,2;0.6,9;0.7,10;0.4,6;0.8,3;0.9,1];
B=[0.3,1;0.8,10;0.6,3;0.9,6;0.22,9;0.82,2];
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.