4 Stimmen

Wie kann man die Änderungsrate (Ableitung) von Datenströmen berechnen?

Ich habe eine Reihe von Daten, die sich im Laufe der Zeit verändern. Wie kann ich die Änderungsrate mit C# bestimmen?

Es ist schon lange her, dass ich Kalkül gelernt habe, aber jetzt brauche ich es zum ersten Mal (seit 15 Jahren). Wenn ich jetzt nach dem Begriff "Derivate" suche, erhalte ich Finanzthemen und andere mathematische Dinge, von denen ich glaube, dass ich sie nicht wirklich brauche.

Würden Sie mir bitte die richtige Richtung zeigen?

0 Stimmen

Das klingt nicht nach Programmierung. Es handelt sich auf jeden Fall nicht um ein gut spezifiziertes Problem.

0 Stimmen

Seine Programmierung im Zusammenhang (wie tun ich X in C#), aber die Frage wäre besser, wenn es viel mehr Informationen, wie "Ich habe diese X-Werte, oder dieses Array von Floats und ...".

0 Stimmen

4voto

Mark Lakata Punkte 18998

Wenn Sie etwas Anspruchsvolleres wollen, das die Daten glättet, sollten Sie sich mit einem digitalen Filteralgorithmus befassen. Er ist nicht schwer zu implementieren, wenn man den technischen Fachjargon durchschaut. Die klassische Methode ist Savitzky-Golay

Wenn Sie die letzte n in einem Array gespeicherte Proben y und jede Abtastung in gleichem zeitlichen Abstand erfolgt, können Sie die Ableitung etwa wie folgt berechnen:

deriv = 0
coefficient = (1,-8,0,8,-1)
N = 5 # points
h = 1 # second
for i range(0,N):
   deriv += y[i] * coefficient[i]
deriv /= (12 * h)

Bei diesem Beispiel handelt es sich um einen N=5-Filter des Typs "3/4 (kubisch/quartisch)". Der größere N Je mehr Punkte gemittelt werden, desto glatter wird das Ergebnis, aber desto höher ist auch die Latenz. Sie müssen N/2 Punkte warten, um die Ableitung zum Zeitpunkt "jetzt" zu erhalten.

Weitere Koeffizienten finden Sie hier im Anhang

https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter

3voto

Tomas Aschan Punkte 55585

Sie benötigen sowohl den Datenwert V und die entsprechende Zeit T zumindest für den letzten Datenpunkt und den davor. Die Änderungsrate kann dann wie folgt angenähert werden Eulers Rückwärtsformel , was übersetzt bedeutet

dvdt = (V_now - V_a_moment_ago) / (T_now - T_a_moment_ago);

in C#.

0 Stimmen

Ich mag es nicht, ein großes T für Zeit zu verwenden (ich würde es lieber klein schreiben), aber mit den "Unter"-Noten sah es noch schlimmer aus... Außerdem ist zu beachten, dass dies nicht el genau Veränderungsrate zum gegenwärtigen Zeitpunkt - es ist lediglich eine Angleichung .

1 Stimmen

Solange es in der Nähe ist, ist das in Ordnung.

3voto

robert Punkte 31

Die Änderungsrate wird wie folgt berechnet

  1. Berechnen Sie ein Delta wie "Preis minus - Preis vor 20 Tagen".
  2. Berechnung der Veränderungsrate, z. B. "Delta / Preis vor 99 Tagen".

0voto

Chris Shain Punkte 49991

Gesamtänderungsrate, d. h. (neuer_Wert - ursprünglicher_Wert)/Zeit?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X