মূল বিষয়বস্তু
কম্পিউটার প্রোগ্রামিং
কোর্স: কম্পিউটার প্রোগ্রামিং > অধ্যায় 5
পাঠ 2: দৈবভাবেদৈব সংখ্যাগুলো স্বাভাবিক বন্টন
ধরি, আমরা একটি প্রোগ্রামে বানরের জগৎ তৈরি করবো। প্রোগ্রামটি এক হাজার বানর তৈরি করতে পারবে আর প্রতি সময় বানরের উচ্চতা হবে 200 থেকে 300 এর মাঝে (বানরের জগৎ হবার কারণে তাদের উচ্চতা 200 হতে 300 পিক্সেলের মধ্যে হবে)।
var randomHeight = random(200, 300);
সত্যিকার অর্থেই কি এটা বাস্তব জগতের বানরের উচ্চতার সমান হয়? নিউ ইয়র্কের ব্যস্ত ফুটপথের কথা চিন্তা করা যাক। রাস্তা থেকে যে কোন একজনকে নেওয়া যাক এবং তাদের উচ্চতা দৈব (random) হবে। কিন্তু এটা সেই ধরনের দৈব নয় যা
random()
দিয়ে তৈরি হয়ে থাকে। মানুষের উচ্চতা সমানভাবে বন্টিত নয়; লম্বা কিংবা খাটো মানুষ থেকে গড় উচ্চতা বিশিষ্ট মানুষের সংখ্যাই বেশি। পরিবেশের সিমুলেশন করার জন্য আমরা চাই যেন বানরগুলো গড় উচ্চতা বিশিষ্ট হয় (2 50 পিক্সেল), তবে কিছু কিছু ক্ষেত্রে তাদেরকে লম্বা কিংবা খাটো হতে দিতে হবে।গড়ের কাছাকাছি যে মানগুলো গুচ্ছাকারে থাকে সেগুলোকে (“গড়” (mean) হিসেবে উল্লেখিত) “স্বাভাবিক” বণ্টন (normal distribution) বলা হয়। এটাকে গসিয়ান বণ্টন (Gaussian distribution) পদ্ধতি বলা হয়ে থাকে (গণিতবিদ কার্ল ফ্রেড্ররিক গস (Carl Friedrich Gauss) এর নামানুসারে) অথবা, ফরাসি ভাষায় ল্যাপলাসিয়ান বণ্টন (Laplacian distribution) পদ্ধতি (পিয়েরে-সিমন ল্যাপ্লাস (Pierre-Simon Laplace) এর নামানুসারে) বলা হয়। উভয় গণিতবিদই উনিশ শতকের শুরুর দিকে একসাথে এই বণ্টন পদ্ধতি নিয়ে কাজ করেছিলেন।
বণ্টনগুলোকে লেখচিত্রে আঁকালে, কিছুটা নিচের মত দেখা যাবে। অনানুষ্ঠানিকভাবে যা বেল এর বক্ররেখা (bell curve) নামে পরিচিতঃ
বক্ররেখাটি একটি গাণিতিক ফাংশন দিয়ে উৎপাদিত যা, কোন প্রদত্ত সংখ্যার সম্ভাব্যতাকে গড়ের ফাংশন (প্রায়শই μ হিসেবে লেখা হয়, গ্রীক শব্দ mu) ও আদর্শ বিচ্যুতি (σ গ্রীক শব্দ sigma) হিসেবে সংজ্ঞায়িত করে থাকে।
গড় বোঝাটা বেশ সহজ। উচ্চতার মান 200 হতে 300 এর মধ্যে হলে, সহজেই আমরা বলতে পারি যে এটার গড় 250 হবে। যাই হোক, আদর্শ বিচ্যুতি 3 অথবা 15 বললে কি হবে? সংখ্যাগুলোর ক্ষেত্রে এর অর্থ কি? গ্রাফের দিকে লক্ষ্য করলে এটা কিছুটা অনুধাবন করা যায়। উপরের গ্রাফটি খুবই কম আদর্শ বিচ্যুতি সম্পন্ন বণ্টন দেখাচ্ছে, যেখানে বেশিরভাগ মানই গড়ের কাছাকাছি গুচ্ছাকারে অবস্থান করছে। নিচের গ্রাফটি অপেক্ষাকৃত উচ্চ আদর্শ বিচ্যুতি দেখায়, যেখানে মানগুলো গড় থেকে সমানভাবে বন্টিত।
"আদর্শ বিচ্যুতি" (standard deviation) তত্ত্বটি সম্পর্কে কোন ধারণা নেই? চিন্তা করার কিছু নেই! শুরু করার আগে খান একাডেমির ভেদাঙ্ক এবং আদর্শ বিচ্যুতি সম্পর্কিত অনুশীলনীটি নেওয়া উচিত।
The numbers work out as follows: Given a population, 68% of the members of that population will have values in the range of one standard deviation from the mean, 95% within two standard deviations, and 99.7% within three standard deviations. Given a standard deviation of 5 pixels, only 0.3% of the monkey heights will be less than 235 pixels (three standard deviations below the mean of 250) or greater than 265 pixels (three standard deviations above the mean of 250).
গড় এবং আদর্শ বিচ্যুতির হিসাব
দশ জন শিক্ষার্থীর একটি শ্রেণি বিবেচনা করি যারা একটি পরীক্ষায় নিম্নোক্ত স্কোর (100 এর মধ্যে) পেয়েছেঃ
85, 82, 88, 86, 85, 93, 98, 40, 73, 83
এগুলোর গড় হল: 81.3
গড় বিচ্যুতির বর্গের গড়ের বর্গমূলকে আদর্শ বিচ্যুতি হিসেবে ধরা হয়। অন্য অর্থে, প্রতি শিক্ষার্থীর জন্য গড় হতে পার্থক্য নিতে হবে এবং এটাকে বর্গ করতে হবে (ভেদাঙ্ক-variance)। এই সব মানের গড় বের করে এটার বর্গমূলকে আদর্শ বিচ্যুতি হিসেবে নিতে হবে।
Score | Difference from Mean | Variance |
---|---|---|
85 | ||
82 | ||
88 | ||
etc. | ... | ... |
Total Variance: | 228.81 | |
Average Variance: | 22.881 |
আদর্শ বিচ্যুতি হল গড় ভেদাঙ্কের বর্গমূল: 15.13
"আদর্শ বিচ্যুতি" (standard deviation) তত্ত্বটি সম্পর্কে কোন ধারণা নেই? চিন্তা করার কিছু নেই! শুরু করার আগে খান একাডেমির ভেদাঙ্ক এবং আদর্শ বিচ্যুতি সম্পর্কিত অনুশীলনীটি নেওয়া উচিত।
সৌভাগ্যবশত, প্রোগ্রামে দৈব সংখ্যার স্বাভাবিক বণ্টন ব্যবহারের জন্য আমাদের নিজেদের এই হিসেবগুলো করার কোন দরকার নেই। তার পরিবর্তে, আমরা ProcessingJS এর
Random
অবজেক্ট ব্যবহার করতে পারি।Random
ব্যবহার করার জন্য, প্যারামিটার হিসেবে 1 দিয়ে আমাদের প্রথমে একটি নতুন Random
অবজেক্ট তৈরি করতে হবে। আমরা এই চলকটিকে "generator" (উৎপাদন যন্ত্র) বলি কারণ আমরা যা তৈরি করেছি তা প্রকৃতপক্ষে একটি দৈব সংখ্যা তৈরি করে।var generator = new Random(1);
প্রতিবার
draw()
করার সময় যদি স্বাভাবিক (অথবা গাসিয়ান) বণ্টনের দিয়ে একটি দৈব সংখ্যা তৈরি করতে চাই, তাহলে সহজ উপায় হল nextGaussian()
ফাংশন কল করা।var num = generator.nextGaussian();
println(num);
তো, এখন, আমরা এই মানগুলো দিয়ে কি করবো? ধরি আমরা এগুলো ব্যবহার করতে চাই, উদাহরণস্বরূপ, স্ক্রিনে আঁকা কোন আকৃতিকে x-অবস্থানে নিতে চাই, তাহলে কি হবে?
nextGaussian()
ফাংশন নিচের প্যারামিটারগুলোর সাথে দৈব সংখ্যার একটি স্বাভাবিক বণ্টন রিটার্ন করে: শূন্যের গড় এবং এক এর আদর্শ বিচ্যুতি। ধরি, আমরা 200 (400 প্রস্থ সম্বলিত উইন্ডোর কেন্দ্রীয় অনুভূমিক পিক্সেল) এর গড় এবং 60 পিক্সেলের আদর্শ বিচ্যুতি বের করবো। আমরা প্যারামিটারের মানগুলো আদর্শ বিচ্যুতি দিয়ে গুণ করে এবং গড় যোগ করে নিয়ন্ত্রণ করতে পারি।var standardDeviation = 60;
var mean = 200;
var x = standardDeviation * num + mean;
এখন, আমরা এমন প্রোগ্রাম তৈরি করতে পারি যেখানে স্বাভাবিক বণ্টনের ভিত্তিতে অর্ধ-স্বচ্ছ বৃত্ত আঁকা হয়। সবচেয়ে কালো অংশটি বৃত্তের কাছে থাকবে, যেখানে বেশিরভাগ মান হল গুচ্ছাকার, কিন্তু মাঝে মধ্যেই কেন্দ্রের অনেক ডানে কিংবা বামে বৃত্ত আঁকা হয়।
এই "প্রাকৃতিক সিমুলেশন" কোর্সটি নেওয়া হয়েছে Daniel Shiffman (ড্যানিয়েল শিফম্যান) এর লেখা "The Nature of Code" (কোডের প্রকৃতি) থেকে এবং এটি ক্রিয়েটিভ কমন্সের এট্রিবিউশন-নন কমার্শিয়াল 3.0 আনপোরটেড লাইসেন্সের অধিনস্ত।
আলোচনায় অংশ নিতে চাও?
কোন আলাপচারিতা নেই।