以下是一个简单的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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录