public class Bisektion {
public static void main(String[] args) {
double Nst = bisektion(-10, 10, 0.01);
System.out.println("Ermittelte Nullstelle: " + Nst);
System.out.println("Funktionswert an dieser Stelle: " + fkt1(Nst));
System.out.println();
double Nst2 = bisektion(-1000, 1000, 0.01);
System.out.println("Ermittelte Nullstelle: " + Nst2);
System.out.println("Funktionswert an dieser Stelle: " + fkt2(Nst2));
}
// Test Funktionen
public static double fkt1(double x) {
double fx;
//fx = x * x * x - 24 * x * x + 59 * x + 420;
fx = x + 5;
return fx;
}
public static double fkt2(double x) {
double fx2;
fx2 = -1/Math.exp(x) + 1e20;
return fx2;
}
public static double bisektion(double lower, double upper, double epsilon) {
double mid = lower;
double width = upper - lower; //20
// Intervall
while (width > epsilon) { //20 > 0.1
mid = (lower + upper) / 2;//0 //-5
if (fkt1(lower) * fkt1(mid) <= 0) { // if root is in [lower, mid] //-5 * 0
upper = mid; // move upper left //upper = 0
} else { // else root is in (mid, upper]
lower = mid; // move lower right
}
width = upper - lower; //width = 10
System.out.println("root = " + mid );
}
return mid;
}
} // f(lower)<0 und f(upper)>0 // f besitzt nullstelle im Intervall [lower,upper] // middle // entweder lower oder upper durch ein kriterium mit middle ersetzen // stoppen wenn funktionswert näherungsweise 0 ist // ==> betrag kleiner als vorgegebene zahl epsilon