Für Ableitung erst interpolieren oder Differenzenquotient?

Neue Frage »

mm96 Auf diesen Beitrag antworten »
Für Ableitung erst interpolieren oder Differenzenquotient?
Meine Frage:
Hallo zusammen,

ich bin quasi Quereinsteiger in der Numerik, deshalb eher eine Anfängerfrage:
Ich habe Datenpunkte (x,y), wo x eine Temperatur ist, die Schrittweite ist 1°.

Nun soll man ja für die numerische Ableitung, z. B. die Vorwärtsableitung, die Schrittweite um die 1e-5 oder so wählen.
Soll ich hier dann für die Berechnung der Ableitung erst ne Interpolation durchführen, um kleinere Schrittweiten zu bekommen, oder einfach die Differenzenquotienten delta_y/delta_x für zwei aufeinanderfolgende Punkte berechnen?

Vielen Dank und viele Grüße,
Matze

Meine Ideen:
Steffen Bühler Auf diesen Beitrag antworten »
RE: Für Ableitung erst interpolieren oder Differenzenquotient?
Zitat:
Original von mm96
Nun soll man ja für die numerische Ableitung, z. B. die Vorwärtsableitung, die Schrittweite um die 1e-5 oder so wählen.

Das oder so ist hier zu diskutieren. Eigentlich nimmt man nicht irgendeine schön kleine Schrittweite, sondern man fragt sich, wie genau die temperaturabhängige Änderung zu bestimmen ist. Da wird es ja vielleicht eine Anforderung geben. Weiter sollte man auch bedenken, wie genau Temperatur und abhängige Größe gemessen werden. Wenn z.B. 1 Grad auch 1,4 Grad sein kann, lohnt es sich nicht, auf 0,1 Grad runterzuinterpolieren.

Viele Grüße
Steffen
mm96 Auf diesen Beitrag antworten »
RE: Für Ableitung erst interpolieren oder Differenzenquotient?
Ah ja das macht Sinn.
Vorgaben hab ich keine, ich hab die Daten vom NIST runtergeladen und wollte einfach ein bisschen was damit machen, um meinen Schülern in der Schule auch mal mathematische Methoden in der Computerphysik etc. zu zeigen, damit die nicht meinen, man steht immer mit Meterstab und Stoppuhr da.

Die Schrittweite ist tatsächlich 2°, da hab ich mich verschrieben. Ich hab jetzt mal Delta_y/Delta_x gerechnet, sieht eigentlich ganz gut aus, die Zahlen sind auch negativ, das scheint zu passen.

Würde es jetzt in diesem Fall auch Sinn machen, z. B. statt der Vorwärtsableitung die zentrale Ableitung zu nehmen?
Ich bin mir ein bisschen unsicher, wann man was nehmen sollte... Die zentrale ist genauer, klar, aber gibt es da sonst noch Kriterien?

Viele Grüße,
Matze
Steffen Bühler Auf diesen Beitrag antworten »
RE: Für Ableitung erst interpolieren oder Differenzenquotient?
Die Dichte sollte ja ungefähr so wie hier runtergehen, das heißt die Ableitung sinkt laufend. Wenn Deine Daten das ergeben (man sieht es in der Grafik nicht so ganz...), dann passt es auch für diesen Zweck.

Aber ob Du jetzt hier bei 2°C, 4°C, 6°C... die Ableitung einträgst (vorwärts) oder die etwas korrektere bei 1°C, 3°C, 5°C... ist meines Erachtens egal, das wird sich nichts geben.
HAL 9000 Auf diesen Beitrag antworten »

Ja, eine bessere Skalenwahl des Plots wäre wohl angebracht - und zwar für beide Größen "Dichte" und "Dichteableitung" getrennt - damit man auch sieht, wie sehr die numerischen Ableitungswerte lokal schwanken, was man etwa mit einem vorgeschalteten Tiefpassfilter mildern könnte.
mm96 Auf diesen Beitrag antworten »

