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

2. maximum einer zahlenreihe

 

andi_1
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2010, 15:20     Titel: 2. maximum einer zahlenreihe
  Antworten mit Zitat      
hallo leute,

wie kann ich mir den zweiten Maximalwert einer Zahlenreihe ausgeben lassen?

So dass ich sowohl die Position in der Zahlenreihe als auch den Wert angezeigt bekomme. Wie in folgendem Beispiel:

Code:

[maxwerte, maxzeilen] = max(zahlenreihe)
 


Gruß und Dank
Private Nachricht senden Benutzer-Profile anzeigen


Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 20.09.2010, 16:00     Titel:
  Antworten mit Zitat      
Hi,

Durchsuch den Vektor mit max so wie jetzt und lösche das erste Maximum und such dann nochmal. Wär jetzt meine einzige spontane Idee.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2010, 16:04     Titel:
  Antworten mit Zitat      
Auch hier gibt es sicher eine schönere Möglichkeit. Aber was mir als erstes einfallen würde sieht in etwa so aus:

Code:

maxi1 = max(zahlenreihe);   % 1. Maximum
pos_maxi1 = find(zahlenreihe == maxi1);    % Position des 1. Maximums

zahlenreihe_tmp = zahlenreihe;   % Um im folgenden die ursprüngliche Reihe nicht zu verändern
zahlenreihe_tmp(pos_maxi1) = 0;   % 1. Maximum gleich 0 setzen
maxi2 = max(zahlenreihe_tmp);    % Jetzt wird hier das zweite Maximum gefunden
pos_maxi2 = find(zahlenreihe_tmp == maxi2);   % Und hier die Position des zweiten Maximums

 


mfg

edit: mist, während ich getippt hab war einer schneller... Wink
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: 20.09.2010, 19:05     Titel:
  Antworten mit Zitat      
Hallo,

ich haette da noch ne etwas kuerzere und allgemeinere Loesung (wie waere es denn beim x-ten Maximum, da jedesmal alle werte davor zu loeschen ist wohl eher nicht das Mittel der Wahl Smile):

Code:

mat = rand([1 10]);
sortvalues = sort(mat,'descend');
secmax = sortvalues(2);
idx_secmax = find(mat==secmax);
 


MFG

Sco
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: 20.09.2010, 23:18     Titel:
  Antworten mit Zitat      
Hallo,

oder noch ein bisschen schneller:
Code:

mat = rand([1 10]);
[sortvalues, sortindex] = sort(mat, 'descend');
secmax = sortvalues(2);
idx_secmax = sortindex(2);  % Statt mit FIND den Wert suchen
 

Gruß, Jan
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: 21.09.2010, 00:03     Titel:
  Antworten mit Zitat      
...immer das letzte Wort der Jan Very Happy . Wobei da hätte ich auch selber drauf kommen können Confused

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2010, 08:19     Titel:
  Antworten mit Zitat      
Und schon hast du die schönere (und allgemeinere) Möglichkeit... Wink
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: 21.09.2010, 19:57     Titel:
  Antworten mit Zitat      
Hallo Sco,

Sco hat Folgendes geschrieben:
...immer das letzte Wort der Jan :D

Ja, stimmt schon. Und dann auch noch immer das gleiche:
- Das geht ohne EVAL/ASSIGNIN/EVALIN viel besser...
- Mehr Details: Fehlermeldung? Erwartung~=Ergebnis?
- Benutze CELLFUN mit den String-Befehlen.
- Siehe "help ...".
Ich sollte mir einen Stempel besorgen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
ichbindu
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 10.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2011, 22:09     Titel: max Wert auslesen
  Antworten mit Zitat      
Hallo,

habe ein ähnliches Problem.

Darum hier eine wirklich sehr vereinfachte Fragestellung:

Wie lese ich den Wert, bei dem c sein Maximum besitzt + Maximalwert, aus:

Code:
for x=[1:1:2]
   
    C=x+3
       
end

E=max(C) %??

%möchte irgendwie auslesen bei welchem x wert C sein maximum hat und X Wert +Maximum auslesen
 


Vielen Danke

Mfg
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: 24.01.2011, 22:39     Titel:
  Antworten mit Zitat      
Hallo,

da ist die Matlabhilfe sehr hilfreich:
Code:

test = [1 4 8 3 5 9 3 1];
[value,index] = max(test);

value == test(index) % ergibt beides das gleiche
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
ichbindu
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 10.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2011, 23:37     Titel:
  Antworten mit Zitat      
Hallo,

funktioniert bei einer Scheife anscheinend nicht so einfach!
Code:

for x=1:1:9
   
    C=x+3;
       
end
[value,index] = max(C)
 


Ergebnis :
value =12
index=1 %und nicht 9 in diesem fall

MFG
C
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: 25.01.2011, 00:27     Titel:
  Antworten mit Zitat      
Hallo ichbindu,

Code:

for x = 1:9    
    C = x+3;    % C wird in jeder Iteration überschrieben
end
% Nun ist C ein Skalar mit dem Wert 12.
[value, index] = max(C)
% Wenn C nur einen Wert hat, ist er natürlich das Maximum.
 

Wieso erwartest denn den Wert 9?!

Gruß, Jan
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.