소개
이 실습에서는 C 언어로 누적 분포 함수 (CDF) 를 계산하는 방법을 배웁니다. 이 실습은 주요 두 단계로 구성됩니다. 첫째, 분포 매개변수와 x 값을 읽고, 둘째, 표준 정규 분포를 사용하여 음의 무한대에서 주어진 x 값까지의 확률을 합산하여 CDF 를 계산합니다. 이 실습에서는 완전한 코드 구현을 제공하고 단계별로 과정을 안내하여 C 언어에서 CDF 계산에 대한 확실한 이해를 돕습니다.
이 실습에서는 C 언어로 누적 분포 함수 (CDF) 를 계산하는 방법을 배웁니다. 이 실습은 주요 두 단계로 구성됩니다. 첫째, 분포 매개변수와 x 값을 읽고, 둘째, 표준 정규 분포를 사용하여 음의 무한대에서 주어진 x 값까지의 확률을 합산하여 CDF 를 계산합니다. 이 실습에서는 완전한 코드 구현을 제공하고 단계별로 과정을 안내하여 C 언어에서 CDF 계산에 대한 확실한 이해를 돕습니다.
이 단계에서는 C 언어로 누적 분포 함수 (CDF) 를 계산하기 위해 분포 매개변수와 x 값을 읽는 방법을 배웁니다.
먼저 CDF 계산을 구현하기 위한 새로운 C 파일을 생성합니다.
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("CDF 를 계산할 x 값을 입력하세요: ");
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
CDF를 계산할 x 값을 입력하세요: 3.5
입력 매개변수:
평균 (μ): 5.00
표준 편차 (σ): 2.00
X 값: 3.50
이 단계에서는 표준 정규 분포를 사용하여 음의 무한대에서 주어진 x 값까지의 확률을 합산하여 누적 분포 함수 (CDF) 를 계산하는 방법을 배웁니다.
이전 C 프로그램을 수정하여 CDF 계산을 구현해 보겠습니다.
cd ~/project
nano cdf_calculator.c
이전 코드를 다음 구현으로 바꿉니다.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 표준 정규 CDF 근사 함수 (Abramowitz and 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("CDF 를 계산할 x 값을 입력하세요: ");
scanf("%lf", &x_value);
// CDF 계산 및 출력
double cdf_value = normal_cdf(x_value, mean, std_dev);
printf("\nCDF 계산 결과:\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
CDF 를 계산할 x 값을 입력하세요: 3.5
CDF 계산 결과:
평균 (μ): 5.00
표준 편차 (σ): 2.00
X 값: 3.50
CDF P(X ≤ x): 0.2525
이 단계에서는 누적 분포 함수 (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("CDF 를 계산할 x 값을 입력하세요: ");
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
CDF를 계산할 x 값을 입력하세요: 3.5
--- CDF 계산 결과 ---
평균 (μ): 5.00
표준 편차 (σ): 2.00
X 값: 3.50
CDF P(X ≤ x): 0.2525 (25.25%)
해석:
값이 평균 분포보다 작습니다.
3.50 이하의 값을 관찰할 확률: 25.25%
이 실험에서 C 언어를 사용하여 분포 매개변수 (평균 및 표준 편차) 와 x 값을 읽어 누적 분포 함수 (CDF) 를 계산하는 방법을 배웠습니다. 그런 다음 표준 정규 분포 근사 함수를 사용하여 음의 무한대에서 주어진 x 값까지의 확률을 합산하여 CDF 계산을 구현했습니다. 마지막으로 제공된 입력 매개변수에 대한 CDF 값을 출력했습니다.
이 실험에서 얻은 주요 학습 내용은 필요한 입력 데이터를 읽고 표준 정규 CDF 근사 공식을 적용하여 원하는 CDF 값을 계산하는 데 필요한 단계입니다.