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

Unterschiedliche Zeilen aus Matrix auslesen

 

Carolin.
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2020, 20:22     Titel: Unterschiedliche Zeilen aus Matrix auslesen
  Antworten mit Zitat      
Hallo,

ich habe eine Matrix mit 3 Spalten und x Zeilen. In dieser sind X-,Y-Koordinaten und Spannungen enthalten. Da die Matrix mit den Koordinaten eine Fläche beschreibt, sind zu mehreren identischen Y-Werten unterschiedliche X-Werte und Spannungen zugewiesen (siehe Tabelle unten). Jetzt möchte ich jeweils die Zeilen auslesen, in der für jeden Y-Wert die größte Spannung enthalten ist. Z.B. 0,13 0,01 180,22; dann 0 0 165,96; dann 0,62 -0,01 117,01 usw. Kann mir jemand sagen, wie diese neue Matrix am einfachsten zu erstellen ist?
Weiter beginnt die Tabelle schon mit Y-Werten >0,01. Diese möchte ich gerne vorher löschen, oder erst ab da mit der Selektierung anfangen.

1,33 0,01 86,04
0,91 0,01 98,12
0,83 0,01 101,76
0,77 0,01 105,58
0,71 0,01 109,57
0,65 0,01 113,75
0,44 0,01 141,1
0,13 0,01 180,22
1,21 0 88,85
0,58 0 121,14
0,55 0 124,56
0,53 0 126,16
0,51 0 131,02
0 0 165,96
-0,09 0 150,9
-0,19 0 140,72
-0,29 0 134,43
-0,39 0 129,99
-0,50 0 126,57
-0,60 0 123,87
-0,71 0 121,68
-0,82 0 119,83
-0,94 0 118,23
-1,06 0 116,8
-1,18 0 115,54
-1,30 0 114,43
-1,43 0 113,45
-1,56 0 112,55
-1,69 0 111,73
-1,82 0 110,97
-1,96 0 110,27
-2,11 0 109,64
-2,25 0 109,06
-2,40 0 108,53
-2,55 0 108,01
-2,71 0 107,49
-2,87 0 107,03
-3,04 0 106,61
-3,21 0 106,22
-3,38 0 105,83
-3,55 0 105,45
-3,74 0 105,1
-3,92 0 104,76
-4,11 0 104,45
-4,31 0 104,15
-4,51 0 103,86
-4,71 0 103,59
-4,92 0 103,33
1,81 -0,01 79,68
1,64 -0,01 81,78
1,11 -0,01 91,85
1,01 -0,01 95,02
0,93 -0,01 98,34
0,72 -0,01 109,14
0,67 -0,01 113
0,62 -0,01 117,01
1,49 -0,02 84,11
0,85 -0,02 101,81
0,78 -0,02 105,41
0,59 -0,02 120,19
0,55 -0,02 124,01
0,53 -0,02 126,23
0,46 -0,02 133,99
1,35 -0,03 86,65
1,23 -0,03 89,38
0,63 -0,03 115,89
0,28 -0,03 162,25
1,13 -0,04 92,27
1,03 -0,04 95,31
0,94 -0,04 98,49
0,87 -0,04 101,78
0,8 -0,04 105,17
0,74 -0,04 108,65
0,68 -0,04 112,21
0,55 -0,04 124,18
0,51 -0,04 126,47
1,84 -0,05 80,43
1,67 -0,05 82,48
0,6 -0,05 118,86
1,51 -0,06 84,75
1,38 -0,06 87,22
0,7 -0,06 111,43
0,65 -0,06 114,8
1,25 -0,07 89,85
1,15 -0,07 92,64
1,05 -0,07 95,55
.
.
.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

Zitat:
Kann mir jemand sagen, wie diese neue Matrix am einfachsten zu erstellen ist?

Versuch es mal mit findgroups und splitapply .

Zitat:
Weiter beginnt die Tabelle schon mit Y-Werten >0,01. Diese möchte ich gerne vorher löschen, oder erst ab da mit der Selektierung anfangen.

