random_student_t_distribution

random_student_t_distribution (스튜던트 t 분포)

std::student_t_distribution은 확률 밀도 함수에 따라 분포된 임의의 부동소수점 값 x를 생성하는 분포 클래스예요. n은 자유도예요. C++11부터 사용할 수 있어요.

출처: cppreference

본문

<random> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.

template< class RealType = double >
class student_t_distribution;

(since C++11)

확률 밀도 함수에 따라 분포된 임의의 부동소수점 값 x를 생성해요:

p(x|n) = 1/√(nπ) · Γ((n+1)/2)/Γ(n/2) · (1 + x²/n)^(-(n+1)/2)

여기서 n은 자유도라고 알려져 있어요. 이 분포는 물리적 측정에서처럼 각각 표준편차를 모르는 가산 오류가 있는 n+1개의 독립 측정이 주어졌을 때, 알려지지 않은 정규 분포 값의 평균을 추정할 때 사용돼요. 또는 표준편차를 모르는 정규 분포의 알려지지 않은 평균을 n+1개 샘플로 추정할 때 사용돼요.

std::student_t_distribution은 RandomNumberDistribution의 모든 요구사항을 만족해요.

템플릿 매개변수 (Template parameters)

  • RealType — 결과 타입. float, double, long double 중 하나가 아니면 효과는 정의되지 않아요.

멤버 타입 (Member types)

멤버 타입 정의
result_type (C++11) RealType
param_type 매개변수 집합의 타입

멤버 함수 (Member functions)

  • (constructor) — 새 분포 생성
  • reset — 내부 상태 재설정
  • 생성: operator() — 다음 난수 생성
  • 특성: n — 분포 매개변수 반환; param — 매개변수 객체 얻기/설정; min — 최솟값; max — 최댓값

비멤버 함수 (Non-member functions)

  • operator== operator!= — 두 분포 객체 비교
  • operator<< operator>> (C++11) — 스트림 입출력

예제 (Example)

이 코드를 실행해 봐요.

#include <iostream>
#include <map>
#include <random>

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::student_t_distribution<> d(10); // 자유도 10

    std::map<int, int> hist;
    for (int n = 0; n != 10000; ++n)
        ++hist[std::round(d(gen))];

    for (auto [x, count] : hist)
        if (x > -8 && x < 8)
            std::cout << x << ": " << std::string(count / 200, '*') << '\n';
}

더 알아보기 (Learn more)

cppreference