Analytische Ableitung
Verfasst: Samstag 14. Januar 2023, 17:29
Hallo.
Im laufe einer Geradenschnitts muss ich das Varianzfortpflanzungsgesetzt anwenden. Dazu muss ich Ableitungen bilden und dann an einer bestimmten stelle ausrechnen.
Wie man Ableitungen bildet und die Formel f'(x) wird mir auch angezeigt - das hilft mir aber momentan nichts, da ich auch einen konkreten Wert ausrechnen.
Ich hoffe, dass dieses ziemlich praxisnahe Minibeispiel euch hilft das Ganze nachzuvollziehen:
Ich bin davon überzeugt, dass es mit Sicherheit für Berechnungen von Standartabweichungen etc. auch schon fertige Bibliotheken/Funktionen gibt, aber ich bin in der Lernphase (sowohl in Python, als auch in diesem Auswertetechnik-Seminar) und will alles "von Hand" rechnen.
Im laufe einer Geradenschnitts muss ich das Varianzfortpflanzungsgesetzt anwenden. Dazu muss ich Ableitungen bilden und dann an einer bestimmten stelle ausrechnen.
Wie man Ableitungen bildet und die Formel f'(x) wird mir auch angezeigt - das hilft mir aber momentan nichts, da ich auch einen konkreten Wert ausrechnen.
Ich hoffe, dass dieses ziemlich praxisnahe Minibeispiel euch hilft das Ganze nachzuvollziehen:
Code: Alles auswählen
import numpy as np
points = [
{'en': 'general', 'de': 'Allgemein'},
{'name': '1097', 'x': 87883.671, 'y': 45384.496, 'z': None, 'sx': 0.005, 'sy': 0.005, 'sz': None, 'dnx': None,
'dny': None, 'dnz': None},
{'name': '13', 'x': 87833.852, 'y': 45388.750, 'z': None, 'sx': 0.005, 'sy': 0.005, 'sz': None, 'dnx': None,
'dny': None, 'dnz': None},
{'name': '4', 'x': 87839.347, 'y': 45408.780, 'z': None, 'sx': 0.005, 'sy': 0.005, 'sz': None, 'dnx': None,
'dny': None, 'dnz': None},
{'name': '3', 'x': 87877.157, 'y': 45376.062, 'z': None, 'sx': 0.005, 'sy': 0.005, 'sz': None, 'dnx': None,
'dny': None, 'dnz': None}
]
# der Übersichtlichkeit halber speichere ich die Werte hier zwischen
x1 = points[1]['x']
y1 = points[1]['y']
sx1 = points[1]['sx']
sy1 = points[1]['sy']
x2 = points[2]['x']
y2 = points[2]['y']
sx2 = points[2]['sx']
sy2 = points[2]['sy']
x3 = points[3]['x']
y3 = points[3]['y']
sx3 = points[3]['sx']
sy3 = points[3]['sy']
x4 = points[4]['x']
y4 = points[4]['y']
sx4 = points[4]['sx']
sy4 = points[4]['sy']
# m1 = (y2-y1) / (x2-x1)
# m2 = (y4-y3) / (x4-x3)
# d{xs}/d{}
xs = (y3 - y1 + ((y2 - y1) / (x2 - x1)) * x1 - ((y4 - y3) / (x4 - x3)) * x3) / (
((y2 - y1) / (x2 - x1)) - ((y4 - y3) / (x4 - x3)))
# d{ys}/d{}
ys = y1 + ((y2 - y1) / (x2 - x1)) * (xs - x1)
# Hier müssen 8 Ableitungen gebildet und berechnet werden:
#
# d1{xs}/d1{x1} als d1xs_d1x1
# d1{ys}/d1{y1} als d1ys_d1y1
# d1{xs}/d1{x2} als d1xs_d1x2
# d1{ys}/d1{y2} als d1ys_d1y2
# d1{xs}/d1{x3} als d1xs_d1x3
# d1{ys}/d1{y3} als d1ys_d1y3
# d1{xs}/d1{x4} als d1xs_d1x4
# d1{ys}/d1{y4} als d1ys_d1y4
#
# Standardabweichung berechnen
s_s = np.sqrt(
(d1xs_d1x1 ** 2) * (sx1 ** 2) +
(d1ys_d1y1 ** 2) * (sy1 ** 2) +
(d1xs_d1x2 ** 2) * (sx2 ** 2) +
(d1ys_d1y2 ** 2) * (sy2 ** 2) +
(d1xs_d1x3 ** 2) * (sx3 ** 2) +
(d1ys_d1y3 ** 2) * (sy3 ** 2) +
(d1xs_d1x4 ** 2) * (sx4 ** 2) +
(d1ys_d1y4 ** 2) * (sy4 ** 2)
)
print(s_x)