Nullstellen Newton

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:

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:

Ausgabe


Nullstelle von f(x) := 3,0 x³ - 12,4 x² + 2,1 x + 5,0
Erster Schätzwert der Nullstelle: 3,9
Δx := 0,000000000001
D := 20

0: Nx = 3,900000000000
1: Nx = 3,839839129406
2: Nx = 3,837779413561
3: Nx = 3,837777033120
4: Nx = 3,837777033117
5: Nx = 3,837777033117
Gefundene Nullstelle Nx = 3,837777033117
 

Asgar13

Bekanntes Mitglied
Java:
if(this.erg != erg){
this.erg = erg;
}
else{System.out.println("Gleiches Ergebnis");}

Überprüft das alte mit den neuen Ergebnis.
 

stone71

Mitglied
Vielleicht so etwas, wenn ich es verstanden habe???
Hier kommen dann Zwischenergebnisse... ein paar mehr, aber vielleicht hilft dies!?

Java:
    public double newton(double estimate, double delta) {
        double oldResult = estimate;
        double newResult;
        System.out.println(oldResult);
        for (;;) {
            newResult = estimate - f(estimate) / fs(estimate);
            if (Math.abs(newResult - oldResult) < delta)
                break;
            estimate = newResult;
            oldResult = newResult;
            System.out.println(oldResult);
            
        } 
        return newResult;
    }
 

Neue Themen


Oben