mich interessiert folgendes:
es gibt ja oft auch Werte (Double-Zahlen), dessen Wert wir nicht genau wissen. Ein Beispiel: Ich habe ein Foto und will daraus eine Punktwolke errechnen. Die Pixel geben zwar eine exakte Farbe an und anhand der Satelliten-Koordinaten bekomme ich auch X und Z heraus (und ein grobes Y), allerdings können immer wieder Abweichungen in den Werten auftreten, z.B.:
- Die Linse der Kamera weicht um einige tausendstel Grad ab
- Die Farbe ist durch Wolken verfälscht
- Ein zweites Bild, das darauf matchen soll, hat minimal andere Farbgebung
- und so weiter
Daraus bilden wir dann einen Raum, in dem man +,-,*,/ rechnen kann. Beispiel: 4+/-1 + 1 = 5+/-1. Durch das Addieren mit 1 erhöht sich die Abweichung nicht.
Eine Variable a=4 kann also nur den Wert 4 haben. Eine Variable a+/-0.1 kann hingegen JEDEN beliebigen Wert haben, allerdings sind diese Werte unterschiedlich wahrscheinlich. Der Vorteil: Man kann diese Werte in ein Gleichungssystem packen mit widersprüchlichen Aussagen in den Gleichungen und beliebig mehr Unbekannten als Werten (jede Standardabweichung ist ja quasi eine "unbenannte unbekannte") und das System lässt sich trotzdem lösen.
Jetzt die Preisfrage: Ich habe die 4 Grundrechenarten wie folgt definiert:
Code: Alles auswählen
// Gauss ist definiert als {value, deviation}
case "+":
return Gauss{l.value + r.value, l.deviation + r.deviation}
case "-":
return Gauss{l.value - r.value, l.deviation + r.deviation}
case "*":
return Gauss{l.value * r.value, l.deviation * r.deviation + l.value * r.deviation + r.value * l.deviation}
case "/":
return Gauss{l.value / r.value, l.deviation / r.value + l.value * r.deviation}
- 2 + 4 = 6
- 4+/-1 + 2 = 6+/-1
- 2 * 4+/-1 = 8+/-2
- 8+/-2 / 2 = 4+/-1