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

Maximal Werte aus Tabelle unter Beachtung einer 2. Spalte

 

student_123
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 14.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2019, 13:20     Titel: Maximal Werte aus Tabelle unter Beachtung einer 2. Spalte
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine Tabelle, aus der ich maximale Werte aus der Spalte 2 in Abhängigkeit von Spalte 1 erhalten möchte. Bezogen auf das folgende Beispiel möchte ich das Maxmium des Wertes 9, 10, 11 usw erhalten.
9 18
9 20
9 12
10 16
10 25
11 13
11 26
… …

Bisher habe ich folgendes versucht:
Code:
a(:,1) = sort;
a(:,2) = gewicht;

i = 1;
n = 9;
 for i = 1:1000
     for n = 9:60
     if a(i,1) == n
         p = max(a(:,2));
     end
     end
     txmax = t(p);
 end


als Fehlermeldung erhalte ich folgendes:
Zitat:
Undefined operator '==' for input arguments of type 'table'.

Error in Gewicht_max (line 16)
if a(i,1) == n


Wie kann ich vorgehen, damit jedem Wert n der maximale wert p zugeordnet wird, die Wertepaare möchte ich anschließend wieder in einer Tabelle speichern.


Viele Grüße
Student_123
Private Nachricht senden Benutzer-Profile anzeigen


student_123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 14.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2019, 13:37     Titel:
  Antworten mit Zitat      
Was ich noch ergänzen wollte:

Ich habe bereits das ganze mit nur '=' probiert, allerdings kommt dann die nächste Fehlermeldung, dass das nicht ginge.
Darum ist meine Frage an der Stelle eher, wie ich meine if-Bedingung anders formulieren kann, wenn ich table habe.

Viele Grüße
Student_123
Private Nachricht senden Benutzer-Profile anzeigen
 
warawa
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 15.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2019, 13:47     Titel:
  Antworten mit Zitat      
Ich bin selber kein Matlab Profi und mir ist nicht ganz klar was du genau mit dem Code bewirken willst.

Aber wenn du immer die 1. Spalte 9-60 durchgehen willst und testen willst ob in der zelle eine 9 steht solltest du die for schleifen tauschen.
Die Initialisierung von i und n vor der 1. for schleife ist unnötig.
Zudem wenn du Wissen willst was das maximum von den 9er ist solltest du nicht max(a(:,2)) machen , da du sonst von den anderen werten (10-60) das maxima raussuchst. Ich würde immer einen test machen ob die zahl größer ist.

Also der Code schaut meiner Meinung nach so besser aus:

Code:

a(:,1) = sort;
a(:,2) = gewicht;

max = 0

 for n = 9:60
     for i = 1:1000
         if (a(i,1) == n)
             if (a(i,2) < max)
             p = max
             end
         end
     end
     %keine ahnung was die zeile bewirken soll
     txmax = t(p);
 end
 


Ich hoffe ich konnte irgendwie helfen
Private Nachricht senden Benutzer-Profile anzeigen
 
student_123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 14.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2019, 14:12     Titel:
  Antworten mit Zitat      
Hallo warawa,

vielen Dank für deine schnelle Rückmeldung. ich bin noch matlab-neuling und freu mich über jeden Tipp.

n steht für einen Tag, somit möchte ich jedem Tag einen maximalen Wert zuordnen und anschließend eine kleine Tabelle haben, in der dann steht (bezogen auf obiges Besipiel):

9 20
10 25
11 26

Was ich leider nicht ganz verstehe, wieso du erst sagst, max = 0? an der Stelle müsste dann der 1.Eintrag aus Zeile 1 stehen, mit dem verglichen werden soll?


viele Grüße
Student_123
Private Nachricht senden Benutzer-Profile anzeigen
 
warawa
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 15.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2019, 14:27     Titel:
  Antworten mit Zitat      
Du hast recht da ist ein kleiner Fehler drinnen ich hab das nur schnell geschrieben da passiert sowas leicht mal entschuldigung

Code:

a(:,1) = sort;
a(:,2) = gewicht;


 for n = 9:60
     max = 0
     for i = 1:1000
         if (a(i,1) == n)
             if (a(i,2) < max)
             max = a(i,2)
             end
         end
     end
     %keine ahnung was die zeile bewirken soll
     txmax = t(p);
 end
 


und wenn du jetzt das maximum von 9 ausgeben willst, musst du einen Code an der stelle von txmax = t(p) schreiben (denn dort ist im 1.Durchlauf max == maximum von 9).

Zu deiner Frage ich initialisierte m = 0 weil ich vermute, dass die Werte in Spalte 2 nicht negativ werden können, und somit ist 0 das kleinst mögliche.
Dann vergleiche ich max mit dem 1.Wert (also a(1,2) und teste ob der wert > 0 ist, dann kommt der 2.Wert ( a(2,2)) und wirt getestet ob der wert > mas ist und so weiter
Private Nachricht senden Benutzer-Profile anzeigen
 
student_123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 14.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2019, 14:58     Titel:
  Antworten mit Zitat      
Vielen Dank, ich habe deinen Vorschlag angenommen und soweit umgeschrieben, dass es an sich funktioniert.

Code:
max = 0 ;

 for n = 9:60
     for i = 1:1000
         if (a.Var1(i) == n)
             if (a.Var2(i) >= max)
             max = a.Var2(i) ;
             end
              tabelle(:,1) = n;
              tabelle(:,2) = max;
         end
     end
 end


mein Problem ist jetzt noch, dass mir in der Tabelle nur das größte n=60 und in Spalte 2 der Maximalwert angeben wird. Hast du noch einen Tipp, wie ich n=9, n=10, n=11, … mit jeweiligen Maximalwert eintragen kann?

Viele Grüße
Student_123
Private Nachricht senden Benutzer-Profile anzeigen
 
warawa
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 15.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2019, 15:16     Titel:
  Antworten mit Zitat      
Dein Fehler ist hier

tabelle(:,1) = n;
tabelle(:,2) = max;

du überschreibst die tabelle immer wieder mit einem höheren Wert.
wenn du dir mal einen Haltepunkt setzt und Schritt für Schritt deine tabelle anschaust fällt dir auf das da immer die richtigen n und maximas von 9 10 11 ... reingeschrieben werden aber mit jedem höheren n wieder neu überschrieben werden

Ich muss gleich wohin, deshalb kann ich nicht genau sagen wie man es richtig macht, aber wenn ich Zeit hab versuche ich mich zu melden

PS: schau mal meinen neuen code an ich hab max = 0 unter die 1. Schleife neu gelegt, da es sein könnte das das maximum an tag 10 kleiner ist als an tag 9 und du sonst für tag 10 das maximum von tag 9 setzt.
Deshalb wird das max nach jedem Tag wieder auf 0 gesetzt
Private Nachricht senden Benutzer-Profile anzeigen
 
student_123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 14.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2019, 15:56     Titel:
  Antworten mit Zitat      
Hi,

perfekt! Danke für den Tipp mit max = 0 an der richtigen Stelle. Mein Tabellenproblem habe ich, wie folgt, gelöst:

tabelle(n,1) = n(:,1);
tabelle(n,2) = max(:,1);


Viele Grüße
Student_123
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.