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

max Funktion arbeitet nicht richtig

 

thomas0815
Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2010, 19:51     Titel: max Funktion arbeitet nicht richtig
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Problem mit der max Funktion. Ich habe einen Spaltenvektor mit 300 Elementen und aus diesen Elementen soll er mir das maximale Element raussuchen, was kleiner ist als eine bestimmte Zahl.

z.B.
max(V<=358.9606)

hierbei gibt mir Matlab das Element 1 aus, obwohl es den Wert 8000 hat, es gibt aber noch zig Elemente, die Werte < 8000 haben. Woran liegt das?


Grüße,
Thomas
Private Nachricht senden Benutzer-Profile anzeigen


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 30.08.2010, 20:18     Titel:
  Antworten mit Zitat      
Hallo,

weil (V<=358.9606) eine logische Operation ist, die nur Einsen und Nullen zurückgibt. Dabei ist der Maximalwert von einem logischen Vektor nunmal immer 1 und max gibt dir die Stelle der ersten eins im Vektor zurück.

Du könntest es ja z.B so machen (geht bestimmt noch eleganter):

Code:

V(V>358.9606) = 0;
max(V)
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 30.08.2010, 20:28     Titel:
  Antworten mit Zitat      
man kanns noch kompakter machen ;).


Code:

max(v(v<=358.9606));
 


nur bin jetzt verwirrt ist es "<" oder ">"

viele grüsse
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
thomas0815
Themenstarter

Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2010, 15:25     Titel:
  Antworten mit Zitat      
Hallo Forier,

wenn ich das so schreibe, wie du vorgeschlagen hast, dann gibt er mir nur 1en raus. Bei dem was ich zuerste geschrieben habe, war es so, dass der Index einiger Elemente richtig ausgegeben wurde. Wenn ich den Vektor dann jedoch mehr als als 126 Elemente gebe, dann funktioniert das nicht mehr richtig.

ich betreibe es in zwei for-Schleifen und habe es genau so geschrieben:

Code:
 [a_in1(i,j) b_in(i,j)]=max(V<=Wert_in(i,j));


Woran kann das nur liegen?

Zuletzt bearbeitet von thomas0815 am 31.08.2010, 16:02, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 31.08.2010, 15:35     Titel:
  Antworten mit Zitat      
Hallo,

also was moechtets du denn nun? In deimen ersten Post hasst du geschrieben, dass du 'das maximale Element raussuchen' moechtest, also einen bst Wert. Nun mehrere?

Am besten du gibst mal ein konkretes Beispiel, da Fouriers Loesung fuer die Frage in deinem Eingangspost passt.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
thomas0815
Themenstarter

Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2010, 16:06     Titel:
  Antworten mit Zitat      
Hallo,

ja, ich betreibe es in zwei for-Schleife - für jeden Wert_in(i,j) soll das max Element, was kleiner ist als der Wert heraus gesucht werden. Das funktioniert solange nicht mehr als 126 Elemente im Vektor V sind. Sind es mehr z.B. 400, dann steht bei bei b_in(i,j) für die i>126 immer nur noch Element 127 in jedem b_in(i,j) da ... keine Ahnung woran das liegt. Es wird einfach falsch ausgewertet --- bin langsam schon echt verzweifelt.

Code:
[a_in1(i,j) b_in(i,j)]=max(V<=Wert_in(i,j));


Grüße,
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 31.08.2010, 16:32     Titel:
  Antworten mit Zitat      
Hallo,

also 1. ist das wass du hingeschrieben hasst nicht mit dem von Fourier identisch:

deins :

Code:

[a_in1(i,j) b_in(i,j)] = max(V<=Wert_in(i,j));
 


Fouriers:

Code:

[a_in1(i,j) b_in(i,j)] = max(V(V<=Wert_in(i,j)));
 


Vielleicht liegt es ja schon daran. Ansonsten ist es natuerlich schwer nachzuvollziehen ohne die Werte zu kennen, die im Vektor V und Wert_in enthalten sind. Ich meine es koennte ja sein, dass ab i = 126 der Maximalwert des Therms V(V<=Wert_in(i,j)) wirklich immer an der Stelle 127 ist?

Vielleicht auch ein Problem mit dem Zahlenformat? Probier halt mal die Variablen a_in1 und b_in als double zu deklarieren ( double(a_in1(i,j)) ).

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
thomas0815
Themenstarter

Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2010, 17:03     Titel:
  Antworten mit Zitat      
Hallo Sco,

nein, es liegt nicht daran, dass der Code nicht identisch ist, ich habe beide Varianten ausprobiert. Der von Fourier gibt mir nur 1en aus.

Das der maximalwert immer auf das 127. Element fällt, kann auch nicht sein.
Das merkwürdige ist, wenn ich mein Programm durchlaufen lasse und dann einzelne Auswertungen dazu im command window mache, dann werden die richtigen indizes ausgegeben ... ich verstehe das nicht!
Private Nachricht senden Benutzer-Profile anzeigen
 
thomas0815
Themenstarter

Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2010, 17:25     Titel:
  Antworten mit Zitat      
Hallo Helfende,

ich habe das Problem gefunden. b_in war als int8 definiert ... ich blicke durch mein Programm schon nicht mehr so richtig durch.
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 31.08.2010, 17:41     Titel:
  Antworten mit Zitat      
Hallo,

hatte ich ja auch schon vermutet, da 127 eben gerade int8 ist Very Happy.

Aber trotzdem kann ich nicht nachvollziehen warum du diese Zeile verwendest:

Code:

[a_in1(i,j) b_in(i,j)] = max(V<=Wert_in(i,j));
 


Das macht fuer mich einfach keinen Sinn, da du immer das Maximun von 1 ermittelst und nur den Index der ersten 1 im Vektor bekommst.

Das waere genau das gleiche wie:

Code:

a_in1(i,j) = 1;
temp = V<=Wert_in(i,j);
b_in(i,j) = temp(1);
 


und das ist wirklich was du willst?

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
thomas0815
Themenstarter

Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2010, 18:43     Titel:
  Antworten mit Zitat      
nein, das ist nicht das was ich möchte,

aber dieser Code funktioniert tatsächlich für das was ich brauche. Es wird der Index des größten Elements aus V ausgegeben, das kleiner als der Wert ist. in a_in steht der Wert des Elements und in b_in der Index zu diesem Wert. Es wird nirgendwo 1 ausgegeben.

Grüße,
Thomas
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 - 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.