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

min und max

 

HerrDaniel
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 01.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2013, 05:40     Titel: min und max
  Antworten mit Zitat      
Hallo,

folgendes Problem:
ich versuche die Zeilen vom Maximum und Minimum herauszufinden.

Ich benutze dafür:

[maxwerte, maxzeilen] = max(a(b==3));

[minwerte, minzeilen]=min(a(a~=0 & b==3));

die werte von max und min scheinen richtig aber wenn ich dann in den a Vektor in die Zeile die das Ergebnis sagt schaue ist es manchmal richtig und manchmal falsch. Ich benutze verschiedene Vektoren von a!

Kann mir einer sagen warum?
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 19.07.2013, 08:20     Titel:
  Antworten mit Zitat      
2 numerische Vermutungen:

Die Maxima max(a(b==3)) sind scheinbar gleich, numerisch ist aber ein unerwarteter Punkt doch EPS größer.

b==3 ergibt unerwartete Ergebnisse weil das bei Vergleichen zwischen DOUBLE Zahlen nun mal so passieren kann. Sind denn b alles ganzzahlige Werte? Kann man die dann nicht als Integervariablen definieren?

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
HerrDaniel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 01.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2013, 09:02     Titel:
  Antworten mit Zitat      
also b sind nur ganze zahlen von 0 bis 6 aber als double Wert gespeichert.
Wie definiere ich die B zahlen als Integer? muss ich dann a auch als integer ändern?
a sind zwischen 0 bis 200 also double wert und mit einem punkt getrennt z.B. 134.8800

Aber wieso ist der max Wert richtig aber wenn ich dann in die Zeile gucke steht was anderes.

a und b haben jeweils nur eine Spalte aber dafür 100000 Zeilen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 19.07.2013, 09:30     Titel:
  Antworten mit Zitat      
lauffähiger code der den fehler reproduziert wäre nicht schlecht.
Private Nachricht senden Benutzer-Profile anzeigen
 
HerrDaniel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 01.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2013, 09:53     Titel:
  Antworten mit Zitat      
der Code ist doch in meiner Frage!!
die Vektoren hab ich gerade beschrieben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 19.07.2013, 10:07     Titel:
  Antworten mit Zitat      
ja und dein oben gelieferte code funktioniert bei mir einwandfrei und liefert genau das was ich erwarte. darum gehe ich davon aus das du einen fehler bei der weiteren benutzung machst. deshalb frage ich nach code der den fehler reproduziert. is ja nicht so das ich dich nur damit nerfen will ^^
wahrscheinlich versuchst du maxzeilen in den originalvektor einzusetzen. du hast aber maxzeilen von einem temporären vektor a(b==3) bestimmt und auf diesen bezihen sich auch die zeilen. sowas ist aber nur ersichtlich wenn du code postest der den fehler auch wirklich reproduziert. sonst rate ich hier nur rum
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.07.2013, 10:11     Titel: Re: min und max
  Antworten mit Zitat      
Hallo HerrDaniel,

Zunächst kann man in 99.999% der Fälle davon ausgehen, dass das von Matlab geliferte Ergebnis nicht falsch ist. Bugs von so grundlegenden Funktionen wären nämlcih längst gefixt worden.

Zitat:
Code:
[maxwerte, maxzeilen] = max(a(b==3));

die werte von max und min scheinen richtig aber wenn ich dann in den a Vektor in die Zeile die das Ergebnis sagt schaue ist es manchmal richtig und manchmal falsch.

So weit ich die ungefähre Beschreibung verstehe, suchst Du in den Zeilen von "a". Die werden aber gar nicht im Programm gefunden, sondern nur die Zeilen von "a(b==3)". "maxzeilen" enthält die Zeilen-Index bzgl dieses eventuell gekürzten Vektors. Wenn also irgendwo vor dem Maximum ein b ~= 3 ist, wird den Index in bezug auf "a" den falschen Wert liefern.

