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
