numerische ableitung



  • Hallo,
    ich habe ein Array mit Messdaten und moechte dieses zweifach ableiten. Dazu verwende ich die Funktion

    void Ableitung(double* input, double* output, int mm)
    {
    int h= 1;
    
    for (int_t n=1; n<mm; n++)
    {
      output[n]= (input[n+h]-2*input[n]+input[n-h])/(h*h);    
    }
    

    Leider kommt dabei (wohl aufgrund des Rauschens) nur Muell raus. Wer kann mir eine bessere Methode zur zweifachen Ableitung nennen?
    Ich waere fuer Hilfe wirklich dankbar.



  • Eigentlich ist das schon der richtige Weg sowas zu berechnen. Ob es besser geht hängt wohl auch vom Problem ab:

    Kannst Du mit den Meßdaten vielleicht eine Funktion schätzen und dann die ableiten?

    Oder das rauschen vorher irgendwie durch Glättung entfernen?



  • Es waere kein Problem, da eine Funktion ranzufitten, aber ich moechte nach der zweifachen Ableitung noch eine FFT (mittels FFTW) durchfuehren, und dazu brauche ich das Array.



  • Aber Du könntest doch erst ne vernünftige Funktion da ranpassen. Die schön ableiten und die abgeleitete Funktion dann wieder diskretisieren indem Du halt ein Array mit Werten davon füllst.

    Was Du danach weiter machst ist Dir überlassen. Mit dem Vorgehen kannst Du halt Wissen (in dem Fall wie die Funktion in etwa aussieht) verwenden um das Rauschen etwas zu mindern.



  • Nachdem du eine anständige Funktion gewählt hast, musst du vor allem dein h optimal wählen.
    Wenn du beispielsweise die Ableitung über (f(x+h) - f(x)) / h bestimmst, also eine Gerade zur Aproximation benutzt, ist das optimale h = 2.1e-8 bei double-Genauigkeit. Man kann das optimale h als Minimum der Summe der Abschneide- und Rundungsfehler bestimmen.
    Je nach Schrittweite h verändern sich Abschneide- und Rundungsfehler entsprechend deiner Ableitungsfunktion.


Anmelden zum Antworten