평균과 분산이 주어지면 가우시안 임의의 값을 반환하는 C ++ 함수를 작성하려고합니다.
와 rand()
사이의 난수를 반환 하는 라이브러리 함수가 있습니다 . 고정 된 값은 없지만 이상임을 보증합니다 . PDF는 균일합니다.0
RAND_MAX
RAND_MAX
Central Limit Theorem을 사용하여 이것을 rand()
가우시안 변수로 변환하고 있습니다. 내가 정확히하고있는 것은 rand()
사용자가 지정한 시간 을 호출 한 다음 반환 값을 더한 다음 평균을 사용자 지정 평균으로 이동하는 것입니다.
위의 그림에서, 나는 가우시안 랜덤 제너레이터를 번 호출 했고 그 리턴 값의 주파수를 플로팅했습니다. 보시다시피, 분산은 다른 임의의 값의 합으로 만들어지기 때문에 거대합니다.
성공적으로 Gaussian PDF와 지정된 평균값을 가진 Gaussian 변수를 반환합니다. 그러나 문제는 분산입니다. 분산을 사용자 지정 값으로 변경하는 방법을 모르기 때문에이 시점에 갇혀 있습니다.
이것은 내 코드입니다 (현재는 불완전합니다. 매개 변수 "Variance"는 무시 됨).
template <class T>
T Random::GetGaussian(T Mean /*= 0*/, T Variance /*= 1*/)
{
T MeanOfSum = NUM_GAUSSIAN_SUMS / static_cast<T>(2);
T Rand = 0;
for (uint64_t i=0; i<NUM_GAUSSIAN_SUMS; i++)
{
Rand += static_cast<T>(rand()) / RAND_MAX;
}
return Rand - (MeanOfSum - Mean);
}
NUM_GAUSSIAN_SUMS
100이고 RAND_MAX
32767 이라고 가정하십시오 .
함수의 매개 변수에 따라 임의 변수의 분산을 변경하고 싶습니다. 내 질문은이 무작위 변수의 분산을 어떻게 변경할 수 있습니까? 어떻게하니?