Введение
В этом лабораторном практикуме вы научитесь вычислять вероятности Пуассона на языке C. Распределение Пуассона — это распределение вероятностей, которое выражает вероятность того, что определённое количество событий произойдёт в заданном интервале времени или пространства. Сначала вы узнаете, как считать параметр лямбда (λ) и значение k, а затем реализуете формулу вероятности Пуассона для вычисления вероятности того, что ровно k событий произойдут в данном интервале.
Практикум охватывает пошаговый процесс написания программы на C для вычисления вероятностей Пуассона, включая обработку пользовательского ввода, реализацию формулы вероятности Пуассона и вывод вычисленной вероятности.
Чтение λ (лямбда) и k
В этом шаге вы узнаете, как считать параметр лямбда (λ) и значение k для вычисления вероятностей Пуассона на языке C. Распределение Пуассона — это распределение вероятностей, которое выражает вероятность того, что определённое количество событий произойдёт в заданном интервале времени или пространства.
Сначала создадим новый файл C для реализации вычисления вероятности Пуассона:
cd ~/project
nano poisson_prob.c
Теперь добавьте следующий код для чтения значений лямбда и k:
#include <stdio.h>
#include <math.h>
int main() {
double lambda;
int k;
printf("Введите лямбда (среднее число событий): ");
scanf("%lf", &lambda);
printf("Введите k (число событий): ");
scanf("%d", &k);
printf("Лямбда (λ): %.2f\n", lambda);
printf("k: %d\n", k);
return 0;
}
Пример вывода:
Введите лямбда (среднее число событий): 3.5
Введите k (число событий): 2
Лямбда (λ): 3.50
k: 2
Рассмотрим код подробнее:
- Мы используем
doubleдля лямбда, чтобы позволить вводить десятичные значения. scanf()используется для чтения пользовательского ввода для лямбда и k.- Используется спецификатор формата
%lfдля double (long float) значений. - Используется спецификатор формата
%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("Введите лямбда (среднее число событий): ");
scanf("%lf", &lambda);
printf("Введите k (число событий): ");
scanf("%d", &k);
double probability = poisson_probability(lambda, k);
printf("Лямбда (λ): %.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
Пример вывода:
Введите лямбда (среднее число событий): 3.5
Введите k (число событий): 2
Лямбда (λ): 3.50
k: 2
Вероятность P(X = 2): 0.1674
Ключевые моменты в коде:
- Функция
factorial()вычисляет k! poisson_probability()реализует формулу вероятности Пуассонаpow()вычисляет λ^kexp()вычисляет 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("Введите лямбда (среднее число событий): ");
scanf("%lf", &lambda);
printf("Введите k (число событий): ");
scanf("%d", &k);
double probability = poisson_probability(lambda, k);
printf("\nРезультаты вычислений:\n");
printf("Лямбда (λ): %.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
Пример вывода:
Калькулятор вероятности Пуассона
--------------------------------
Введите лямбда (среднее число событий): 3.5
Введите k (число событий): 2
Результаты вычислений:
Лямбда (λ): 3.50
k: 2
Вероятность P(X = 2): 0.1674
Процент: 16.74%
Основные улучшения:
- Добавлено заголовок для калькулятора
- Включено представление в процентах
- Улучшено форматирование вывода
- Более описательные разделы вывода
Запускаем программу:
./poisson_prob
Резюме
В этом лабораторном практикуме вы изучили, как считывать параметр лямбда (λ) и значение k для вычисления вероятностей Пуассона на языке C. Затем вы реализовали формулу вероятности Пуассона для расчёта вероятности того, что ровно k событий произойдёт в заданном интервале. Распределение Пуассона — это распределение вероятностей, которое выражает вероятность того, что заданное число событий произойдёт в фиксированном интервале времени или пространства. Вы также изучили, как создать функцию факториала для поддержки вычисления вероятности Пуассона.
Ключевые шаги, рассмотренные в этом практикуме, включают считывание входных значений, вычисление вероятности Пуассона по формуле P(X=k)=e^(-λ)*λ^k/k! и вывод полученной вероятности.



