S
Speflisch
Gast
Hallo,
ich versuche, das Newton-Verfahren mit Java zu realisieren. Hierbei sollen nur Polynome angegeben werden, also sowas zum Beispiel:
x^5 - 4*x^4 + 7*x^3 + 3*x^2 + 0*x^1 + 5
Folgender Quellcode:
An den Konstruktor wird der Grad des Polynoms übergeben und die Koeffizienten. Alle, inklusive Nullen.
Mit CalcNextNullstelle() wird die Formel aufgerufen und das nächste x berechnet:
f(xi)
xi+1 = xi - ——————
f'(xi)
Mit Nullstellen() wird das ganze automatisiert und auf 0.00001 Stellen genau gerechnet.
Nun mein Anliegen. Mein Problem ist, dass ich immer nur eine Nullstelle damit errechnen kann. Also wenn ich zum Beispiel eine Quadratische Funktion habe, welche den Graphen an 2 Stellen schneidet bekomme ich trotzdem immer nur eine Nullstelle geliefert. Habe schon probiert curNullstelle zu variieren, sprich den Startwert, aber hat auch nichts gebracht.
Gruß!
ich versuche, das Newton-Verfahren mit Java zu realisieren. Hierbei sollen nur Polynome angegeben werden, also sowas zum Beispiel:
x^5 - 4*x^4 + 7*x^3 + 3*x^2 + 0*x^1 + 5
Folgender Quellcode:
Java:
public class Graph
{
double[] derivedKoeff;
double[] koeff;
int grad;
double curNullstelle;
public Graph(int grad, double[] koeff)
{
this.koeff = koeff;
derivedKoeff = new double[grad + 1];
for(int i = 0; i <= grad; i++)
{
derivedKoeff[i] = koeff[i] * (grad - i);
}
this.grad = grad;
curNullstelle = 0;
}
private void CalcNextNullstelle()
{
double wert = 0;
for(int i = 0; i <= grad; i++)
{
wert += koeff[i] * Math.pow(curNullstelle, grad - i);
}
double derivedWert = 0;
for(int i = 0; i <= grad - 1; i++)
{
derivedWert += koeff[i] * Math.pow(curNullstelle, grad - (i + 1));
}
curNullstelle -= wert / derivedWert;
}
// 4x^3 + 5x^2 + 2x + 1
//sollte double[] sein
public double Nullstellen()
{
double temp;
do
{
temp = curNullstelle;
CalcNextNullstelle();
}
while(Math.abs(temp - curNullstelle) > 0.000001);
//WAS NOCH NICHT FUNKTIONIERT: Mehrere Nullstellen ausgeben. es geht immer nur eine
return curNullstelle;
}
}
An den Konstruktor wird der Grad des Polynoms übergeben und die Koeffizienten. Alle, inklusive Nullen.
Mit CalcNextNullstelle() wird die Formel aufgerufen und das nächste x berechnet:
f(xi)
xi+1 = xi - ——————
f'(xi)
Mit Nullstellen() wird das ganze automatisiert und auf 0.00001 Stellen genau gerechnet.
Nun mein Anliegen. Mein Problem ist, dass ich immer nur eine Nullstelle damit errechnen kann. Also wenn ich zum Beispiel eine Quadratische Funktion habe, welche den Graphen an 2 Stellen schneidet bekomme ich trotzdem immer nur eine Nullstelle geliefert. Habe schon probiert curNullstelle zu variieren, sprich den Startwert, aber hat auch nichts gebracht.
Gruß!