Code:
M ( M(:,2) > 0.01, :) = [];


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
 
Carolin.
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2020, 09:45     Titel:
  Antworten mit Zitat      
Hallo,

die Idee mir dieser Vorgehensweise hat mich leider nicht zu dem Ziel gebracht, welches ich mir erhofft hatte. Jetzt eine andere Vorgehensweise.

Ich habe meine Tabelle nun nach Spalte 3 sortiert. Jetzt möchte ich bei Spalte 2 alle Zeilen löschen, die kleiner bzw. gleich dem Wert in der Zeile davor sind (es handelt sich um negative Einträge).
Ist das irgendwie möglich?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
die Idee mir dieser Vorgehensweise hat mich leider nicht zu dem Ziel gebracht, welches ich mir erhofft hatte. Jetzt eine andere Vorgehensweise.

Was genau hast du versucht und wie weicht das Ergebnis vom erhofften ab?

Zitat:
Jetzt möchte ich bei Spalte 2 alle Zeilen löschen, die kleiner bzw. gleich dem Wert in der Zeile davor sind (es handelt sich um negative Einträge).
Ist das irgendwie möglich?

Selbes Prinzip wie im vorherigen Vorschlag:
Code:
M ( [false; diff(M(:,2)) <= 0, :) = [];


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
 
Carolin.
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2020, 17:23     Titel:
  Antworten mit Zitat      
Hallo,

ich habe diesen Code eingegeben:
Code:
sig_1SPVq2 = sig_1SPVq1(false(diff(sig_1SPVq1(:,2)))<=sig_1Vx,:)

und erhalte folgende Fehlermeldung:
Error using false
Size vector should be a row vector with real elements.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.09.2020, 18:23     Titel:
  Antworten mit Zitat      
Hallo,

da fehlte bei mir ein ]
Code:
M ( [false; diff(M(:,2)) <= 0] , :) = [];


Ist sig_1Vx ein Skalar?
Wenn du das mit den Klammern und dem Strichpunkt übernimmst, sollte es dann klappen.

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
 
Carolin.
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2020, 19:01     Titel:
  Antworten mit Zitat      
Hallo,

ich habe mir das gerade noch einmal angeschut und so ganz das, was ich brauche ist es noch nicht.

Das ist meine aktuelle Tabelle:
x-coor y-coor sig_1
0,26 0,03 180,85
0,13 0,01 180,22
0,00 0,00 165,96
0,38 0,08 162,41
0,28 -0,03 162,25
0,16 -0,07 160,06
0,04 -0,10 153,44
0,41 0,05 151,51
-0,09 0,00 150,90
-0,07 -0,11 146,04
0,19 -0,16 141,33
0,32 -0,11 141,31
0,44 0,01 141,10
-0,19 0,00 140,72
0,07 -0,19 139,91
-0,17 -0,11 139,35
-0,05 -0,21 137,32
0,50 0,13 136,75
-0,29 0,00 134,43
-0,15 -0,22 134,35


Ich möchte es erreichen, dass sie wie folgt aussieht:
x-coor y-coor sig_1
0,26 0,03 180,85
0,13 0,01 180,22
0,00 0,00 165,96
0,28 -0,03 162,25
0,16 -0,07 160,06
0,04 -0,10 153,44
-0,07 -0,11 146,04
0,19 -0,16 141,33
0,07 -0,19 139,91
-0,05 -0,21 137,32
-0,15 -0,22 134,35


Ich möchte die Zeilen löschen, sodass die Werte der Spalte mit den y-coor immer kleiner werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.09.2020, 19:28     Titel:
  Antworten mit Zitat      
Hallo,

auch das ist möglich:
Code:
M ( M(:,2) > cummin(M(:,2)) , :) = [];


