Es geht um die nicht auskommentierte Funktion in der Methode "fkt1", alle anderen funktionieren.
Kann mir jemand sagen woran genau es liegt das diese Funktion nicht genau berechnet werden kann ?
Link zur Erklärung des Bisektionsverfahren (4 min):
Kann mir jemand sagen woran genau es liegt das diese Funktion nicht genau berechnet werden kann ?
Link zur Erklärung des Bisektionsverfahren (4 min):
Java:
public static void main(String[] args) {
double Nst = bisektion(-1000, 1000, 0.01);
// Funtkioniert mit Epsilon 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
// bei rekursiver Umsetzung läuft´s mit anschließender Fehlermeldung
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++; // Schleifenzä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;
}
//Veranschaulichung
System.out.println( "Middle: " + fkt1(mid) + " yLower: " + fkt1(lower) + " yUpper: " + fkt1(upper));
}
System.out.println("Anzahl d. Schleifendurchgänge: " + Zähler);
return mid;
}