|
Hallo liebe Community,
für die Schule bin ich gerade an einem Projekt, und zwar ist es meine Aufgabe aus gewählten Punkten einen Graph zu erstellen mit Hilfe der Polynominterpolation. Ich habe mich für die Variante von Newton entschieden. Diese dauert bei Punkten extrem lange und ist auch aufgrund der vielen Schreibarbeit sehr anfällig für Fehler, dennoch habe ich am Ende eine Kurve herausbekommen, deren Funktion ich im Folgenden auch einfügen werde.
Meine Punkte, aus welche ich die Kurve erstellen sollte lauteten: (0\1415), (3\1288), (7\1254), (11\1120), (15\1172), (21\1097), (26\1132), (32\1127), (38\1129), (41\1165)
Die Funktion, die ich erhalten habe ist noch nicht gekürzt, entschuldig das bitte :-) Ich möchte ungern Fehler einbauen, die Ursache falscher Umformung sind, daher füge ich hier die originale Funktion an:
Tatsächlich ist die Kurve sehr passend für die ersten Werte und geht auch genau durch die vorgegebenen Punkte. Ab dem 8. Wert jedoch schießt die Kurve nach oben, und ich habe bisher keine logische Erklärung dafür gefunden. Ich bin mir eigentlich ziemlich sicher, dass es kein Rechenfehler ist und selbst wenn es einer wäre, dann wäre die Kurve doch lediglich ungenau, und würde nicht dieses Verhalten erkläre, oder?
Wenn mir jemand dabei helfen könnte mein Problem zu lösen, wäre ich äußerst dankbar :-)
Liebe Grüße, Luca
Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen." |
|
ledum
16:40 Uhr, 12.04.2019
|
Hallo dass eine Kurve mit immer für große positive und negative Werte "nach oben schießt! liegt daran dass sehr bald für Werte einer Grenze der wesentliche Teil ist, also sozusagen übernimmt, die anderen Terme spielen eine immer kleinere Rolle. . wenn man die Punkt gern auf der Kurve haben will, kann sie dazwischen wilde Sprünge machen, du hast gluck, dass deine das nicht tut. du hast daraus gelernt, was die meisten Leute machen, die eine Anzahl von Punkten haben, durch die sie eine Kurve legen, die plausibel ist: Man verwendet sogenannte "Splines", das heisst man nähert die Kurve nur stückweise an mit Polynomen dritten Grades, die an den Übergangsstellen dieselbe Steigung haben. Deine tapfere Arbeit ist also gut, aber nicht, das, was man meistens tut, weil Polynom ten Grades eben immer nach kurzem stark steigt, also das wahrscheinliche Verhalten ausserhalb der ja meistens gemessenen Werte sehr falsch wiedergibt . Gruß ledum
|
anonymous
09:35 Uhr, 13.04.2019
|
Hallo "Tatsächlich ist die Kurve sehr passend für die ersten 7 x-Werte" Nur um Missverständnisse zu vermeiden. Ich habe das mal eben nachvollzogen und ahne, dass du eigentlich meinst: Numerisch recht ordentlich stimmig sind die ersten acht Funktionswerte, und auch der letzte Funktionswert nur ausgerechnet der Funktionswert f(38)_soll ist mit f(38)_ist schon sehr auffällig daneben.
Das stimmt mich nachdenklich, ob nicht doch noch irgendwo ein Tippfehler, ein bug, eine Verwechslung, . ein Eingabe- oder Programmierfehler vorliegt.
Aus numerischen Gründen ist es für solche Dinge immer sehr vorteilhaft zu normieren.
Betrachten wir deinen letzten Summanden in deiner letzten Formelzeile: Der erste Koeffizient wird mit einer (ich nenn's mal eine) Fakultät großer Faktoren multipliziert:
. programmintern werden sehr große Zahlen mit sehr kleinen Zahlen verrechnet. Das führt sehr leicht zu numerischen Genauigkeitsproblemen.
Ein wenig Abhilfe bietet hier meist, die Größen zu normieren. Ich lege mal beispielsweise nahe, die Substitution zu verwenden:
Du siehst dann schnell, dass dann die u-Werte nur noch Werte zwischen . an. Selbst nimmt dann nur noch alltagstauglichere und numerisch 'harmonischere' an. Und hieraus werden auch deine Funktions-Koeffizienten und die Summanden alltags-tauglicher und numerisch weniger anfällig.
Ich will dich aber nicht zu komplex verwirren. Die Tatsache, dass ja schon neun von Stützpunkten stimmt, soll dich ermutigen, zuerst mal nochmals zu hinterfragen und sicher zu stellen, dass nicht einfach irgend ein Übertragungs-Schusslichkeit dein Kopfzerbrechen bereitet und Erfolgsgefühle verzögert...
|
|
Ich beleuchte mal eine andere Seite. Die Frage ist nicht so sehr was "vor" und "nach" den Punkten abgeht, sondern was zwischen den Punkten passiert: Mit GeoGebra ein Schnell-Schuss
Eine Polynominterpolation (sollte in etwa Dein Ergebnis sein)
L = {(0, 1415), (3, 1288), (7, 1254), (11, 1120), (15, 1172), (21, 1097), (26, 1132), (32, 1127), (38, 1129), (41, 1165)}
polynom(L) f(x)=(((-500856320351)) / 14919775084966752000 * x^(9)) + (30267670824791 / 4973258361655584000 * x^(8)) - (686279232914659 / 1491977508496675200 * x^(7)) + (140096817865872941 / 7459887542483376000 * x^(6)) - (743420139607268663 / 1657752787218528000 * x^(5)) + (18882338791258280977 / 2983955016993350400 * x^(4)) - (5720438118046111349 / 113028599128536000 * x^(3)) + (85211473761934408891 / 414438196804632000 * x^(2)) - (42237138946522769 / 123344701429950 * x) + 1415
und ein Regressionspolynom (Minimierung der Abweichungen)
TrendPoly(L, 3) p(x) = -0.012x³ + 1.09544x² - 30.9619x + 1394.87794
Siehe Bild1 und beachte wie das (rote) Polynom f von Punkt zu Punkt schwingt - im Vergleich dazu p(x) - dass die Punkte nicht genau trifft, aber den Gesamtverlauf "geauer" beschreibt. Hast Du auch GeoGebra angewendet? Dann betrachte Dir Deine Funktion mal im Achsenverhältnis 1:1 - da siehst Du nur noch steile Berge und Täler - die Funktion schwingt zwischen den Punkte fürchterlich - nichts was zu einem Sachproblem hinter Deinen Werten passen würde?
und zum Schluss noch eine Splineinterpolation wie ledum angegeben hat.
Siehe Bild2
|
|
Ich bin mir eigentlich ziemlich sicher, dass es kein Rechenfehler ist und selbst wenn es einer wäre, dann wäre die Kurve doch lediglich ungenau, und würde nicht dieses Verhalten erkläre, oder?
Naja, und ich bin mir ziemlich sicher, dass du dich sehr wohl verrechnet hast und dass selbst eine kleine Abweichung zB im letzten Koeffizienten sehr große Auswirkungen auf die Kurvenform haben kann.
Was du da mit Newton machst ist eine Polynominterpolation, . du erhältst eine Polynomfunktion 9. Grades, deren Graph die gegebenen Punkte genau enthält. Eine solche Polynomfunktion höheren Grades neigt aber leider zum Überschwingen. Du schreibst ja nicht, um welche Anwendung es geht, aber oft ist eine Regression die bessere Wahl, wenn es zB um Messdaten geht oder um Trendanalysen. Dabei versucht man, eine Funktion beliebiger Bauart (zB eine lineare Funktion oder eine Exponentialfunktion, oder so zu finden, dass deren Graph "möglichst gut" zu den gegebenen Punkten passt. IdR verläuft der Graph aber dann durch keinen einzigen dieser Punkte genau.
Im Anhang findest du die richtigen Werte für dein Newton-Polynom - wie du siehst, stimmt bereits der dritte Koeffizient nicht mehr überein. Außerdem häng ich dir Bilder der Graphen vom Interpolation-Polynom und von zwei verschiedenen Regressionen dran.
Zum herumspielen mit Interpolations- und vor allem auch Regressionskurven empfehle ich das Programm "CurveExpert Professional". Es handelt sich dabei zwar um ein kostenpflichtiges Programm, aber die eingeschränkte kostenlose Trial-Version reicht zum Herumprobieren völlig aus.
|
|
Vielen, vielen Dank für eure Hilfe! Ich habe dank euch nun eine vernünftige Interpolationskurve erstellen können und mein Fehler in meinem Newtonschen Interpolationsverfahren entdeckt, sodass nun alle Werte übereinstimmen. Ohne eure Hilfe hätte ich das nicht schaffen können; Vielen Dank :-)
|