ฉันกำลังพยายามเขียนฟังก์ชั่น C ++ ที่จะคืนค่าสุ่มแบบเกาส์ตามค่าเฉลี่ยและความแปรปรวน
มีฟังก์ชั่นห้องสมุดrand()
ซึ่งจะส่งกลับตัวเลขสุ่มระหว่างและ0
ไม่ได้มีค่าคงที่ แต่มันก็ guarantied ว่ามันจะมีอย่างน้อย2 15 - 1 PDF มันเหมือนกันRAND_MAX
RAND_MAX
ฉันใช้ทฤษฎีขีด จำกัด กลางเพื่อแปลงrand()
ให้เป็นตัวแปรเกาส์เซียน สิ่งที่ฉันทำอย่างแน่นอนคือการโทรหาrand()
เวลาที่ผู้ใช้ระบุจากนั้นเพิ่มค่าส่งคืนจากนั้นเลื่อนค่าเฉลี่ยเป็นค่าเฉลี่ยของผู้ใช้ที่ระบุ
ในการวางแผนข้างต้นผมเรียกว่ากำเนิดของฉัน Gaussian สุ่มสำหรับครั้งและความถี่ที่พล็อตของค่าผลตอบแทน อย่างที่คุณเห็นความแปรปรวนของมันนั้นใหญ่มากเนื่องจากมันถูกสร้างขึ้นโดยผลรวมของค่าสุ่มอื่น ๆ มากมาย
มันจะส่งกลับตัวแปร Gaussian ที่ประสบความสำเร็จด้วย Gaussian PDF และค่าเฉลี่ยที่ระบุ อย่างไรก็ตามปัญหาคือความแปรปรวน ฉันติดอยู่ที่จุดนี้เพราะฉันไม่รู้วิธีเปลี่ยนความแปรปรวนเป็นค่าที่ผู้ใช้ระบุ
นี่คือรหัสของฉัน (ไม่สมบูรณ์ในตอนนี้ระบบจะละเว้นพารามิเตอร์ "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
ฉันต้องการเปลี่ยนความแปรปรวนของตัวแปรสุ่มตามพารามิเตอร์ของฟังก์ชัน คำถามของฉันคือฉันจะเปลี่ยนความแปรปรวนของตัวแปรสุ่มนี้ได้อย่างไร ฉันจะทำมันได้อย่างไร