Вычисление вероятностей Пуассона на C

CBeginner
Практиковаться сейчас

Введение

В этом лабораторном практикуме вы научитесь вычислять вероятности Пуассона на языке 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() вычисляет λ^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("Введите лямбда (среднее число событий): ");
    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! и вывод полученной вероятности.