maxima finden < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 10:58 Di 18.09.2007 | Autor: | anitram |
halli hallo!!
ich habe ein "liniendiagramm" gegeben (siehe anhang), in dem die einträge einer Matrix H eingezeichnet sind.
man kann erkennen, dass es 2 maxima bzw 2 spitzen gibt.
eine spitze zu erkennen ist kein problem. ich suche einfach nach max(H).
aber: wie kann ich jetzt beide spitzen, bzw auch 3,4,5,6.. spitzen finden.
im internet finde ich einfach nichts passendes, vielleicht erkenn ich es auch einfach nur nicht...
vielleicht weiß hier jemand, wie ich dieses problem lösen kann?
vielen dank!
lg anitram
[Dateianhang nicht öffentlich]
Dateianhänge: Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
|
|
|
|
Hallo,
du musst mal "manuell" nach lokalen Maxima suchen, d.h. du musst im einfachsten Falle nach Punkten suchen, die höher liegen als ihre beiden Nachbarn.
Der folgende Ansatz findet natürlich nur Maxima, die nicht direkt an den Rändern liegen. Deswegen müssen die gefundenen Indizes um 1 erhöht werden. a enthalte die y-Werte.
max_indices = 1 + find((a(2:end-1)>a(1:end-2)) .* (a(2:end-1)>a(3:end)));
Nun findest du mit diesem Code jedes noch so schwach ausgeprägte lokale Maximum. Falls du aber nur stärkere Spitzen suchst, kannst du noch ein zusätzliches Kriterium einbauen. Denkbar wären da:
a) Wir erweitern die Umgebung, die ein Maximum überragen muss auf mehr Punkte. Also z.B. die beiden rechts davon und die beiden links davon. Hier muss man den breiter werdenden Rand berücksichtigen.
max_indices_a = 2 + find((a(3:end-2)>a(2:end-3)) .* (a(3:end-2)>a(1:end-4)) .* (a(3:end-2)>a(4:end-1)) .* (a(3:end-2)>a(5:end)))
b) Wir wollen, dass die Kurve mehrere Punkte lang (hier: 2) links vom Maximum streng monoton steigt und rechts davon streng monoton fällt. (also keine weiteren kleinen Spitzen in dieser Umgebung)
max_indices_b = 2 + find((a(3:end-2)>a(2:end-3)) .* (a(2:end-3)>a(1:end-4)) .* (a(3:end-2)>a(4:end-1)) .* (a(4:end-1)>a(5:end)));
c) Wir können auch sagen, dass die Differenz oder der Quotient zwischen dem Maximum und den Nachbarwerten einen bestimmten Wert nicht unterschreiten darf.
d) Wir können die Ausprägung der Spitze messen, indem wir den Winkel den die beiden Nachbarpunkte und das Maximum bilden bestimmen. So können wir nur besonders spitze Spitzen (...) zulassen.
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 12:49 Di 18.09.2007 | Autor: | anitram |
hallo!
danke für deine antwort! sso funktionierts schon ganz gut!!!!
aber jetzt steh ich vor einem so kleinen problem, dass ich glaube auf der leitung zu stehen!
die x werte der punkte hab ich ja jetzt,
aber wie erhalte ich die y-werte dazu?
ich weiß es ist nicht schwer, aber matlab ist leider schon ein bissl länger her!
vielen dank!
lg anitram
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:11 Di 18.09.2007 | Autor: | dormant |
Hi!
H ist eine 2x60 Matrix, vermute ich mal. Oder 60x2, was das gleiche ist. Nun ja - die eine Spalte läuft von 1 bis 60, und die andere hat die y-Werte. Normalerweise ist die erste Spalte für die x-Werte, und die zweite für die y-Werte: H(2,:);
Gruß,
dormant
|
|
|
|
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 13:39 Di 18.09.2007 | Autor: | anitram |
danke!!
aber so erhalte ich aber nur eine fehlermeldung index exceeds matrix dimension....
ich frage einfach nochmal anders:
ich erhalte z.b. die werte 20 und 46, das sind die x werte, hier befindet sich ein maximum.
aber nun will ich ja den "ganzen" punkt wissen
also (20,40) und (46, 85) ungefähr müssten diese y werte stimmen, nur wie bekomme ich sie??
ich hab im moment hier echte denkschwierigkeiten und schon einen knopf im hirn!
vielen dank!
lg anitram
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:42 Di 18.09.2007 | Autor: | anitram |
hab den fehler nun selbst gefunden!
vielen dank für die hilfe!!!
lg anitram
|
|
|
|