蒙特卡洛方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数来解决很多计算问题的方法。蒙特卡洛方法的名字来源于摩纳哥的一个城市蒙特卡洛,该城市以×××业闻名,而蒙特卡洛方法正是以概率为基础的方法。这里我们使用这种方法求PI的值和椭圆的面积:

求PI:假设有一半径为1的圆,那么其面积就是PI的值,1/4圆的面积就是PI/4。现在有边长为1的正方形包括这1/4的圆,如下图所示:

java算法3_蒙特卡洛方法(Monte Carlo method)求PI和椭圆面积_第1张图片

现在我们随机求得正方形中的点,这些点有的在1/4圆内,假如在1/4圆内的点数为c,总点数为n,则PI/4:1=c:n,从而我们可以求出PI=4*c/n。

如何判断点落在圆内呢,涉及一点数学知识:对于圆,其函数为x的平方+y的平方等于1,对于某点坐标的x和y,x的平方和y的平方和小于1时,说明在圆内。

package com.cloud.algorithm;
public class PI {
    public static void main(String[] args) {
        int n = 100000;
        int count = 0;
        for (int i = 1; i < n; i++) {
            double x = Math.random();
            double y = Math.random();
            if ((x * x + y * y) < 1) {
                count++;
            }
        }
        System.out.println("PI = " + (double) 4 * count / n);
    }
}

对于求圆或者椭圆的面积,其实思路和这个是一模一样的,都是概率统计学的应用。唯一的一点区别就是如何判断点落在椭圆中,椭圆方程如下:

java算法3_蒙特卡洛方法(Monte Carlo method)求PI和椭圆面积_第2张图片

当小于1时,说明落在了椭圆内部。读者可以自己测试下。