Hallo,
in einer Messreihe von Druckwerten, die typischerweise so aussieht
möchte ich die Extremwerte erfassen und zwar nur die großen, gut
sichtbaren. Die Werte liegen als Integer vor, (die der Tendenz nach auf
oder absteigend sind in einem Zeitintervall) komplizierte Rechnungen wie
Steigungsanalysen oder Spline Kurve (ist recht heftig, passt in den uC
nicht mehr rein) möchte ich nicht machen.
Mathematisch wäre das nichts weiter als die Nullstellen der ersten
Ableitung aber die Kurve liegt ja nicht als Funktion vor.
Wie würde ein passender Algorithmus aussehen?
Gruss,
Christian
Ich denke, du müsstest erstmal genauer festlegen, was du mit
>und zwar nur die großen
genau meinst
Mir ist z.B. nicht ersichtlich, warum du die "kleinen" Extrema zwischen
dem 25ten und 26ten 4ten berücksichtigen willst, aber den nach dem 7ten
4ten und den kurz vor dem 23ten 4ten nicht.
PS.:
wie viel hast du dir bei dem Ausdruck
>die typischerweise so aussieht
gedacht? Deine Formulierung unterstellt, dass du in dem Kurvenverlauf
ein Characteristikum siehst - eben etwas das typisch ist. Auf sowas
ließen sich ALgorithem ansetzten und auslegen.
Das sehe ich so auf den ersten Blick nicht. Hätte mir z.B. vorstellen
können, dass die Drücke im 24 Stundenzyklus mit der Temperatur schwanken
- ist aber nicht der Fall.
Außer, dass es prinzipiell hoch und runter geht, sehe ich kein
Characteristikum - wie gesagt, auf den ersten Blick, vll. ist das doch
eines...
Christian J. schrieb:> in einer Messreihe von Druckwerten, die typischerweise so aussieht> möchte ich die Extremwerte erfassen und zwar nur die großen, gut> sichtbaren.
Zeitfenster (z. B. ein Tag) definieren und in diesem Zeitfenster jeweils
das Maximum und Minimum erfassen. Ist zwar nicht ganz, was Du willst,
aber als Auswertung sinnvoller.
Ich würde Filtern und dann n Messwerte durch den Speicher schieben
und bei Änderung von m < n/2 Messwerten in die andere Richtung,
das Maximum von n ausgeben. Dann hast du allerdings alle
Scheitelpunkte erfasst.
Nimm den ersten Wert als Startwert X0
Setze 2 Werte, z.B. D=100 und F=0.5
Wenn X > X0+D, dann wird ein lokales Maximum gesucht. (wenn < X0-D, dann
ensprechend Minimum)
* a) Xmax = X wenn X>Xmax.
* b) wenn (X < (Xmax-X0)*F+X0), dann haben wir den ersten Extremwert
Xmax1 und
* suchen fortan das erste Minimum
* mit X0 = Xmax1 und Xmin=X
* Xmin = X wenn X<Xmin
* und der End-Bedingung X>(Xmin-X0)*F+X0 (beachte, dass die Klammer
negativ ist!)
Deine Recherchen müssen nun nur noch ein geeignetes D und F finden.
>und zwar nur die großen
Einfach mal schauen, ob ein trivialer Ansatz gut genug ist.
Zuerst einen gleitenden Mittelwert berechnen. Nach Try&Error Gewichte
ausprobieren, bis nur mehr die "großen" übrig bleiben.
Dann in den geglätteten Daten die Differenz zwischen aufeinander
folgenden Punkten berechnen. Und diejenigen nehmen, bei denen das
Vorzeichen der Differenz wechselt.
Noch einer schrieb:> Zuerst einen gleitenden Mittelwert berechnen. Nach Try&Error Gewichte> ausprobieren, bis nur mehr die "großen" übrig bleiben.> Dann in den geglätteten Daten die Differenz zwischen aufeinander> folgenden Punkten berechnen. Und diejenigen nehmen, bei denen das> Vorzeichen der Differenz wechselt.
Damit hast du aber NICHT DAS MAX/MIN der Originalwerte!!!
Danke erstmal für die Anregungen!
Ich überlege in die Richtung einfach ein Intervall zu durchlaufen und zu
zählen wieviele Nachfolger größer sind als der Vorgänger und wieviele
kleiner. Sobald das Verhältnis kippt war dann ja ein Maximum da. Da
diese Kurven aber quasi jeden beliebige Form annehmen können ist das
auch viel Probierei.
Man kann auch einen Wert von unten her "hochschieben" und bei jedem
Schritt zählen wieviele Werte, die ja einen Bereich bilden, noch drüber
liegen und deren Mittelpunkt bestimmen. Das werden logischerweise bei
einem Maximum immer weniger, bis keiner mehr drüber liegt.
Ich habe das teil jetzt über ein Jahr am Laufen und das Wetter hat schon
damit zu tun wie der Luftdruck ist. Aktuell liegt er bei mir bei 995
mBAr, das ist ein echt tiefes Tief. Und die Wendepunkte läuten dann
schon ein, wann man sich auf Regen etc einstellen muss.
Pete K. schrieb:> Alle Messwerte in eine Liste speichern und diese dann nach Größe> sortieren.
Machbar, ich habe noch genug Speicher, jeder Wert hat eine Unixtime als
Index. Nur was kommt dabei heraus? Eine steigende Gerade, jedenfalls so
ungefähr, da die Wert harmonisch sind, Ecken und Kanten gibt es nicht.
Du musst berücksichtigen, dass der Druck seinen Offset laufend
verändert, in der Grafikanzeige muss ich das auch berücksichtigen, dass
ich laufend den maßstab neu errechnen muss.
Christian J. schrieb:> Und die Wendepunkte läuten dann> schon ein, wann man sich auf Regen etc einstellen muss.
Du meinst die (math.) Extrempunkte? Du moechtest die Minima und Maxima
aber nicht in Echtzeit erkennen, oder? Das ginge naemlich auch mit einer
Kurvenbeschreibung nicht, es braucht fuer signifikante Extrempunkte
immer einen gewissen Horizont. Das wuerde sonst auch die Boersen
crashen, wenn jeder berechnen koennte, dass jetzt gerade der Kurs am
Hoechsten ist und fallen wird.
Pete K. schrieb:> Alle Messwerte in eine Liste speichern und diese dann nach Größe> sortieren.
BULLSHIT!!!
Damit erwischst du nur Werte die in der Nähe globaler Extrema liegen!
Feldstecher schrieb:> Du meinst die (math.) Extrempunkte? Du moechtest die Minima und Maxima> aber nicht in Echtzeit erkennen, oder? Das ginge naemlich auch mit einer> Kurvenbeschreibung nicht, es braucht fuer signifikante Extrempunkte> immer einen gewissen Horizont.
Ich glaube fast dass Du recht hast, auch wenn ich mir grad meinen Öl
Trade so anschaue. Das geht nur nachträglich aber auf keinen Fall in der
Prognose, nicht mal eine einzige Minute... alelrdings habe ich zig
Analysewerkzeuge wie gleitende Durchschnitte usw, die mir genau das
bestimmen, nämlich nachträglich zu rechnen.
Wäre ja vielleicht nicht verkehrt die Druckmessung als Candlesticks
darzustellen, das müsste problemlos möglich sein. Candlesticks gelten
für alle Arten periodischer Größen, alles was einen Chart hat kann man
damit ausdrücken.
Christian J. schrieb:> Mathematisch wäre das nichts weiter als die Nullstellen der ersten> Ableitung aber die Kurve liegt ja nicht als Funktion vor.
Macht nix, die Ableitung kann man aus den Messwerten approximieren. Ob
das dein Problem löst ist eine andere Frage.
Die drei einfachsten Approximationen (man kann die Genauigkeit noch
erhöhen) sind:
Vorwärtsdifferenz: y'[x] = y[x + 1] - y[x]
Rückwärtsdifferenz: y'[x] = y[x] - y[x - 1]
zentrale Differenz: y'[x] = (y[x + 1] - y[x - 1]) / 2
Hannes J. schrieb:> Vorwärtsdifferenz: y'[x] = y[x + 1] - y[x]> Rückwärtsdifferenz: y'[x] = y[x] - y[x - 1]> zentrale Differenz: y'[x] = (y[x + 1] - y[x - 1]) / 2
Sowas schreibe ich gerade, das dient auch bei mir dazu den Graphen
farbig zu gestalten. Nur wenn der Nachfolger größer ist als der
Vorgänger wird es grün und ein Farbwechsel kommt erst, wenn der
Nachfolger kleiner ist als der Vorvorgänger.
Christian J. schrieb:> Hallo,>> in einer Messreihe von Druckwerten, die typischerweise so aussieht> möchte ich die Extremwerte erfassen und zwar nur die großen, gut> sichtbaren. Die Werte liegen als Integer vor, (die der Tendenz nach auf> oder absteigend sind in einem Zeitintervall) komplizierte Rechnungen wie> Steigungsanalysen oder Spline Kurve (ist recht heftig, passt in den uC> nicht mehr rein) möchte ich nicht machen.>> Mathematisch wäre das nichts weiter als die Nullstellen der ersten> Ableitung aber die Kurve liegt ja nicht als Funktion vor.>> Wie würde ein passender Algorithmus aussehen?>> Gruss,> Christian
Für mich ergibt sich der Eindruck, dass du selber noch nicht genau
weist, was du machen willst, oder hast es einfach noch nicht
systematisch aufgeschrieben. Du musst dir erst einmal klar werden, was
du genau möchtest, und uns dass mitteilen, bevor man dann sinnvolle
zielführende Antworten geben kann.
Was genau meinst du z.B. mit "Extremwerte erfassen und zwar nur die
großen, gut sichtbaren"
Und dann wie schon angesprochen, zu welchen Zeitpunkten willst du die
Werte bestimmen?
Wievel Speicher hast du? wie ist die Abtastfrequenz? und noch viele
andere Dinge.