Введение
В этом лабораторном практикуме вы научитесь вычислять функцию распределения вероятностей (CDF) на языке C. Практикум охватывает два основных этапа: чтение параметров распределения и значения x, а затем вычисление CDF, суммируя вероятности от минус бесконечности до заданного значения x, используя стандартное нормальное распределение. Практикум предоставляет полную реализацию кода и поэтапно проведет вас через процесс, гарантируя, что вы получите глубокое понимание вычисления CDF на языке C.
Чтение параметров распределения и значения x
В этом шаге вы узнаете, как читать параметры распределения и значение x для вычисления функции распределения вероятностей (CDF) на языке C.
Сначала создадим новый файл C для реализации вычисления CDF:
cd ~/project
nano cdf_calculator.c
Теперь добавим следующий код для чтения параметров распределения:
#include <stdio.h>
#include <stdlib.h>
int main() {
// Параметры распределения
double mean, std_dev;
double x_value;
// Запрос параметров распределения у пользователя
printf("Введите среднее значение (μ): ");
scanf("%lf", &mean);
printf("Введите стандартное отклонение (σ): ");
scanf("%lf", &std_dev);
// Запрос значения x у пользователя
printf("Введите значение x для вычисления CDF: ");
scanf("%lf", &x_value);
// Вывод входных параметров для проверки
printf("\nВходные параметры:\n");
printf("Среднее значение (μ): %.2f\n", mean);
printf("Стандартное отклонение (σ): %.2f\n", std_dev);
printf("Значение x: %.2f\n", x_value);
return 0;
}
Компилируем и запускаем программу:
gcc cdf_calculator.c -o cdf_calculator
./cdf_calculator
Пример вывода:
Введите среднее значение (μ): 5.0
Введите стандартное отклонение (σ): 2.0
Введите значение x для вычисления CDF: 3.5
Входные параметры:
Среднее значение (μ): 5.00
Стандартное отклонение (σ): 2.00
Значение x: 3.50
Суммирование вероятностей от -∞ до x
В этом шаге вы узнаете, как вычислить функцию распределения вероятностей (CDF), суммируя вероятности от минус бесконечности до заданного значения x, используя стандартное нормальное распределение.
Давайте изменим предыдущую программу на C, чтобы реализовать вычисление CDF:
cd ~/project
nano cdf_calculator.c
Замените предыдущий код следующим реализацией:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// Приближение функции стандартной нормальной CDF (Abramowitz и Stegun)
double standard_normal_cdf(double x) {
const double a1 = 0.254829592;
const double a2 = -0.284496736;
const double a3 = 1.421413741;
const double a4 = -1.453152027;
const double a5 = 1.061405429;
const double p = 0.3275911;
// Обработка отрицательных значений
int sign = (x < 0) ? -1 : 1;
x = fabs(x);
// Формула приближения
double t = 1.0 / (1.0 + p * x);
double y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-x * x);
return 0.5 * (1.0 + sign * y);
}
// Вычисление CDF для нормального распределения
double normal_cdf(double x, double mean, double std_dev) {
// Вычисление z-оценки
double z_score = (x - mean) / std_dev;
return standard_normal_cdf(z_score);
}
int main() {
// Параметры распределения
double mean, std_dev;
double x_value;
// Запрос параметров распределения у пользователя
printf("Введите среднее значение (μ): ");
scanf("%lf", &mean);
printf("Введите стандартное отклонение (σ): ");
scanf("%lf", &std_dev);
// Запрос значения x у пользователя
printf("Введите значение x для вычисления CDF: ");
scanf("%lf", &x_value);
// Вычисление и вывод CDF
double cdf_value = normal_cdf(x_value, mean, std_dev);
printf("\nРезультаты вычисления CDF:\n");
printf("Среднее значение (μ): %.2f\n", mean);
printf("Стандартное отклонение (σ): %.2f\n", std_dev);
printf("Значение x: %.2f\n", x_value);
printf("CDF P(X ≤ x): %.4f\n", cdf_value);
return 0;
}
Компилируем программу с математической библиотекой:
gcc cdf_calculator.c -o cdf_calculator -lm
Запускаем программу и тестируем с входными данными:
./cdf_calculator
Пример вывода:
Введите среднее значение (μ): 5.0
Введите стандартное отклонение (σ): 2.0
Введите значение x для вычисления CDF: 3.5
Результаты вычисления CDF:
Среднее значение (μ): 5.00
Стандартное отклонение (σ): 2.00
Значение x: 3.50
CDF P(X ≤ x): 0.2525
Вывод значения CDF
В этом шаге вы узнаете, как улучшить программу вычисления CDF, добавив более подробный вывод и интерпретацию результатов функции кумулятивного распределения (CDF).
Давайте изменим предыдущую программу на C, чтобы улучшить вывод и добавить интерпретативные комментарии:
cd ~/project
nano cdf_calculator.c
Обновите функцию main(), чтобы включить более подробный вывод:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// Предыдущие функции standard_normal_cdf и normal_cdf остаются без изменений
int main() {
// Параметры распределения
double mean, std_dev;
double x_value;
// Запрос параметров распределения у пользователя
printf("Калькулятор функции кумулятивного распределения (CDF)\n");
printf("-----------------------------------------------\n");
printf("Введите среднее значение (μ): ");
scanf("%lf", &mean);
printf("Введите стандартное отклонение (σ): ");
scanf("%lf", &std_dev);
// Запрос значения x у пользователя
printf("Введите значение x для вычисления CDF: ");
scanf("%lf", &x_value);
// Вычисление и вывод CDF
double cdf_value = normal_cdf(x_value, mean, std_dev);
// Подробный вывод с интерпретацией
printf("\n--- Результаты вычисления CDF ---\n");
printf("Среднее значение (μ): %.2f\n", mean);
printf("Стандартное отклонение (σ): %.2f\n", std_dev);
printf("Значение x: %.2f\n", x_value);
printf("CDF P(X ≤ x): %.4f (%.2f%%)\n",
cdf_value, cdf_value * 100);
// Интерпретация значения CDF
printf("\nИнтерпретация:\n");
if (cdf_value < 0.5) {
printf("Значение ниже среднего распределения.\n");
} else if (cdf_value > 0.5) {
printf("Значение выше среднего распределения.\n");
} else {
printf("Значение соответствует среднему распределения.\n");
}
// Объяснение вероятности
printf("Вероятность наблюдения значения меньше или равного %.2f: %.2f%%\n",
x_value, cdf_value * 100);
return 0;
}
Компилируем программу:
gcc cdf_calculator.c -o cdf_calculator -lm
Запускаем программу с тестовыми входными данными:
./cdf_calculator
Пример вывода:
Калькулятор функции кумулятивного распределения (CDF)
-----------------------------------------------
Введите среднее значение (μ): 5.0
Введите стандартное отклонение (σ): 2.0
Введите значение x для вычисления CDF: 3.5
--- Результаты вычисления CDF ---
Среднее значение (μ): 5.00
Стандартное отклонение (σ): 2.00
Значение x: 3.50
CDF P(X ≤ x): 0.2525 (25.25%)
Интерпретация:
Значение ниже среднего распределения.
Вероятность наблюдения значения меньше или равного 3.50: 25.25%
Резюме
В этом лабораторном практикуме вы изучили, как считывать параметры распределения (среднее значение и стандартное отклонение), а также значение x, чтобы вычислить функцию кумулятивного распределения (CDF) на языке C. Затем вы реализовали вычисление CDF, суммируя вероятности от минус бесконечности до заданного значения x, используя приближение функции стандартного нормального распределения. Наконец, вы вывели значение CDF для заданных входных параметров.
Ключевыми моментами, полученными в этом лабораторном практикуме, являются шаги, необходимые для вычисления CDF, включая чтение необходимых входных данных и применение формулы приближения стандартной нормальной CDF для вычисления искомого значения CDF.



