Methode der kleinsten Quadrate

 

Man steht in der astronomischen Programmierung nicht selten vor dem Problem, aus einer begrenzten Zahl von Meßwerten eine einfache Funktion zu bestimmen, mit deren Hilfe die nicht vorhandenen Zwischenwerte möglichst gut annähert werden können. Sehr gute Dienste leistet hierbei die Polynomiale Regression.

Hierbei wird eine Kurve von Meßpunkten durch ein Polynom (z.B. f(x) = ax³+bx²+cx+d für ein Polynom der Ordnung 3) bestmöglich angenähert, wobei die Koeffizienten a, b, c und d zu bestimmen sind. Die Berechnung des Polynoms erfolgt durch Minimierung der Quadrate der Abweichung zwischen gemessenen Werten und den Funktionswerten. Das genaue Verfahren ist z.B. in Wikipedia in aller Ausführlichkeit beschrieben.

Ein Beispiel ergab sich beim Gemeinschaftsprojekt (Tool zur Bestimmung der Bahnelemente von Doppelsternen) mit der FG Spektroskopie. Aufgabe war es, Spektren zu kalibrieren, d.h. jedem kontinuierlichen Datenpunkt (insgesamt etwa 2000) wurde eine Wellenlänge zugewiesen. Dafür standen jedoch nur begrenzt viele (etwa 15) Meßwerte einer Neon-Dampflampe mit bekannten Linien zur Verfügung.

Die Klasse (C++) zur Polynomialen Regression stelle ich als Anschauungsmaterial gern zur Verfügung; sie kann hier heruntergeladen werden.

Ihr Gebrauch ist ganz einfach: die Methode PerformRegression() nimmt zwei Arrays mit x-y-Wertepaaren entgegen. Außerdem kann die Ordnung des Polynoms und die Größe des Arrays angegeben werden. Diese Methode berechnet lediglich die Koeffzienten, aber noch keine Zwischenwerte. Dies geschieht im Anschluß mit der zweiten Methode EvaluatePolynome().

Die Klasse benutzt die Matrix-Bibliothek MatLite, die ich vor einiger Zeit hier schon vorstellte.