通用的蒙特卡洛算法

71 阅读1分钟

通用的蒙特卡洛算法,利用概率论和统计算法,可以计算π值,积分等。

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