Nullstelle von Polynomen...
-
Servus,
ich weiß, daß hier schon viel darüber geschrieben wurde, aber nichts paßt wirklich zu meinem Problem.
Mein Polynom hat immer folgende Gestalt:
f(x)=x^n + x^(n-1) + x^(n-2) + ... + x^1 + a0*x^0a0 ist konstant, sämtliche Koeffizienten a_i (bis auf i=0) sind 1, n kann von 1 bis 50 gehen. Bevor ich mit der GNU Scientific Lib mit Kanonen auf Spatzen schieße, wollte ich mal nachfragen, ob euch eine Lösung einfällt ?
Gruß Winn
-
Hallo.
Mir fällt erstmal folgende Vereinfachung ein.
Vielleicht hat jemand eine Idee, wie man es elegant auflösen kann.
-
Bei niedrigen Polynomgraden funktioniet Polynomdivision, wobei dabei aber eine Nullstelle bekannt sein muss. Dazu siehe FaQ..
Ansonsten gibt es so ein Verfahren von so einem, dessen Namen und Verfahren ich nicht kenne.
-
Mein Ansatz:
> f(x) = \sum_{i=1}^n x^i - a = 0 > f(x) = \sum_{i=1}^n x^i = aDa mir die Lösung auf ein paar Stellen nach dem Komma reichen... hier meine Brute Force Methode Gruß Winn
#include <stdio.h> const double DeltaLength = 150; const double AbsLength = 1300; double CalcFactor(double Value, int Order); double PowFactor(double Value, int Order); int main() { int Working,Quantity; double P,Sum,OldP,Inc,Val; Quantity=10; Working=1; Inc=1; Val=0.; OldP=0.; P=0.; Sum=AbsLength/DeltaLength; while (Working<100) { Val=CalcFactor(P,Quantity); if (Val>Sum) { Inc/=10;P=OldP;} OldP=P; if (Val<Sum) { P+=Inc; } Working++; } printf("P=%+lg\tOrdnung=%2d\tA=%+lg\n",P,Quantity,Sum); return 0; } double CalcFactor(double Value, int Order) { double Val; int i; Val=0.; for(i=1;i<=Order;i++) Val+=PowFactor(Value,i); return Val; } double PowFactor(double Value, int Order) { double Val; int i; Val=1; for(i=1;i<=Order;i++) Val*=Value; return Val; }
-
Die Funktion CalcFactor() kannst du dir sparen! space hat bereits oben beschrieben, wie man eine geometrische Summe viel leichter ausrechnet. Du solltest mehr auf die Antworten achten, die dir geboten werden.
-
Wie wär's mit dem Newton-Verfahren?
(Das benutzt z.B. ein grafischer Taschenrechner, wenn er Nullstellen / Extremstellen und Wendepunkte berechnet.
Es handelt sich um ein Rekursionverfahren
Ansatz ist folgender:
xn+1 = xn - f(xn) / f'(xn)Ich hoffe du kannst was damit anfangen