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

Zeilenausgabe, an den Stellen an den Matrizen identisch sind

 

Shanox
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.08.2018, 16:24     Titel: Zeilenausgabe, an den Stellen an den Matrizen identisch sind
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine Matrix mit dem Namen Suchmatrix und eine Matrix A. Die Suchmatrix hat 2 Spalten und 3303 Zeilen. Die Matrix A hat 3 Spalten und 4400 Zeilen.

Ausschnitt von Suchmatrix:

Code:

   86.0000    0.2000
   87.0000    0.2000
   88.0000    0.2000
   89.0000    0.2000
   90.0000    0.2000
    0          0.4000
    1.0000    0.4000
    2.0000    0.4000
    3.0000    0.4000
 


Ausschnitt von A:

Code:

   35.0000   -1.8000    1.0000
   28.0000   -1.6000    1.0000
   23.0000   -1.6000    1.0000
   17.0000   -0.2000    3.0000
   15.0000    0.8000    1.0000
   18.0000    1.0000    1.0000
   22.0000    0.8000    1.0000
   25.0000    0.2000    1.0000
 


Ich möchte jetzt die Matrix A daraufhin überprüfen, ob die Zeilen 1-3303 der Suchmatrix in der Matrix A vorhanden sind. Wenn dies der Fall ist, möchte ich die Nummer der Zeile von A wissen.

Beispiel:
-1. Zeile der Suchmatrix wird aufgerufen
-es wird überprüft in welchen Zeilen die Suchmatrix identisch mit der 1. und 2. Spalte der Matrix A ist
-die Nummer der Zeile von Matrix A wird ausgegeben
-2. Zeile der Suchmatrix wird aufgerufen
-usw...

Ich habe versucht das Problem über eine for-Schleife und den find-Befehl zu lösen.

Code:
for z =1:length(Suchmatrix);
    tmp7=Suchmatrix(z,1);
    tmp8=Suchmatrix(z,2);  
    Kombination=[tmp7,tmp8];

    [row,col]=find(A(:,1)==tmp7 & A(:,2)==tmp8);

    disp(Kombination)
    disp(row)
 end


Die Ausgabe soll so aussehen:

Code:

55     0
         724
         762
         845
        1555
        1556
        3849
        4158
        4163
 


Die Kombination 55, 0 (Zeile z aus Suchmatrix), kommt in A in den Zeilen 724, 762, 845, 1555... vor.

Der Code funktioniert auch soweit und liefert mir für einige Zeilen richtige Ergebnisse. Leider werden mir nicht alle Zeilen ausgegeben. Wenn ich mir "von Hand" eine Zeile in A aussuche, mir die Zeilennummer merke und in der Ausgabe bei der entsprechenden Kombination von tmp7 und tmp8 nachschaue, finde ich diese Zeile dort meist nicht.

Schaue ich mir jedoch "andersrum" eine Zeile in der Ausgabe an, merke mir die Kombination aus tmp7 und tmp8 und suche dann in der Matrix A danach, stelle ich fest, dass mir die Ausgabe die richtige Zeilennummer genannt hat.

Ich hoffe mein Problem ist ausreichend beschrieben und ihr könnt mir helfen. Nehmt bitte Rücksicht, bin Matlab Anfänger Very Happy

Grüße und im Voraus Dankeschööön,
Shanox
Private Nachricht senden Benutzer-Profile anzeigen


Shanox
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.08.2018, 16:52     Titel:
  Antworten mit Zitat      
Ich konnte das Problem lösen, indem ich im find-Befehl nicht ==, sondern einen Bereich mit > und < verwendet habe. Warum dies mein Problem gelöst hat weiß ich zwar nicht, aber jetzt funtkionierts. Very Happy
Danke, wenn sich trotzdem jemand die Mühe gemacht hat alles zu lesen Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.08.2018, 16:58     Titel:
  Antworten mit Zitat      
Hallo,

bitte bei der Wahl der Beispiele auf die Sinnhaftigkeit achten. Die Suchmatrix und A haben doch gar nichts gemeinsam?

Das im zweiten Beitrag genannte Problem kann entstehen, wenn die Zahlen in einer der Matrizen durch Berechnungen entstanden sind. Dabei kann es durch das Binärsystem minimale Ungenauigkeiten geben, z.B.
Code:
0.1 + 0.1 + 0.1 == 0.3
0.1 + 0.1 + 0.1 - 0.3


Im übrigen sollte sich das ganze mit ismembertol lösen lassen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.