소개
이 실험에서는 C 언어로 포아송 확률을 계산하는 방법을 배웁니다. 포아송 분포는 고정된 시간 또는 공간 간격에서 발생하는 특정 횟수의 사건 발생 가능성을 나타내는 확률 분포입니다. 먼저 람다 (λ) 매개변수와 k 값을 읽은 다음, 포아송 확률 공식을 구현하여 지정된 간격에서 정확히 k 개의 사건이 발생할 확률을 계산합니다.
이 실험에서는 사용자 입력 처리, 포아송 확률 공식 구현 및 계산된 확률 출력을 포함하여 포아송 확률을 계산하기 위한 C 프로그램 작성 단계별 과정을 다룹니다.
λ(람다) 및 k 값 읽기
이 단계에서는 C 에서 포아송 확률을 계산하기 위해 람다 (λ) 매개변수와 k 값을 읽는 방법을 배웁니다. 포아송 분포는 고정된 시간 또는 공간 간격에서 발생하는 특정 횟수의 사건 발생 가능성을 나타내는 확률 분포입니다.
먼저 포아송 확률 계산을 구현하기 위한 새로운 C 파일을 생성해 봅시다.
cd ~/project
nano poisson_prob.c
이제 람다와 k 값을 읽는 다음 코드를 추가합니다.
#include <stdio.h>
#include <math.h>
int main() {
double lambda;
int k;
printf("Enter lambda (average number of events): ");
scanf("%lf", &lambda);
printf("Enter k (number of occurrences): ");
scanf("%d", &k);
printf("Lambda (λ): %.2f\n", lambda);
printf("k: %d\n", k);
return 0;
}
예시 출력:
Enter lambda (average number of events): 3.5
Enter k (number of occurrences): 2
Lambda (λ): 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("Enter lambda (average number of events): ");
scanf("%lf", &lambda);
printf("Enter k (number of occurrences): ");
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
예시 출력:
Enter lambda (average number of events): 3.5
Enter k (number of occurrences): 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("Enter lambda (평균 사건 수): ");
scanf("%lf", &lambda);
printf("Enter 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
예시 출력:
포아송 확률 계산기
---------------------
Enter lambda (평균 사건 수): 3.5
Enter 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!를 사용하여 포아송 확률을 계산하고, 결과 확률을 출력하는 것입니다.



