Hi. Vielleicht könnt ihr mir weiter helfen.
Ich möchte das Bisektionverfahren umsetzen mit zwei Funktionen.
Beispiel: 1,2,3,4,5,6,7,8,9,10 und 5.1, 6.1, 7.1
Gesucht: 5,6,7 (Index: 4)
Ansatz:
Problem:
Die bisektion() Methode liefert zwar das richtige Ergebnis, setzt aber nicht das Bisektionverfahren um.
Frage:
Was müsste ich ändern?
Herzlichen Dank im Voraus.
Ich möchte das Bisektionverfahren umsetzen mit zwei Funktionen.
Beispiel: 1,2,3,4,5,6,7,8,9,10 und 5.1, 6.1, 7.1
Gesucht: 5,6,7 (Index: 4)
Ansatz:
Java:
import java.util.ArrayList;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Bisektion<T> {
private ArrayList<T> stream1;
private ArrayList<T> stream2;
private BiFunction<T, T, Double> subtract;
public Bisektion(ArrayList<T> stream1, ArrayList<T> stream2, BiFunction<T, T, Double> subtract) {
this.stream1 = stream1;
this.stream2 = stream2;
this.subtract = subtract;
}
public int bisektion() {
double sum1 = Double.MAX_VALUE;
int sum_i = 0;
for (int i = 0; i <= stream1.size() - stream2.size(); i++) {
double sum2 = 0;
for (int j = 0; j < stream2.size(); j++) {
sum2 += Math.abs(subtract.apply(stream1.get(i + j), stream2.get(j))) / stream2.size();
}
if (sum2 < sum1) {
sum1 = sum2;
sum_i = i;
}
}
return sum_i;
}
public static void main(String[] args) {
Bisektion<Number> bn = new Bisektion<>(
Stream.iterate(1, i -> i + 1).limit(10).collect(Collectors.toCollection(ArrayList::new)),
Stream.of(5.1, 6.1, 7.1).collect(Collectors.toCollection(ArrayList::new)),
(a, b) -> a.doubleValue() - b.doubleValue());
System.out.println(bn.bisektion());
}
}
Problem:
Die bisektion() Methode liefert zwar das richtige Ergebnis, setzt aber nicht das Bisektionverfahren um.
Frage:
Was müsste ich ändern?
Herzlichen Dank im Voraus.