Das stimmt, hier noch der skalierte Plot.

Mit Tiefpassfilter meinst Du hier kein elektronisches Bauteil, oder? Big Laugh


Jetzt würde ich gern noch einen Schritt weiter gehen und die Virialgleichung (Wikipedia: Dichteanomalie) an diese Daten anpassen, also 7 Parameter finden.

Dazu hab ich im Buch "Computational Physics" von Philipp Scherer (TUM) das Newton-Raphson-Verfahren gefunden, das ist dasselbe wie auch hier [Wikipedia: Gradientenverfahren] der Fall mit der Hessematrix.

Die Frage ist jetzt: Um die Hessematrix der Residuenfunktion auszurechnen, geht das, indem ich einfach zwei mal die obigen Ableitungen nach den 7 Parametern ausführe?
Bzw. die ersten Ableitungen hab ich auch schon von Hand mal berechnet, aber ich wollte jetzt nicht nochmal 49 Ableitungen ausrechnen...
Oder werden die Ableitungen dann zu ungenau (oder andere Sachen, die das verhindern...)?

Viele Grüße,
Matze

PS: Darf leider noch keine Hyperlinks einfügen...
 
 
Huggy Auf diesen Beitrag antworten »

Zitat:
Original von mm96
Jetzt würde ich gern noch einen Schritt weiter gehen und die Virialgleichung (Wikipedia: Dichteanomalie) an diese Daten anpassen, also 7 Parameter finden.

Dazu hab ich im Buch "Computational Physics" von Philipp Scherer (TUM) das Newton-Raphson-Verfahren gefunden, das ist dasselbe wie auch hier [Wikipedia: Gradientenverfahren] der Fall mit der Hessematrix.

Dazu verwendet man meist die Methode der kleinsten Quadrate. Und dafür bietet sich das Gauß-Newton-Verfahren

https://de.wikipedia.org/wiki/Gau%C3%9F-Newton-Verfahren

an, weil man da keine 2. Ableitungen braucht.

Zitat:
Die Frage ist jetzt: Um die Hessematrix der Residuenfunktion auszurechnen, geht das, indem ich einfach zwei mal die obigen Ableitungen nach den 7 Parametern ausführe?
Bzw. die ersten Ableitungen hab ich auch schon von Hand mal berechnet, aber ich wollte jetzt nicht nochmal 49 Ableitungen ausrechnen...

Wenn man so etwas angeht, sollte man die Daten erst mal in einen Rechner laden und den dann rechnen lassen. Es könnte gut sein, dass man für das Herausarbeiten der Temperaturanomalie von Wasser bei 4° C eine feinere Temperaturunterteilung braucht als die 2° C.
mm96 Auf diesen Beitrag antworten »

Danke für die Antwort, ich arbeite mich gerade ein.

Zum Gauß-Newton-Verfahren hab ich gleich die erste Nachfrage, hoffentlich nicht zu elementar:

Woher kommt das 1/2 beim Minimieren der Summe der Abweichungsquadrate?


Das mit dem Rechner hab ich schon gemacht, ich hab die Daten mit Scipys least-squares-fit gefittet, da kamen ziemlich genau die Parameter raus, die auch in Wikipedia drinstehen.
Jetzt würd ich nur gern einmal noch son Ding von Hand einstellen, damit ich auch erklären kann, wie das funktioniert.
Aber dann lass ich das mit der Hesse-Matrix erstmal und mach weiter beim Gauß-Newton-Verfahren.
Huggy Auf diesen Beitrag antworten »

Zitat:
Original von mm96
Woher kommt das 1/2 beim Minimieren der Summe der Abweichungsquadrate?

Der Faktor hat nur den Zweck, dass sich dann der Faktor 2 vom Ableiten der Quadratsumme wegkürzt. Man kann ihn auch weglassen. Die Position des Minimums der Summe der Abweichungsquadrate ändert sich nicht, wenn man die gesamte Summe mit einer Konstanten multipliziert.
mm96 Auf diesen Beitrag antworten »

