通用的蒙特卡洛算法,利用概率论和统计算法,可以计算π值,积分等。
import java.util.function.BiFunction;
import java.util.function.BiPredicate;
public class MonteCarlo {
public static <R> R monteCarlo(Integer num, BiPredicate<Double, Double> predicate, BiFunction<Integer, Integer, R> function) {
int count = 0;
for (int i = 0; i < num; i++) {
double x = Math.random();
double y = Math.random();
if (predicate.test(x, y)) {
count += 1;
}
}
return function.apply(count, num);
}
}
用法,计算π值:
double PI = MonteCarlo.monteCarlo(10000000, (x, y) -> x * x + y * y <= 1, (c, num) -> Double.valueOf(c) / num * 4)
System.out.println(PI)
输出结果: 3.1415052