Ich darf aber darauf hinweisen, dass du geschrieben hast, dass du die Zeilen, in denen Spalte 2 kleiner als in der Zeile davor ist, löschen willst. Stattdessen wolltest du aber anscheinend alle Zeilen löschen, in denen Spalte 2 nicht kleiner als alle vorherigen Werte dieser Spalte sind. Das ist ein ziemlicher Unterschied.

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
 
Carolin.
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2020, 19:50     Titel:
  Antworten mit Zitat      
hm, das ist irgendwie immer noch nicht das was ich suche.

Vielleicht noch einmal etwas deutlicher nur mit der Spalte um die es geht:
0,03
0,01
0,00
0,08
-0,03
-0,07
-0,10
0,05
0,00
-0,11
-0,16
-0,11
0,01
0,00
-0,19
-0,11
-0,21
0,13
0,00
-0,22
-0,11

die zuvor abgebildete Spalte ist mein IST-Zustand. Die Spalte anschließend gibt meinen SOLL-Zustand wieder:
0,03
0,01
0,00
-0,03
-0,07
-0,10
-0,11
-0,16
-0,19
-0,21
-0,22

Die Werte sollen immer kleiner werden. Die Zeilen zwischen diesen Werten sollen gelöscht werden
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.09.2020, 21:26     Titel:
  Antworten mit Zitat      
Hallo,

der Code liefert genau die Ergebnisse, die du gewollt hast.
Insbesondere ist die zweite Spalte genau das, wie du sie beschreibst.

Code:
M = [0.26 0.03 180.85
0.13 0.01 180.22
0.00 0.00 165.96
0.38 0.08 162.41
0.28 -0.03 162.25
0.16 -0.07 160.06
0.04 -0.10 153.44
0.41 0.05 151.51
-0.09 0.00 150.90
-0.07 -0.11 146.04
0.19 -0.16 141.33
0.32 -0.11 141.31
0.44 0.01 141.10
-0.19 0.00 140.72
0.07 -0.19 139.91
-0.17 -0.11 139.35
-0.05 -0.21 137.32
0.50 0.13 136.75
-0.29 0.00 134.43
-0.15 -0.22 134.35];

M ( M(:,2) > cummin(M(:,2)) , :) = [];

M_soll = [0.26 0.03 180.85
0.13 0.01 180.22
0.00 0.00 165.96
0.28 -0.03 162.25
0.16 -0.07 160.06
0.04 -0.10 153.44
-0.07 -0.11 146.04
0.19 -0.16 141.33
0.07 -0.19 139.91
-0.05 -0.21 137.32
-0.15 -0.22 134.35];

isequal(M, M_soll)

col2_soll = [0.03
0.01
0.00
-0.03
-0.07
-0.10
-0.11
-0.16
-0.19
-0.21
-0.22];
isequal(M(:,2), col2_soll)


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
 
Carolin.
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2020, 23:41     Titel:
  Antworten mit Zitat      
Hallo,

ich habe den Code zunächst so einfügt:

Code:
sig_1SVPq2 = sig_1SPVq1(sig_1SPVq1(:,2) > cummin(sig_1SPVq1(:,2)) , :) ;


damit hat es nicht funktioniert.

Wenn ich den Code jedoch so eingebe:

Code:
sig_1SPVq1(sig_1SPVq1(:,2) > cummin(sig_1SPVq1(:,2)) , :) = [];


funktioniert alles.

Leider wird mir in der Spalte mit den y-coor immer noch ein Wert doppelt ausgegeben. Kann man über einen Befehl doppelte Werte löschen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.09.2020, 08:54     Titel:
  Antworten mit Zitat      
Hallo,

deine beiden Ansätze sind genau entgegengesetzt. Im ersten behältst du die Zeilen, die du im zweiten löschst. Wenn du Code abänderst und dann damit Probleme hast, poste bitte auch den Code. Man kann ja nicht erahnen, was du da machst.

Zitat:
Kann man über einen Befehl doppelte Werte löschen?

Entweder den letzten Vorschlag so anpassen, dass mit dem cummin aller vorherigen Werte verglichen wird oder den Ansatz von 17.9., 18:23 anpassen.

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.