So, ganz grob hats jetzt mal hingehauen denk ich (Code im Anhang).

Über ne Genauigkeit von 6e-6 bin ich nicht rausgekommen, da hört die Schleife nicht mehr auf.

Mit 1208 Durchläufen ist das Ergebnis:
[9.99844773e+02 1.35245328e+01 -8.06599772e-03 -2.35932109e-05
2.22604537e-09 -1.44978793e-13 1.34597702e-02],

zum Vergleich noch das Ergebnis von der Scipy-Funktion:
[ 9.99843255e+02 1.60078190e+01 -7.99897690e-03 -4.03918968e-05
8.24352159e-08 -2.27182544e-10 1.59426918e-02]

Für mich würde es grob passen, mir stellt sich jetzt nur die Frage, ob so viele Iterationen typisch sind (auf Wiki das Beispiel mit der Rosenbrock-Fkt. hat glaub nur 15 gebraucht, spielts da ne Rolle, dass es hier mehr Parameter gibt?), und ob die Abweichungen (die für mich gering aussehen) auch tatsächlich gering sind...


Edit: Ach ja, man siehts ja im Code, ich hab jetzt die Ableitungen für die Jacobimatrix erstmal von Hand ausgerechnet und als Funktion implementiert.
Wenn man das den PC machen lassen wollte über f(x+h) - f(x)..., was wäre denn da eine gute Wahl für das h?
Huggy Auf diesen Beitrag antworten »

Zitat:
Original von mm96
Für mich würde es grob passen, mir stellt sich jetzt nur die Frage, ob so viele Iterationen typisch sind (auf Wiki das Beispiel mit der Rosenbrock-Fkt. hat glaub nur 15 gebraucht, spielts da ne Rolle, dass es hier mehr Parameter gibt?), und ob die Abweichungen (die für mich gering aussehen) auch tatsächlich gering sind...

Die Zahl der Parameter spielt sicher eine Rolle. Trotzdem wundert mich die Zahl der Iterationen. Aber ich bin kein Numeriker. Vielleicht hilft es, nicht eine Anpassung



zu machen, sondern eine



mit oder . Die lässt sich ja leicht hinterher in die erste Form umrechnen. Vielleicht hilft auch eine Schrittweitensteuerung.

Zitat:
Edit: Ach ja, man siehts ja im Code, ich hab jetzt die Ableitungen für die Jacobimatrix erstmal von Hand ausgerechnet und als Funktion implementiert.
Wenn man das den PC machen lassen wollte über f(x+h) - f(x)..., was wäre denn da eine gute Wahl für das h?

Das scheint mir keine gute Idee. Die Genauigkeit der Ableitung wird dadurch nur schlechter. Außerdem müsste man sich für jeden Parameter ein eigenes ausdenken.
mm96 Auf diesen Beitrag antworten »

Das mit dem D_0 probier ich mal noch aus.
Ein Punkt, der mir noch aufgefallen ist: Wenn ich die Temperaturen als integers übergebe, passt es eigentlich, wenn sie als floats aus der Datei übernommen werden, dann kommen falsche Werte raus, vielleicht läuft da auch viel über Rundungsfehler, da hilft vielleicht auch nochmal die Sache mit dem D_0.

Bei der Schrittweitensteuerung hab ich erst mal das halbieren des alpha probiert wie in wikipedia, allerdings hat er dann über 2000 Schritte gerechnet.
Mit dem Wert 1.1 wie er drin steht, lief es jetzt am schnellsten (und wurde noch ein bisschen genauer, wenn auch unwesentlich).

Aber ich denke, so reichts mir erst mal, dafür dass es eh nur einmal zum zeigen ist, wie sowas in Ansätzen geht, ist es allemal genug.

Die Einzelheiten mit Schrittweiten und Abstiegsrichtungen etc. schau ich bei Bedarf nochmal nach.

Vielen Dank für die Hilfe!
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »