Prawdopodobieństwo zarażenia (Java)
Wpis przeniesiony ze zlikwidowanej witryny
Prawdopodobieństwo zarażenia np. koronawirusem jest zdarzeniem rzadkim. Do obliczeń możemy użyć wzoru Poissona.
Wzór Poissona
Opis teoretyczny z przykładami ręcznych obliczeń znajduje się we wpisie Zielonego Smoka: Prawdopodobieństwo zdarzeń rzadkich
A Ja z moja siostrą Suitą przygotowałysmy wpis Prawdopodobieństwo zarażenia koronawirusem, w którym pokazujemy jak to obliczyć ręcznie (albo raczej ‘łapnie’).
Do obliczeń możemy wykorzystać poniższą klasę:
Klasa Poisson
package poisson; public class Poisson { private Poisson() {} /** * Rozkład Poissona * * @param n - liczebnośc próby * @param p - prawdopodobieństwo zdarzenia sprzyjającego * @param k - zakładana liczba sukcesów * @return prawdopodobieństwo k sukcesów w n-elementowej próbie */ public static double poisson(long n, double p, int k) { double lambda = n * p; long f = factorial(k); return Math.pow(Math.E, -1 * lambda) * Math.pow(lambda, k) / f; } /** * Oblicza n! (n silnia) * * @param n - liczba, której silnię obliczamy * @return - obliczona silnia */ public static long factorial(int n) { if (n == 0) { return 1; } long sum = 1; for (int i = 1; i < n + 1; i++) { sum = Math.multiplyExact(sum, i); } return sum; } public static void main(String[] args) { long n = 100; double p = 0.00001; int k = 1; double ps = poisson(n, p, k); System.out.format("ps = %f", ps); } }
A oto wynik:
ps = 0,000999