Двойные интегралы и метод Монте-Карло ожидаемого значения в Java

Следующий алгоритм хорошо работает для одномерных случаев, но я хотел бы изменить его для обработки двойных интегралов. Как я могу это сделать?

class doubleIntMonteCarlo
{
    private static double f(double x)
    {
        return 1 / Math.pow( x , 2 );
    }

    public static double doubleIntMonteCarlo(double a, double b, int n)
    {
        double xSum = 0D, ySum = 0D, sum = 0D;

        for (int i = 0; i < n; i++)
        {
            xSum = a + Math.random() * Math.abs( b - a );
            sum += f(xSum);
        }
        return Math.abs( b - a ) * sum / n;
    }
}

public class MonteCarloIntegration 
{
    public static void main(String[] args) 
    {
        System.out.println(doubleIntMonteCarlo.doubleIntMonteCarlo(10, 250, 100000));
    }
}

person Nerva    schedule 21.06.2014    source источник


Ответы (1)


Попробуй это:

public static double doubleIntMonteCarlo(double a, double b, double c, double d, int n)
{
     double sum = 0D, xSum = 0D, ySum = 0D;

     for (int i = 0; i < n; i++)
     {
           xSum = a + Math.random() * Math.abs(b - a);
           ySum = c + Math.random() * Math.abs(d - c);
           sum += f(xSum, ySum);
     }
     return Math.abs(b - a) * Math.abs(d - c) * sum / n;
}
person Yevgeniy.Chernobrivets    schedule 21.06.2014
comment
Я не могу проголосовать, но спасибо! Я отредактировал ваш ответ из-за некоторых ошибок в синтаксисе! и лол я был так близок! - person Nerva; 21.06.2014
comment
Рад помочь. Извините за ошибки, я тестировал это на C # :). - person Yevgeniy.Chernobrivets; 21.06.2014