Polynom in C++
-
Hi
Vorweg, ich bin noch ziemlicher Anfänger was C++ angeht und ich oute mich mal als Mathestümperer.
Ich habe eine Datenreihe (X/Y-Werte), so um die 2000 Stück.
Ich hätte gerne zu jedem X-Wert den Y-Wert des Polynom 10. Grades.Ich habe das bisher äußerst elegant mit Python/Numpy so gemacht:
from numpy import * z10 = polyfit(xdata, ydata, 10) # create polynominal 10th degree p10 = poly1d(z10)
Da ich aber längerfristig eine GUI per QT bauen will frage ich mich:
gibt es dafür in C++ eine fertige Bibliothek/Klasse?
Weil wenn ich das erst selbst schreiben müsste würde ich
vermutlich ewig brauchen um hinter die ganze Theorie der Polynominterpolation
zu kommen. Eher würde ich mir die Daten von einem Python Script nach C++ liefern
lassen.
Hat jemand eine Idee?
-
Was willst du machen? Du hast ein Polynom gegeben durch Koeffizienten und willst den Wert an einer Stelle ausrechnen? Das wäre einfach zu programmieren.
-
sry habe ich komplett falsch verstanden. Es geht um Polynominterpolation.
-
Ich weiß nicht, ob es eine Bibliothek für C++ gibt, mit der Du machen kannst, was Du machen möchtest. Vermutlich gibt es irgendwo eine. Aber ich wundere mich über das Polynom 10. Grades. Ich würde davon ausgehen, dass hinter einem Polynom so eines hohen Grades praktisch immer ein fehlerhaftes Modell steckt. Wie kommt dieses Polynom zu Stande?
-
Also zum Hintergrund der ganzen Sache. Ich habe mir so als Bastelei ein Spektroskop gebaut dessen Spektren ich auch irgendwie darstellen/auswerten möchte.
Das Spektrum wird von einer DSLR aufgenommen, dann geschnitten und optimiert.
http://p-bg.de/pics/spektrum.png
Dann lese ich die RGB Kanäle aus und erstelle solche Plots, wie hier den roten Kanal:
http://p-bg.de/pics/red_polynominal_10.pngWenn ich dann Polynominterpolation auf die Rohdaten anwende und dann von der Interpolation die Rohdaten abziehe bekomme ich eine Grundlinie mit den ganzen Ausschlägen der Absorptionslinien. Das kann man dann besser weiter analysieren...
So wie hier ungefähr:
http://hven.swarthmore.edu/~cohen/xrayastro.htmlIm Grunde ist das genau das gleiche wie "Trendlinie Polynomisch Grad n" in LibreOffice Calc oder Excel.
Wie genau das interpoliert wird will ich eigentlich gar nicht Wissen. Wikipedia schreibt das es wohl mehrere Verfahren gibt das ganze zu machen. Aber ich will das ja nicht in C++ entwerfen sondern hätte nur einfach was verwendet wenn es was gegeben hätte. Ich verwende einfach weiter die Numpy Funktion und lasse mir die Daten in mein C++ Programm liefern.
-
Du kannst Qt auch aus Python heraus verwenden, das wäre für dich vermutlich einfacher.
-
Danke für den Hinweis, aber ich will mich ein bisschen weiter
mit QT anfreunden.Ich habe übrigens ein fetzen Code gefunden der das zu machen scheint was ich will. Ich werde mir das demnächst mal genauer ansehen ob ich damit gleiche Ergebnisse bekommen wie mit Numpy:
-
Meinst du mit C++? Qt hat wie gesagt auch Python Bindings.
Das Projekt ist jetzt nicht so gut geeignet, um C++ zu lernen. C++ ist eine komplexe Sprache, die man beherrschen muss. Du brauchst hier hingegen mehrere externe Bibliotheken (GUI, Python Anbindung). Das kriegst du wahrscheinlich schon hin, wirst aber nicht genau verstehen, was dabei genau passiert.
-
Da hast du natürlich völlig recht, damit lerne ich nicht wirklich C++.
Aber es ist jet nicht so das ich die erste Stunde vor C++ sitze
Ich habe schon ein paar kleine Helferlein für mich und mein Teleskop selbst in C++/Qt geschrieben, da darf aber sicher auch kein Profi drüber schauen ohne Zähneknirschen ;).
-
Splines pwnen Polynominterpolation
-
-
Die GSL bietet viele Interpolationsalgorithmen, allerdings in C:
https://www.gnu.org/software/gsl/manual/html_node/Interpolation.htmlAnsonsten gibt's spline interpolation anscheinend auch in boost:
http://www.boost.org/doc/libs/1_65_0/libs/math/doc/html/math_toolkit/interpolate/cubic_b.html