আমি এমন একটি সি ++ ফাংশন লেখার চেষ্টা করছি যা গাউসিয়ান এলোমেলো মানগুলি, তাদের উপায় এবং প্রকারভেদগুলি প্রদান করে ফিরে আসবে।
সেখানে একটি লাইব্রেরি ফাংশন rand()
, যার মধ্যে র্যান্ডম সংখ্যা ফেরৎ 0
এবং RAND_MAX
। RAND_MAX
একটি নির্দিষ্ট মান নেই তবে এটি গ্যারান্টিযুক্ত যে এটি কমপক্ষে । এর পিডিএফ অভিন্ন।
এটিকে rand()
গাউসিয়ান ভেরিয়েবলে রূপান্তর করতে আমি কেন্দ্রীয় সীমাবদ্ধ তত্ত্বটি ব্যবহার করছি । আমি যা করছি তা হ'ল কোনও rand()
নির্দিষ্ট সময় ব্যবহারকারীর জন্য কল করা, তারপরে তার মানগুলি যোগ করুন, তারপরে ব্যবহারকারীকে তার গড় গড় পরিবর্তন করুন।
উপরের চক্রান্তে, আমি আমার গাউসিয়ান এলোমেলো জেনারেটরকে বার কল করেছিলাম এবং এর ফেরতের মূল্যের ফ্রিকোয়েন্সি প্লট করেছি। যেমন আপনি দেখতে পাচ্ছেন, এর বৈকল্পিকতা বিশাল, যেহেতু এটি প্রচুর অন্যান্য এলোমেলো মানগুলির যোগফল দ্বারা তৈরি করা হয়েছে।
এটি গাউসিয়ান পিডিএফ এবং সুনির্দিষ্ট গড় মান সহ সফলভাবে গাউসীয় পরিবর্তনশীলকে প্রদান করে। তবে সমস্যাটি তার বৈকল্পিকতা। আমি এই মুহূর্তে আটকে আছি, কারণ আমি জানি না কীভাবে তার নির্দিষ্টকরণটি ব্যবহারকারীর নির্দিষ্ট মানের সাথে পরিবর্তন করতে হয়।
এটি আমার কোড (আপাতত অসম্পূর্ণ; প্যারামিটার "ভেরিয়েন্স" উপেক্ষা করা হবে):
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।
আমি ফাংশনের প্যারামিটার অনুসারে র্যান্ডম ভেরিয়েবলের বৈকল্পিক পরিবর্তন করতে চাই। আমার প্রশ্ন, আমি কীভাবে এই র্যান্ডম ভেরিয়েবলের বৈকল্পিক পরিবর্তন করতে পারি? আমি এটা কিভাবে করবো?