Frage von seanjohn123, 43

Warum wird diese Fkt. nicht anständig berechnet(Nullstellenberechnung, Bisektionsverfahren)?

public class Bisektion {

public static void main(String[] args) {

double Nst = bisektion(-1000, 1000, 1000000); // Funtkioniert ab 1Mio (eig. Wert für Epsilon näherungsweise 0 z.B. 0.01)

    System.out.println("Ermittelte Nullstelle: " + Nst);
    System.out.println("Funktionswert an dieser Stelle: " + fkt1(Nst));
    
}

public static double fkt1(double x) {

double fx;
//fx = x * x * x - 24 * x * x + 59 * x + 420;
//fx = -x + 5;
fx = -1/Math.exp(x) + 1e20; // Programm läuft endlos / Fkt. übersetzt: -1/2.178^(x) + 10^20
return fx;
}

public static double bisektion(double lower, double upper, double epsilon) {

double mid = 0;
int Zähler = 0;

while (!((fkt1(mid) < epsilon) && (fkt1(mid) > 0))) { // solange nicht zwischen epsilon u. null liegt

    Zähler++;

    mid = (lower + upper) / 2;

    if (fkt1(lower) * fkt1(mid) <= 0) { // wenn das Ergb. negativ dann Verschiebung von rechts nach links u. andersrum
    upper = mid;            
    } else {            
    lower = mid;            
    }
    System.out.println( "Middle: " + fkt1(mid) + " yLower: " + fkt1(lower) + " yUpper: " + fkt1(upper)); //Veranschaulichung
}
System.out.println("Anzahl d. Schleifendurchgänge: " + Zähler);
return mid;
}

}

Dabei handelt es sich um die Funktion, welche in der Methode nicht auskommentiert ist. 

Hier ein Link, welches das Bisektionsverfahren gut in 4 min erklärt:

https://www.youtube.com/watch?v=poOt34st_ao

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von maximilianus7, 24

was ist mit (den) anderen funktionen? liefern die richtige ergebnisse?

wenn ja,könnte es sein, das double für die erforderte genauigkeit (extreme absolute grösse) nicht aussreicht?

gib mal die 1. hundert zwischenergebnisse aus und schau, ob die serie konvergiert.

Kommentar von seanjohn123 ,

Es konvegiert gar nicht, es kommen immer die selben Werte raus, was in einer endlos Schleife endet.

Middle: 622592.0 yLower: -81920.0 yUpper: 622592.0

(andere Funktionen werden korrekt berechnet)

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten