Класс для схемы Бернулли
Схемой Бернулли называется последовательность независимых испытаний
В теории вероятностей есть формула для вычисления вероятности события в результате выполнения серии последовательных испытаний с неизменной вероятностью исхода при каждом испытании. Пусть серия состоит из n опытов и вероятность успеха в каждом из них равна p. Вероятность того, что при проведении n испытаний успех наступит m раз вычисляется по формуле Бернулли:
$$P_{n}\left(m \right)=C_{n}^{m}p^{m}q^{n-m}$$
Коэффициенты в этой формуле - это биномиальные коэффициенты, вычисляемые по формуле:
$$C_{n}^{m}=n!/\left(m!\left(n-m \right)! \right)$$
Создадим класс, в котором вероятность успеха в одном опыте будет определяться значением поля класса, результат отдельного «опыта» будет моделироваться специальным методом. В качестве значения методом возвращается значение 0 («неудача» с вероятностью q=1-р) и 1 («успех» с вероятностью р). Для определения результата (количества успехов) в серии опытов упомянутый метод переопределим так, что если ему передается аргумент (целое число, определяющее количество опытов в серии), то методом возвращается количество успехов в такой серии. Программный код приведен ниже.
#include#include using namespace std; class Bernoulli{ public: double p; int test(){ int N=1000; int xi; xi=rand()%N; if(xi < p*N) return 1; else return 0;} int test(int n){ int s=0,i; for(i=1; i <=n; i++) s+=test(); return s;} }; int main(){ int i; Bernoulli obj; obj.p=0.3; for(i=1; i <=9; i++) cout << obj.test() << " "; cout << endl; for(i=1; i <=9; i++) cout << i*100 << ": " << obj.test(i*100) << endl; return 0;}