1.2 Berechnung von Nullstellen mit dem Newtonschen Näherungsverfahren
Entwickeln Sie ein Programm, welches die Nullstellen von rationalen Funktionen (= Polynome) dritten Grades nach dem Newtonschen (Isaac Newton, 1643 - 1727) Näherungsverfahren ermittelt.
Sollte nach einer gewissen Anzahl von Schritten keine Nullstelle gefunden sein, so wird mit einem entprechenden Hinweis auf Divergenz abgebrochen.
Eingabe
Koeffizienten a, b, c, d des Polynoms f(x) := ax³ + bx² +cx + d
Erster Schätzwert der Nullstelle Nx
Abbruchkriterium Δx
Kriterium für Divergenz
Hier mein Quellcode:
Wie bekomme ich aber die Gleiche Ausgabe?
Entwickeln Sie ein Programm, welches die Nullstellen von rationalen Funktionen (= Polynome) dritten Grades nach dem Newtonschen (Isaac Newton, 1643 - 1727) Näherungsverfahren ermittelt.
Sollte nach einer gewissen Anzahl von Schritten keine Nullstelle gefunden sein, so wird mit einem entprechenden Hinweis auf Divergenz abgebrochen.
Eingabe
Koeffizienten a, b, c, d des Polynoms f(x) := ax³ + bx² +cx + d
Erster Schätzwert der Nullstelle Nx
Abbruchkriterium Δx
Kriterium für Divergenz
Hier mein Quellcode:
Java:
public class NewtonApp {
// Datenfelder
private double a, b, c, d;
public NewtonApp(double a, double b, double c, double d) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
private double f(double x) {
return (a * Math.pow(x, 3)) + (b * Math.pow(x, 2)) + (c * x) + 5;
}
private double fs(double x) {
return (3 * a * Math.pow(x, 2)) - (2 * b * x) + c;
}
// Methode
public double newton(double estimate, double delta) {
double oldResult = estimate;
double newResult;
for (;;) {
newResult = estimate - f(estimate) / fs(estimate);
if (Math.abs(newResult - oldResult) < delta)
break;
estimate = newResult;
oldResult = newResult;
}
return newResult;
}
@Override
public String toString() {
return "[a/b/c/d] = [" + a + "/" + b + "/" + c + "/" + d + "]";
}
public static void main(String[] args) {
NewtonApp calc = new NewtonApp(3.0, -12.4, 2.1, 5.0); // neues Objekt
System.out.println(calc);
System.out.println("Nullstelle = " + calc.newton(3.9, 0.000000001));
}
}
Wie bekomme ich aber die Gleiche Ausgabe?
Zuletzt bearbeitet von einem Moderator: