用 C 语言计算泊松概率

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何用C语言计算泊松概率。泊松分布是一种概率分布,用于表示在固定的时间或空间间隔内发生给定数量事件的可能性。你将首先学习如何读取 lambda(λ)参数和 k 值,然后实现泊松概率公式,以计算在给定间隔内恰好发生 k 个事件的概率。

本实验涵盖了编写一个C程序来计算泊松概率的逐步过程,包括处理用户输入、实现泊松概率公式以及打印计算出的概率。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c/BasicsGroup -.-> c/variables("Variables") c/FunctionsGroup -.-> c/math_functions("Math Functions") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/variables -.-> lab-435350{{"用 C 语言计算泊松概率"}} c/math_functions -.-> lab-435350{{"用 C 语言计算泊松概率"}} c/user_input -.-> lab-435350{{"用 C 语言计算泊松概率"}} c/output -.-> lab-435350{{"用 C 语言计算泊松概率"}} end

读取 λ(lambda)和 k

在这一步中,你将学习如何读取用于在C语言中计算泊松概率的 lambda(λ)参数和 k 值。泊松分布是一种概率分布,用于表示在固定的时间或空间间隔内发生给定数量事件的可能性。

首先,让我们创建一个新的C文件来实现我们的泊松概率计算:

cd ~/project
nano poisson_prob.c

现在,添加以下代码来读取 lambda 和 k 值:

#include <stdio.h>
#include <math.h>

int main() {
    double lambda;
    int k;

    printf("输入 lambda(事件的平均数量):");
    scanf("%lf", &lambda);

    printf("输入 k(发生次数):");
    scanf("%d", &k);

    printf("Lambda(λ):%.2f\n", lambda);
    printf("k:%d\n", k);

    return 0;
}

示例输出:

输入 lambda(事件的平均数量):3.5
输入 k(发生次数):2
Lambda(λ):3.50
k:2

让我们来分析一下这段代码:

  • 我们使用 double 类型来存储 lambda,以允许使用小数值
  • scanf() 用于读取用户输入的 lambda 和 k
  • %lf 格式说明符用于双精度浮点数(长浮点数)值
  • %d 格式说明符用于整数值
  • 我们打印输入的值以确认输入

编译程序:

gcc -o poisson_prob poisson_prob.c -lm

运行程序:

./poisson_prob

P(X=k)=e^(-λ) * λ^k / k!

在这一步中,你将实现泊松概率公式,以计算在给定区间内恰好发生 k 个事件的概率。

打开之前的文件来修改代码:

cd ~/project
nano poisson_prob.c

更新代码以包含泊松概率计算:

#include <stdio.h>
#include <math.h>

// 计算阶乘的函数
double factorial(int n) {
    if (n <= 1) return 1;
    double result = 1;
    for (int i = 2; i <= n; i++) {
        result *= i;
    }
    return result;
}

// 计算泊松概率
double poisson_probability(double lambda, int k) {
    double numerator = pow(lambda, k) * exp(-lambda);
    double denominator = factorial(k);
    return numerator / denominator;
}

int main() {
    double lambda;
    int k;

    printf("输入 lambda(事件的平均数量):");
    scanf("%lf", &lambda);

    printf("输入 k(发生次数):");
    scanf("%d", &k);

    double probability = poisson_probability(lambda, k);

    printf("Lambda(λ):%.2f\n", lambda);
    printf("k:%d\n", k);
    printf("概率 P(X = %d):%.4f\n", k, probability);

    return 0;
}

编译程序:

gcc -o poisson_prob poisson_prob.c -lm

示例输出:

输入 lambda(事件的平均数量):3.5
输入 k(发生次数):2
Lambda(λ):3.50
k:2
概率 P(X = 2):0.1674

代码中的关键点:

  • factorial() 函数计算 k!
  • poisson_probability() 实现泊松概率公式
  • pow() 计算 λ^k
  • exp() 计算 e^(-λ)
  • 结果是恰好发生 k 个事件的概率

运行程序:

./poisson_prob

打印概率

在这最后一步中,你将通过添加更详细的概率打印和格式化功能来增强泊松概率计算程序。

打开之前的文件来修改代码:

cd ~/project
nano poisson_prob.c

更新代码以改进概率呈现:

#include <stdio.h>
#include <math.h>

// 计算阶乘的函数
double factorial(int n) {
    if (n <= 1) return 1;
    double result = 1;
    for (int i = 2; i <= n; i++) {
        result *= i;
    }
    return result;
}

// 计算泊松概率
double poisson_probability(double lambda, int k) {
    double numerator = pow(lambda, k) * exp(-lambda);
    double denominator = factorial(k);
    return numerator / denominator;
}

int main() {
    double lambda;
    int k;

    printf("泊松概率计算器\n");
    printf("------------------------------\n");

    printf("输入 lambda(事件的平均数量):");
    scanf("%lf", &lambda);

    printf("输入 k(发生次数):");
    scanf("%d", &k);

    double probability = poisson_probability(lambda, k);

    printf("\n计算结果:\n");
    printf("Lambda(λ):%.2f\n", lambda);
    printf("k:%d\n", k);
    printf("概率 P(X = %d):%.4f\n", k, probability);
    printf("百分比:%.2f%%\n", probability * 100);

    return 0;
}

编译程序:

gcc -o poisson_prob poisson_prob.c -lm

示例输出:

泊松概率计算器
------------------------------
输入 lambda(事件的平均数量):3.5
输入 k(发生次数):2

计算结果:
Lambda(λ):3.50
k:2
概率 P(X = 2):0.1674
百分比:16.74%

主要改进:

  • 为计算器添加了标题
  • 包含了百分比表示
  • 改进了输出格式
  • 输出部分更具描述性

运行程序:

./poisson_prob

总结

在本实验中,你学习了如何读取用于在C语言中计算泊松概率的lambda(λ)参数和k值。然后,你实现了泊松概率公式,以计算在给定区间内恰好发生k个事件的概率。泊松分布是一种概率分布,表示在固定的时间或空间间隔内发生给定数量事件的可能性。你还学习了如何创建一个阶乘函数来支持泊松概率计算。

本实验涵盖的关键步骤包括读取输入值、使用公式 P(X=k)=e^(-λ)*λ^k/k! 计算泊松概率,以及打印计算出的概率。