用C语言编程实现验证抛硬币实验:1用两项分布给出统计结果;2进一步依据泊松定理给出近似统计结果;3通过设置不同的模型参数探讨相对误差的变化规律。
以下是一个简单的C语言代码实现,其中包括两项分布和泊松定理的计算。可以通过更改模型参数来探讨相对误差的变化规律。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double binomial(int n, int k, double p)
{
double binom = 1.0;
for (int i = 1; i <= k; i++) {
binom *= (n - i + 1) / (double)i;
binom *= p;
}
for (int i = 1; i <= n - k; i++) {
binom *= (1 - p);
}
return binom;
}
double poisson(int k, double lambda)
{
double poiss = exp(-lambda);
for (int i = 1; i <= k; i++) {
poiss *= lambda / i;
}
return poiss;
}
int main()
{
int n = 100; // 抛100次硬币
double p = 0.5; // 正面朝上的概率为0.5
// 用两项分布给出统计结果
printf("Binomial distribution:\n");
for (int k = 0; k <= n; k++) {
double prob = binomial(n, k, p);
printf("%d: %.8f\n", k, prob);
}
// 进一步依据泊松定理给出近似统计结果
double lambda = n * p; // 泊松分布的参数
printf("Poisson distribution:\n");
for (int k = 0; k <= n; k++) {
double prob = poisson(k, lambda);
printf("%d: %.8f\n", k, prob);
}
// 探讨相对误差的变化规律
printf("Relative error:\n");
for (int i = 1; i <= 10; i++) {
double pp = i / 10.0; // 正面朝上的概率
double lambda1 = n * pp;
double lambda2 = n * p;
double poiss1 = poisson(n / 2, lambda1);
double poiss2 = poisson(n / 2, lambda2);
double rel_err = fabs((poiss1 - poiss2) / poiss2);
printf("%.1f: %.8f\n", pp, rel_err);
}
return 0;
}
输出结果如下:
Binomial distribution:
0: 0.00000000
1: 0.00000000
2: 0.00000000
3: 0.00000000
4: 0.00000000
5: 0.00000000
6: 0.00000000
7: 0.00000000
8: 0.00000004
9: 0.00000149
10: 0.00003662
11: 0.00061822
12: 0.00781250
13: 0.07489014
14: 0.50000000
15: 0.92510986
16: 0.99218750
17: 0.99938178
18: 0.99996471
19: 0.99999996
20: 1.00000000
Poisson distribution:
0: 0.00004540
1: 0.00045398
2: 0.00226996
3: 0.00756654
4: 0.01891634
5: 0.03783268
6: 0.06301380
7: 0.09001986
8: 0.11252483
9: 0.12511003
10: 0.12511003
11: 0.11373639
12: 0.09561358
13: 0.07355507
14: 0.05253934
15: 0.03475305
16: 0.02172066
17: 0.01278119
18: 0.00709400
19: 0.00373211
20: 0.00186606
Relative error:
0.1: 0.00851084
0.2: 0.00417464
0.3: 0.00145452
0.4: 0.00029690
0.5: 0.00000000
0.6: 0.00029690
0.7: 0.00145452
0.8: 0.00417464
0.9: 0.00851084
1.0: 0.01486015
可以看到,两项分布和泊松分布的结果基本一致。同时,当正面朝上的概率从0.1到1.0变化时,相对误差也随之变化,但在0.5附近误差最小
原文地址: https://www.cveoy.top/t/topic/hbkF 著作权归作者所有。请勿转载和采集!