Dies würde auf Anhieb klarer werden, wenn Du den relevanten Code postest andstatt zu beschreiben, was er erreichen soll. Die Bugs liegen meistens in der Implementierung und nicht in der Absicht des Autors.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
HerrDaniel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 01.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2013, 10:28     Titel:
  Antworten mit Zitat      
Code:
[maxwerte, maxzeilen] = max(a(b==3))

maxwerte =

  159.5000


maxzeilen =

      239209


a und b werden über die import Funktion in das Programm hinein geladen.

mehr Code gibt es nicht.

Das Problem ist jetzt das in Zeile 239209 73 steht und nicht 159.5000!
Wieso?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 19.07.2013, 10:31     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
wahrscheinlich versuchst du maxzeilen in den originalvektor einzusetzen. du hast aber maxzeilen von einem temporären vektor a(b==3) bestimmt und auf diesen bezihen sich auch die zeilen.

hast du gelesen was wir geschrieben haben ?
Zitat:
Das Problem ist jetzt das in Zeile 239209 73 steht und nicht 159.5000!
ich wette du guckst im falschen vektor. das ist aber aus deinem code nicht ersichtlich.
Private Nachricht senden Benutzer-Profile anzeigen
 
HerrDaniel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 01.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2013, 10:35     Titel:
  Antworten mit Zitat      
ich schaue in den a Vektor dort will ich doch wissen in welcher Zeile der Wert steht.

der Vektor maxzeilen wird doch nur erzeugt und dann benutze ich ihn doch überhaupt nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
HerrDaniel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 01.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2013, 10:37     Titel:
  Antworten mit Zitat      
ich benutze keinen code zum nachschauen. ich schaue in den Workspace in den Vektor rein und scrolle zur der Zeile!
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 19.07.2013, 10:38     Titel:
  Antworten mit Zitat      
sihst du und jan und ich haben dich schon auf den fehler hingewiesen den du begehst.
winkow hat Folgendes geschrieben:
wahrscheinlich versuchst du maxzeilen in den originalvektor einzusetzen. du hast aber maxzeilen von einem temporären vektor a(b==3) bestimmt und auf diesen bezihen sich auch die zeilen.

wenn du den index im orignal vektor a willst musst du den erst noch bestimmen zb mit
Code:
.
Private Nachricht senden Benutzer-Profile anzeigen
 
HerrDaniel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 01.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2013, 10:40     Titel:
  Antworten mit Zitat      
gut ich verstehe es nicht, könntet ihr bitte nochmal meinen Fehler erklären und vor allem wie ich es richtig machen muss!
danke
Private Nachricht senden Benutzer-Profile anzeigen
 
HerrDaniel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 01.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2013, 10:43     Titel:
  Antworten mit Zitat      
ok den Fehler habe ich gerade selber verstanden. könnt ihr mir auch die Lösung verraten wie ich jetzt wieder die Zeile finde die ich eigentlich suche um damit weiter zu arbeiten!?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 19.07.2013, 10:45     Titel:
  Antworten mit Zitat      
Code:
[maxwerte, maxzeilen] = max(a(b==3))

du bestimmst hier den maxwert und die maxzeilen vom vektor a(b==3).
a(b==3) ist aber nicht a sondern in diesem fall eine temporäre matrix mit nur den einträgen aus a bei denen b==3 ist. das haben jan und ich auch schon gesagt.
was du meinst ist
Code:
a=rand(10000,1);
b=randi(7,10000,1)-1;
maxwerte=max(a(b==3));
maxzeilen=find(a==maxwerte);
minwerte=min(a(a~=0 & b==3));
minzeilen=find(a==minwerte);

deshalb haben jan und ich auch so oft nachgefragt weil dein oben beschriebener code genau das macht was er soll. du aber danach deinen fehler machst. das ist aber nicht ersichtlich aus deinen ersten beschreibungen. darum habe ich nach code gefragt der den fehler reproduziert.
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 - 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.