2015-10-11 3 views
1

Если вы не уверены в том, что означает «Пуассоновское определение с использованием нормального приближения», перейдите по этой ссылке и проверьте тексты внутри желтой ячейки. https://onlinecourses.science.psu.edu/stat414/node/180Пуассоновская информация с использованием нормального приближения в Java

Вот простой снимок математики по ссылке.

Р (Y≥9) = P (Y> 8,5) = Р (Z> (8.5-6.5) /√6.5) = Р (Z> 0,78) = 0,218

Таким образом, чтобы получить значение в .218, мы используем правило интеграции Simpson, которое объединяет функцию (Реализовано в методе с именем «f» из кода ниже) от «минус бесконечность» до значения, равного этому >> »((8.5-6.5)/√6.5)) "

R успешно дает правильный выход. Но в Java, когда я реализовал код ниже, скопированный из «http://introcs.cs.princeton.edu/java/93integration/SimpsonsRule.java.html» я получаю «+0,28360853976343986», который должен был «0,218» Является ли это какой-либо, как из-за отрицательного значения бесконечности, я использую, который is "Double.MIN_VALUE"

Это код на Java. См. В самом конце моих ВХОДОВ в основном методе.

 * Standard normal distribution density function. 
     * Replace with any sufficiently smooth function. 
     **********************************************************************/ 
     public static double f(double x) { 
      return Math.exp(- x * x/2)/Math.sqrt(2 * Math.PI); 
     } 

     /********************************************************************** 
     * Integrate f from a to b using Simpson's rule. 
     * Increase N for more precision. 
     **********************************************************************/ 
     public static double integrate(double a, double b) { 
      int N = 10000;     // precision parameter 
      double h = (b - a)/(N - 1);  // step size 

      // 1/3 terms 
      double sum = 1.0/3.0 * (f(a) + f(b)); 

      // 4/3 terms 
      for (int i = 1; i < N - 1; i += 2) { 
      double x = a + h * i; 
      sum += 4.0/3.0 * f(x); 
      } 

      // 2/3 terms 
      for (int i = 2; i < N - 1; i += 2) { 
      double x = a + h * i; 
      sum += 2.0/3.0 * f(x); 
      } 

      return sum * h; 
     } 



     // sample client program 
     public static void main(String[] args) { 
      double z = (8.5-6.5)/Math.sqrt(6.5); 
      double a = Double.MIN_VALUE; 
      double b = z; 
      System.out.println(integrate(a, b)); 
     } 

У кого-нибудь есть идеи? Я попытался использовать метод класса «Пуассонраспределения» Apache «normalApproximateProbability (int x)». Но проблема в том, что этот метод принимает «int».

У кого-нибудь есть лучшие идеи о том, как получить правильный вывод или какой-либо другой код. Я тоже использовал другую библиотеку для simpson, но получаю тот же результат.

Мне нужно, чтобы это было сделано в Java.

+0

Взгляните на [этот вопрос] (http://stackoverflow.com/questions/3884793/minimum-values-and-double-min-value-in-java). 'Double.MIN_VALUE' может быть не так, как вы думаете ... – lrnzcig

+0

Пробовал все. «-Double.MIN_VALUE», «-Double.MAX_VALUE», «Double.NEGATIVE_INFINITY», нет надежды. – Adnan

+0

Бег вне времени сегодня. Я думаю, вы должны использовать '-Double.MAX_VALUE'. У меня было время немного отладить ваш код, и я думаю, что вы можете столкнуться с «типичными» ошибками округления с плавающей запятой (см. [This] (http://docs.oracle.com/cd/E19957-01/806-3568/ ncg_goldberg.html)). Возможно, вы можете попробовать переписать свою функцию, чтобы вместо перехода от 'a' к' b' с шагом 'h', вы переходите от' b' к 'a'. Я так думаю, что вы могли избежать ошибок, но, пожалуйста, учтите, что это дикая догадка. – lrnzcig

ответ

0

Я попытался протестировать код, написав другой метод, который реализует правило 3/8 Симпсона вместо вашей функции интеграции. Это дало тот же результат, что и тот, который вы получили в первый раз. Поэтому я думаю, что разница возникает, скорее всего, из-за ошибок округления.

+0

Знаете, вместо «Double.MIN_VALUE», я использовал «-150» .. Он дал мне правильный результат. Так странно. Я начал играть с отрицательным числом до -10000, а затем опустил его. , Но да -1 -150 не ответ на этот вопрос. @lrnzcig – Adnan

 Смежные вопросы

  • Нет связанных вопросов^_^