확률 밀도 함수(Probability Density Function, PDF)는 연속 확률 변수가 특정 값을 가질 상대적인 가능성을 나타내는 함수입니다. 흔히 '연속 확률 변수의 밀도'라고도 불립니다.
확률 변수가 특정 범위의 값 안에 속할 확률은 해당 범위에 대한 밀도 함수의 적분값으로 계산됩니다. 즉, 이는 밀도 함수 아래 영역 중 수평축 위쪽 부분이면서 범위의 최솟값과 최댓값 사이에 해당하는 면적을 의미합니다. 확률 분포는 바로 이 확률 밀도 함수를 기반으로 정의됩니다.
알고리즘
시작
n을 선언한다
pdf = 0으로 초기화한다
i = 0부터 n까지 반복:
pdf = rand() mod 200
만약 pdf가 360보다 크면
1을 출력한다
그렇지 않고 pdf가 0보다 작으면
0을 출력한다
그 외의 경우
pdf * 0.1 / 360을 출력한다
반복 종료
종료
예제 코드
#include <iostream>
using namespace std;
int n = 6;
int main(int argc, char **argv) {
int pdf = 0;
for (int i = 0; i < n; i++) {
pdf = rand() % 200;
if (pdf > 360)
cout << 1 << " ";
else if (pdf < 0)
cout << 0 << " ";
else
cout << pdf * 0.1 / 360 << " ";
}
return 0;
}
실행 결과
0.0058333 0.0028889 0.0016667 0.0019444 0.0006111 0.0005
코드 설명
위 프로그램은 다음과 같은 방식으로 동작합니다.
1. 난수 생성: rand() % 200을 사용하여 0부터 199 사이의 난수를 생성합니다. 이 값이 곧 확률 밀도 함수의 입력값 역할을 합니다.
2. 조건 판별: 생성된 값이 360보다 크면 확률을 1로 출력하고, 0보다 작으면 0으로 출력합니다. 이는 확률값이 반드시 0과 1 사이에 존재해야 한다는 확률의 기본 성질을 반영한 것입니다.
3. 정규화된 확률 출력: 그 외의 경우에는 pdf * 0.1 / 360 공식을 통해 값을 스케일링하여 출력합니다. 이 과정은 전체 면적이 1이 되도록 정규화하는 개념과 유사하며, 결과적으로 각 구간의 상대적 확률을 얻을 수 있습니다.
이처럼 확률 밀도 함수의 개념을 코드로 구현하면, 난수를 특정 분포에 따라 변환하여 다양한 시뮬레이션과 통계 모델링에 활용할 수 있습니다.