2項分布による生起確率の計算例です。
//----------------------------------------------------------------- // list_66.c: // 2項分布のエミュレート //----------------------------------------------------------------- #include <stdio.h> #include <math.h> #define N 35 #define P 0.2 //----------------------------------------------------------------- double binomial_p(int n,double p,int bk); unsigned long long calc_casen(int n,int r); //----------------------------------------------------------------- int main() { int i,pi; //-------------------------------------------------- // 二項分布のエミュレート(確率の変化): // 生起確率が大きくなると分布が回数大の方へ移動 //------------------------------------------------- printf("**確率の変化\n"); printf("生起回数\t生起確率\n"); printf("\t"); for(pi=1;pi<=5;pi++) printf("%.1lf\t",P*pi); printf("\n"); for(i=0;i<=N;i++){ printf("%d:\t",i); for(pi=1;pi<=5;pi++){ printf("%.1lf\t",binomial_p(N,P*pi,i)*100); } printf("\n"); } //-------------------------------------------------- // 二項分布のエミュレート(総事象数の変化): // 総事象数が増すと、分布が左右対照に近くなる //-------------------------------------------------- printf("\n**事象数の変化\n"); printf("生起回数\tその確率\n"); printf("\t"); for(pi=1;pi<=5;pi++) printf("%d\t",5*pi); printf("\n"); for(i=1;i<=N;i++){ printf("%d:\t",i); for(pi=1;pi<=5;pi++){ printf("%.2lf\t",binomial_p(5*pi,P,i)*100); } printf("\n"); } return 0; } //----------------------------------------------------------------- // 2項分布(B(n,p))の確率計算 //----------------------------------------------------------------- // 確率pで毎回独立に起こる事象がn回のうちk回起こる確率: // P{k}=nCk*p^k*(1-p)^(n-k) //----------------------------------------------------------------- double binomial_p(int n,double p,int bk) { double q=(1-p),bp; bp = calc_casen(n,bk) * pow(p,bk) * pow(q,n-bk); return bp; } //----------------------------------------------------------------- // 組合せ数 nCr の計算[Pascalの3角形による方法] //----------------------------------------------------------------- unsigned long long calc_casen(int n,int r) { int i,j,nn=n; unsigned long long* a= (unsigned long long*)calloc(n,sizeof(unsigned long long)); unsigned long long retv; if(nn-r<r) r=nn-r; if(r==0) return 1; if(r==1) return nn; for(i=1;i<r;i++) a[i]=i+2; for(i=3;i<=nn-r+1;i++){ a[0]=i; for(j=1;j<r;j++) a[j]+=a[j-1]; } retv = a[r-1]; free(a); return retv; } |
**確率の変化 生起回数 生起確率 0.2 0.4 0.6 0.8 1.0 0: 0.0 0.0 0.0 0.0 0.0 1: 0.4 0.0 0.0 0.0 0.0 2: 1.5 0.0 0.0 0.0 0.0 3: 4.1 0.0 0.0 0.0 0.0 4: 8.3 0.0 0.0 0.0 0.0 5: 12.9 0.1 0.0 0.0 0.0 6: 16.1 0.2 0.0 0.0 0.0 7: 16.6 0.7 0.0 0.0 0.0 8: 14.6 1.6 0.0 0.0 0.0 9: 10.9 3.2 0.0 0.0 0.0 10: 7.1 5.5 0.0 0.0 0.0 11: 4.0 8.3 0.0 0.0 0.0 12: 2.0 11.1 0.1 0.0 0.0 13: 0.9 13.0 0.3 0.0 0.0 14: 0.4 13.7 0.8 0.0 0.0 15: 0.1 12.8 1.7 0.0 0.0 16: 0.0 10.6 3.1 0.0 0.0 17: 0.0 7.9 5.3 0.0 0.0 18: 0.0 5.3 7.9 0.0 0.0 19: 0.0 3.1 10.6 0.0 0.0 20: 0.0 1.7 12.8 0.1 0.0 21: 0.0 0.8 13.7 0.4 0.0 22: 0.0 0.3 13.0 0.9 0.0 23: 0.0 0.1 11.1 2.0 0.0 24: 0.0 0.0 8.3 4.0 0.0 25: 0.0 0.0 5.5 7.1 0.0 26: 0.0 0.0 3.2 10.9 0.0 27: 0.0 0.0 1.6 14.6 0.0 28: 0.0 0.0 0.7 16.6 0.0 29: 0.0 0.0 0.2 16.1 0.0 30: 0.0 0.0 0.1 12.9 0.0 31: 0.0 0.0 0.0 8.3 0.0 32: 0.0 0.0 0.0 4.1 0.0 33: 0.0 0.0 0.0 1.5 0.0 34: 0.0 0.0 0.0 0.4 0.0 35: 0.0 0.0 0.0 0.0 100.0 **事象数の変化 生起回数 その確率 5 10 15 20 25 1: 40.96 26.84 13.19 5.76 2.36 2: 20.48 30.20 23.09 13.69 7.08 3: 5.12 20.13 25.01 20.54 13.58 4: 0.64 8.81 18.76 21.82 18.67 5: 0.03 2.64 10.32 17.46 19.60 6: 0.00 0.55 4.30 10.91 16.33 7: 0.00 0.08 1.38 5.45 11.08 8: 0.00 0.01 0.35 2.22 6.23 9: 0.00 0.00 0.07 0.74 2.94 10: 0.00 0.00 0.01 0.20 1.18 11: 0.00 0.00 0.00 0.05 0.40 12: 0.00 0.00 0.00 0.01 0.12 13: 0.00 0.00 0.00 0.00 0.03 14: 0.00 0.00 0.00 0.00 0.01 15: 0.00 0.00 0.00 0.00 0.00 16: 0.00 0.00 0.00 0.00 0.00 17: 0.00 0.00 0.00 0.00 0.00 18: 0.00 0.00 0.00 0.00 0.00 19: 0.00 0.00 0.00 0.00 0.00 20: 0.00 0.00 0.00 0.00 0.00 21: 0.00 0.00 0.00 0.00 0.00 22: 0.00 0.00 0.00 0.00 0.00 23: 0.00 0.00 0.00 0.00 0.00 24: 0.00 0.00 0.00 0.00 0.00 25: 0.00 0.00 0.00 0.00 0.00 26: 0.00 0.00 0.00 0.00 0.00 27: 0.00 0.00 0.00 0.00 0.00 28: 0.00 0.00 0.00 0.00 0.00 29: 0.00 0.00 0.00 0.00 0.00 30: 0.00 0.00 0.00 0.00 0.00 31: 0.00 0.00 0.00 0.00 0.00 32: 0.00 0.00 0.00 0.00 0.00 33: 0.00 0.00 0.00 0.00 0.00 34: 0.00 0.00 0.00 0.00 0.00 35: 0.00 0.00 0.00 0.00 0.00 |