Newton polynom

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Newton polynom
Ich bekomme die Aufgabe 1c nicht hin.
Laut Wikipedia: https://de.wikipedia.org/wiki/Polynominterpolation#Ansatz:_Newton-Basis
ist N_0(x) = 1
Somit müsste das erste Feld immer Koeffizent * 1 sein.

((“newton_polynomial”, np.array([1., 2., 3.]), np.array([0., 1., 1.])), np.poly1d([3., -1., 1.])),

coefficients: 1
x = 0
also N_0(0) = 1
1*1 = 1

aber hier wird 3 erwartet.

Entweder hab ich die Aufgabe total falsch verstanden oder da ist ein Fehler drin.


Ich vermute, ohne das konkret nachzurechnen, dass das Problem in der Verwendung von poly1d liegt. Dort sollen die Koeffizienten in absteigender Rangfolge angegeben werden.
Zudem ist zu beachten, dass sie der Koeffizient für x^0 nicht nur aus dem Koeffizient c0 und dem Newtonpolynom N_0 zusammensetzt, sondern auch mit aus den x^0 Anteilen der ausmultiplizierten Terme für die anderen Koeffizienten.

Am Beispiel:
c0+c1*(x-x0) = c1x+(c0-c1x0); => Poly1d([c1,(c0-c1x0]);

(Alle Angaben sind wie immer ohne Gewähr.)


Ich versteh es immer noch nicht.

müsste man nicht einfach
Poly1d([c2 * (x_2 - x_0)(x_2 - x_1), c1 * (x_1 - x_0), c0])
zurückgeben?


Das macht in meinen Augen eher wenig Sinn. Wie willst du das aus der Formel für das Newton Interpolationspolynom herleiten?


Also Ich glaube zu wissen was man machen muss, aber finde keine brauchbare Möglichkeit das in Code zu bekommen.
Man muss den Newton ansatz irgendwie Umformen, so dass man dann die aus multiplizierte Polynomform für das Poly1d hat, aber das Horner-Schema arbeitet ja ganz anders und ansonsten könnte ich höchstens händisch den Mist schriftlich ausrechenen für x^3 x^4 usw. aber das kann ja wohl kaum der Sinn der Sache sein.
Ich scheitere hier am Matheteil xD nicht unbedingt am programierteil. Vielleicht kann man es ja irgendwie mit linalg lösen aber kp, Keine Lust mehr.


Rekursion. So habe ich das zumidnest gelöst.
Der Rekursionsfall ist eigentlich ganz einfach, du musst lediglich das Polynom aus dem vorherigen Aufruf mit Werten multiplizieren und einen neuen Wret einfügen.

Ich rate dazu, für ein Polynom mit 3 Koeffizienten einmal händisch das polynom auszumultiplizieren und die Koeffizenten mit denen deselben Polynoms zu vergleichen, wenn du dieses nur für die letzten zei Koeffizienten Ausrechnest(als wäre c==c1 und C1=c2).