সকালে ঘুম থেকে উঠেই ল্যাপটপ খুলে দেখি মুহাম্মদের ‘পাই’ নিয়ে একটা লেখা। পড়লাম, এবং পড়ে আমার একটা পুস্ট দিতে ইচ্ছা করলো। যেন তেন পুস্ট না, আঁতেল পুস্ট। ধৈর্য্য থাকলে সাথে থাকেন।
আমার থিসিসের বিষয় হইলো ইমেজ বেজড মেজারমেন্ট সিস্টেমস। জিনিসের ছবি থেকে জিওমেট্রিক মাপজোক বাইর করা আরকি। এই কাজ করার জন্য আগে যে ক্যামেরা ব্যবহার করবেন, সেই ক্যামেরাটাকে ক্যালিব্রেট করতে হবে। ক্যামেরা ক্যালিব্রেট করা মানে হইলো গিয়া, ক্যামেরায় ছবি তৈরীর পুরা প্রক্রিয়াটাকে একটা মডেল দিয়া বর্ণনা করা যায়। এই মডেলের প্যারামিটারগুলা এস্টিমেট করাই হইলো ক্যালিব্রেশন। আমার ফিল্ডে ক্যালিব্রেশন করার যে টেকনিকগুলা আছে, একটাও ভালো কাজ করে না। আমি তাই আমার সুপারের সুযোগ্য নির্দেশনায় নতুন একটা ক্যালিব্রেশন টেকনিক বানাইছি। এখন প্রশ্ন হইলো, আমার টেকনিক যে অন্যদের টেকনিক থেকে ভালো এইটা প্রমাণ করার কি উপায়। সমস্যা হইলো গিয়া, ক্যামেরা ক্যালিব্রেশন প্যারামিটারগুলা অধিকাংশই ফিজিক্যালি মাপা যায় না। বই আর পেপার ঘাঁটাঘাঁটি কইরা দেখলাম, এই সমস্যা সার্বজনীন। এটাকে পাশ কাটাইতে মন্টে কার্লো সিমুলেশন দিয়া পারফর্ম্যান্স নির্ণয় করা যায়। এখন কথা হইলো, সিমুলেশনটা কি জিনিস? সিমুলেশন করতে হইলে, আপনি প্রথমেই কতগুলা ক্যামেরা প্যারামিটার ধইরা একটা ক্যামেরা মডেল নিবেন, এদের নাম দেওয়া যাক গ্রাউন্ড ট্রুথ। এই ক্যামেরা মডেল ব্যবহার কইরা ত্রিমাত্রিক একটা জিনিসের ইমেজ এখন আপনি বানাইতে পারেন। যথেষ্ট সংখ্যক ত্রিমাত্রিক জিনিস এবং তাদের ইমেজ তৈরীর পর আপনি চেষ্টা করবেন ত্রিমাত্রিক জিনিসটার অবস্থান এবং তার ইমেজের অবস্থান থেকে নিউম্যারিকালি ক্যামেরা মডেলটা সমাধান করা। গ্রাউন্ড ট্রুথের যতো কাছাকাছি যাইতে পারেন, আপনার টেকনিক ততো ভালো। এখন কথা হইতেছে, এর মধ্যে ‘পাই’ আসলো কই থাইকা। মন্টে কার্লো সিমুলেশনের উপর একটা বই থাইকা একটা আইডিয়া পাইছিলাম, পাই এর মান সিমুলেশন কইরা বাইর করার আইডিয়া। আইডিয়াটা খুবই সরল, একটা বর্গক্ষেত্রে আপনি চালের দানা বা নুড়ি পাথর ছড়ায়ে দেবেন। ধরা যাক, বর্গক্ষেত্রটার দুইটা কৌণিক বিন্দুর মাঝে একটা বৃত্তচাপ আছে, বৃত্তচাপটার ব্যাসার্ধ বর্গক্ষেত্রটার বাহুর দৈর্ঘ্যের সমান (ছবি দেখুন)। সম্ভাবিলিটি থিওরি বলে, বৃত্তচাপের ভেতরে পড়া চালের দানার সংখ্যা এবং মোট চালের দানার সংখ্যার অনুপাত হবে বৃত্তচাপ এবং বর্গের ক্ষেত্রফলের অনুপাতের সমান।
বৃত্তচাপের ক্ষেত্রফল, A1 = pi * r^2 / 4
বর্গের ক্ষেত্রফল, A2 = r^2
অনুপাত, A1:A2 = pi/4
অর্থাৎ বৃত্তচাপের ভেতরে পড়া এবং মোট চালের দানার সংখ্যার অনুপাত হলো ‘পাই’-এর এক-চতুর্থাংশ। সম্ভাবিলিটি থিওরি আরো বলে, চালের দানার সংখ্যা যতো বেশি হবে, আমাদের এস্টিমেট ততো ভালো হবে। এবং একবার চালের দানা ছড়ায়ে দিয়ে ‘পাই’-এর মান বের করে ফেললাম, এইটাও মন্টে কার্লো মডেলের মতে হওয়ার নয়। এই পরীক্ষাটা বারবার করতে হবে এবং বরংবার করা পরীক্ষার মাধ্যমে বের করা ‘পাই’-এর মানগুলোর গড় নিলেই পাওয়া যাবে ‘পাই’-এর সবচেয়ে ভালো এস্টিমেট। এখন কার এতো টাইম আছে, যে হাজারখানেক চালের দানা নিয়া এক হাজার বার এই পরীক্ষাটা করবে এবং শেষে বলবে যে, ‘পাই’-এর মানের একটা এস্টিমেট আমি পাইছি। আসল মান না, এস্টিমেট!!!! কস্ট বেনিফিট চিন্তা করলে, নিতান্ত বোকা আর চরম জোশিলা পাবলিক ছাড়া এই কাজ কেউই করতে যাবে না। সুতরাং লাগাও সিমুলেশন। সিমুলেশন করার প্রথম শর্ত হইলো গিয়া যে ঘটনার সিমুলেশন করবেন, তার একটা ম্যাথমেটিকাল মডেল বের করা। ম্যাথমেটিক্যাল মডেল হইলো গিয়া কতগুলা সমীকরণ যা দিয়া ঘটনাটাকে সংজ্ঞায়িত করা যায়। এখন আসেন, চাল ছড়ানোর পরীক্ষাটার একটা মডেল বানাইঃ
১। চাল যখন বর্গক্ষেত্রে ছড়ানো হবে তখন দুইটা চলক দিয়া দানাটার অবস্থান নির্ণয় করা যায় (ছবি দেখুন)। চাল যখন ছড়ানোর ঘটনাটা যেহেতু র্যান্ডম, র্যান্ডম সংখ্যা দিয়ে এই দুইটা চলক নির্ণয় করা যায়।
x = rand();
y = rand();
এখানে rand() হলো, র্যান্ডম সংখ্যা নির্ণয় করার একটা ফাংশন। তবে একটা ব্যাপারে সাবধান হতে হবে, যে র্যান্ডম সংখ্যাগুলো পাওয়া যাবে সেগুলো যেন অবশ্যই বর্গের ভেতরে থাকে। সেজন্য র্যান্ডম সংখ্যার বিস্তৃতি এমন নিতে হবে যেন তা 0 থেকে r -এর মধ্যে থাকে।
২। চালের অবস্থান তো নির্ণয় করা গেল, এখন আমাদের নিরূপন করতে হবে এই চাল বৃত্তের ভেতর না বাইরে। ছবিটার দিকে তাকাইলেই বুঝবেন, এইটা বাইর করা এমন জটিল কিছু না। বর্গের নিচের বামকোনার বিন্দুটাই আমাদের কোঅর্ডিনেট ফ্রেমের অরিজিন, এবং এই অরিজিন থেকেই চালের দানার দুরত্ব নির্ণয় করা যায়। যদি দুরত্ব r-এর থেকে বেশি হয়, তাইলে চাল বৃত্তের বাইরে। যদি r-এর সমান বা কম হয়, তাইলে চাল যথাক্রমে বৃত্তের উপর বা বৃত্তের ভেতরে অবস্থিত।
৩। ধরা যাক, আপনি ১০,০০০ চালের দানা নিয়ে পরীক্ষাটা করবেন। এজন্য আপনাকে ১ এবং ২ নম্বর ধাপ ১০,০০০ বার করতে হবে, এবং প্রত্যেকবার বের করতে হবে চালের দানাটা কোথায় পড়লো। এখন পাই-এর মান হবেঃ
pi = 4*(বৃত্তের ভেতরে বা উপরে পড়া চালের সংখ্যা)/ মোট চালের সংখ্যা (এক্ষেত্রে ১০,০০০)
৪। ধাপ ১,২,৩ আপনাকে একটা সিমুলেশন রেজাল্ট দিবে। ভালো এস্টিমেট পাওয়ার জন্য অনেকগুলো সিমুলেশন করতে হবে। ধরা যাক, ১০০০ সিমুলেশন করা হলো। প্রত্যেকবার পাওয়া সিমুলেশনের মানগুলোর গড় নিলে পাই-এর মানের একটা ভালো এস্টিমেট পাওয়া যাবে।
যাদের জোশ আছে, তারা ছোট একটা কম্পিউটার প্রোগ্রাম লিখে পাই-এর মান বের করতে পারেন।
আমি সিমুলেশনটা করেছি, ১০ লাখ চালের দানার জন্য ১ হাজার বার পরীক্ষাটা করেছি। পাই-এর মান পেয়েছি হলো,
pi = 3.141755900000001
এই মান আসল মানের চেয়ে 0.005196294625306% ভুল।
(আমি একজন নাদান ছাত্র মাত্র, ভুলভাল হইলে বিজ্ঞজন ধরায়া দিয়েন। আর লেখাটা মুহাম্মদের লেখা পইড়াই লিখতে ইচ্ছা করলো, মুহাম্মদকে এইজন্য ধন্যবাদ।)
১ম!
😀
There is no royal road to science, and only those who do not dread the fatiguing climb of its steep paths have a chance of gaining its luminous summits.- Karl Marx
আমার মতো হ্যাটট্রিক করতে পারবেন? B-)
কি দিন আইলো? আমি ১ম 🙁 🙁 🙁
তয় লিকা তা পইরা এন্তিনা খুইলা পানিতে পইরা গেসে।
উপ্রে দ্যাখবে, উপ্রে এ এ দ্যাখ । এইবার এন্টিনা তুইলা :frontroll: শুরু কর :grr: :grr:
সংসারে প্রবল বৈরাগ্য!
ব্যাপার না রাব্বি, নেক্সট টাইম। 🙂
কই যাই ভাইডি কই যাই!!! সব তো উপর দিয়া গেল 😕
আমিই মনে হয় বুঝায়া বলতে পারি নাই। পরিসংখ্যান পড়া থাকলে প্রোবাবিলিটি থিওরিটা একটু দেইখো। কোঅর্ডিনেট জিওমেট্রির কিছু বেসিক ব্যবহার করে মডেলটা বানানো হয়েছে।
পড়ার জন্য ধন্যবাদ। 🙂
:salute:
আমি তো বুঝলাম বইলাই মনে হইলো।
তৌফিক, এত বুদ্ধি পাও কই?
নূপুর ভাই, বুদ্ধি আমার না। আমি খালি সিমুলেশনটা করছি। মন্টে কার্লো সিমুলেশনের যেকোন টেক্সট বইয়ে ক্লাসিক একটা উদাহরণ হিসাবে এটাকে ব্যবহার করা হয়।
আপনাকেও :salute:
আর বুঝেছেন দেখে :hatsoff: :hug: :teacup:
কালকের ফ্লুইড মেকানিক্স টা দিয়া আসি। তারপরে বাকি কথা :grr:
সাতেও নাই, পাঁচেও নাই
কেডায় নেয় ফ্লুইড? জামাতী সদরুল?? সদরুলের নেওয়া ৫টা কোর্সের ৪টাতেই আমি ডি পাইছিলাম। 🙁
আর শয়তানী হাসি দেইখা তো ভয় পায়া গেলাম, কাহিনী কি? ভুল ধরসস নাকি?? 😕
না। কামরুল স্যার। জিন্নাহর আমলে ডি পাইসিলাম ফ্লুইডে। রেফার্ড দিবার জন্য পরীক্ষা ছাইড়া আসছিলাম। কিন্তু জোর করে পাস করায়া ডি দিয়া দিসিল। মিজাজটা কেমুন যে হইসিল :grr: :grr: :grr:
সাতেও নাই, পাঁচেও নাই
এইটা নিয়া একটা কাহিনী মনে পড়ল ... সেকেন্ড সেমিস্টারে আমাদের এক কৃতী ছাত্র সি পরীক্ষায় পুরা ধরা খাইলো ... অনীক ভাই (পিসিসি নাইন্টি এইট) খাতা দেখতে গিয়ে দেখেন তারে অনেক বাড়ায়ে টাড়ায়ে দিলেও ডি পার হয় না, উনি ভাব্লেন তার চেয়ে রেফার্ড দেই, ভালো করে পড়ে বি তুলতে পারবে ... অনীক ভাই যেটা জানতেন না সেটা হইলো বেচারা আরো তিনটা সাবজেক্টে রেফার্ড খাইছিল, এবং চার সাবজেক্টে রেফার্ড খাইলে ফেইল ... বেচারা এক বছর পিছায় গেল :-s
:khekz: :khekz: :khekz:
হাসা মনে হয় ঠিক হইল না, কি কও? 🙁
পালটে দেবার স্বপ্ন আমার এখনও গেল না
মানবিক... :-B :-B :-B
আমি বাংলায় মাতি উল্লাসে, করি বাংলায় হাহাকার
আমি সব দেখে শুনে, ক্ষেপে গিয়ে করি বাংলায় চিৎকার ৷
ইন্টারে পরিসংখ্যান নিছিলি? আমার আসলে আরো একটু বর্ণনা করা দরকার ছিল। যাহোক, পড়ার জন্য ধন্যবাদ। 🙂
আমার পরিসংখ্যান ছিল। কিন্তু মানবিকতার অত্যাধিকতার কবলে জর্জরিত আমার এই পোস্টের মর্মোদ্ধারের কিঞ্চিত চেষ্টা অপারগতার গহবরে পর্যবসিত হল বলেই তো মনে হচ্ছে।
তয় ভাই মনে হয় জিনিয়াস :salute:
জিনিয়াস আমি না, জিনিয়াস হইলো সম্ভাবিলিটি থিওরি। 🙂
জটিল আইডিয়া ... সিম্পল, বাট এলিগেন্ট ...
খাড়া, এই প্রোগ্রামটা আমিও লিখুম :grr:
খুব ভালো লাগলো পোস্টটা :gulli2:
লেইখা ফেল...ঢিচিয়া... :gulli2:
কিছুটা বুঝলাম মনে হয়। :dreamy: :dreamy:
জটিল পোস্ট তৌফিক। :clap: :clap:
কিছুটা??? 😡 😮 😡
তাইফুর ভাইরে ডাক দিমু??? :grr:
আপনে মিয়া হুদাই বিনয় করেন। 🙂
সুন্দর পোস্ট। তৌফিক, তোমার বুঝানোর তরীকা ভাল :)।
মেহেদী ভাই, ভালো আছেন?
অসংখ্য ধন্যবাদ। 🙂
জটিল পুস্ট। তৌফিক ভাই বস। :hug:
প্রোগ্রামটা লেখার সখ জাগছে। টাইম পাইলেই জোশিলা হইয়া যামু। 😉
আরে মিয়া, লিখা ফালাও। ১০ লাইনও হইবো না।
আগ্রহ নেয়ার জন্য ধন্যবাদ। 🙂
ওরে কি লিখলি রে
আপনি ইমো ছাড়া অক্ষর দিয়া কমেন্ট দিলেন যে??? 😮
ইস মনে হইতাছে জীবনে অন্য কিছু না হইয়া "পাই" হইতে পারলেও সার্থক হইত। তয় তোমার উপস্থাপনা জটিল হইছে। :boss:
ক্লাসে পোলাপাইনকে বুঝাইতে পারবা ভাল।
আর একটা কথা, এত বার "হইলো গিয়া" কইছ ক্যান? অন্য শব্দ নাই এইটার? "হইলো গিয়া" ইংরেজীতে কি হইব।
পালটে দেবার স্বপ্ন আমার এখনও গেল না
ইংরেজীতে হইলো গিয়া...(তৌফিক ভাই কইব )... :-B
ফয়েজ ভাই এইজন্যই আমার সিসিবিতে প্রিয় লেখক। হেলাফেলা কইরা লিখছিলাম, ধইরা ফালাইছেন। 🙁
ভবিষ্যতে যত্ন নিয়া লিখুম। 'হইল গিয়া' আমার একটা মুদ্রাদোষ, লেখার সময়ও চলে আসছে। 🙂
মাঝখানে আউলায়া গেলাম। আসলে ডিএসপি পরীক্ষা দিয়ে আসছি তো। 😉
কই আউলাইলি? ব্যাপার না, পরীক্ষা দে। তবে একটা কথা কই, ডিএসপি-র ফুরিয়ার এনালাইসিস যতোই করস না ক্যান, মনে রাখিস, ফুরিয়ার ছিল মেকানিক্যালের লোক। ধাতব পাতে তাপ ক্যামনে ছড়ায় এইটা বাইর করতে গিয়া সে ফুরিয়ার এনালাইসিস বাইর করছিল। :-B
পড়ার জন্য ধন্যবাদ। 🙂
~x( ~x( ~x(
বড়ই বিপদে আছি। না পড়লে মনে হয়, বোকা থাইক্কা যামু! আর পড়লে মনে হয়, আরো বোকা হইলাম!! কি যে করি??
আমি বরং :teacup: খাই। রকিব আমারে কিন্তু বহুতদিন :teacup: দাও না!!
"মানুষে বিশ্বাস হারানো পাপ"
আমি আপনারে চা দিলাম, চা খান... :teacup: :teacup: :teacup:
🙂
তৌফিক ভাই আপনি কিন্তু বলেন নাই r এর মান কতো হবে??
আমি রেডিয়াস ৮০০ এর মতো দি্যা বেশ ভালো মান পাইছি।
আপনি কতো ধরছিলেন??
আমারটার error অনেক বেশি
তবে পোস্টটা পড়ে ভাল লাগ্লো।
r- এর মানের উপর কোন বাধ্যবাধকতা নাই। আমি নিছিলাম ১০০, যাতে ফ্লোটিং পয়েন্টগুলারে মাল্টিপ্লাই করে মোটামুটি একুরেটলি অবস্থান বের করা যায়। আমার সিমুলেশনে আরেকটা ফাঁকিবাজি আছে, সেইটা হইলো র্যানডম নাম্বারের যে ফাংশনটা আমি ব্যবহার করছি ওইটা ০ থেকে 1 -এর মধ্যে ইউনিফর্মলি ডিস্ট্রিবিউটেড র্যানডম জেনারেট করে। সবচেয়ে ভালো হয় নরমাল ডিস্ট্রিবিউশান ব্যবহার করলে। আর এরর বের করার যে ফর্মুলা আমি ব্যবহার করছি ওইটা হইলোঃ
(এস্টিমেটেড 'পাই'-এর মান - ম্যাটল্যাবের ৩২ বিট 'পাই'-এর মান)/ম্যাটল্যাবের ৩২ বিট 'পাই'-এর মান * ১০০
আগ্রহ জাগাইতে পারছি দেখে খুব ভালো লাগছে। তুমি কিন্তু এই পরীক্ষাটা আরো অনেকভাবে করতে পারো। আমি ভয়ে ভয়ে সবচেয়ে সোজাটাই দিছি। 0-মিন এবং 1- স্ট্যান্ডার্ড ডেভিয়শেনের একটা নরমাল ডিস্ট্রিবিউশন নিতে পারো। সব চাল যে বর্গের ভেতরেই পড়তে হবে এমন কোন কথা নাই, বাইরেও পড়তে পারে (আমি সোজা করার জন্য সব ভেতরে ফালাইছি)। তখন পাই-এর মানের এস্টিমেট হবেঃ
4*(শুধু বৃত্তের ভেতরে বা উপরে পড়া চালের সংখ্যা)/ (বর্গের ভেতরে পড়া চালের সংখ্যা(বৃত্তসহ))
জোশ থাকলে ট্রাই করতে পারো। আমি আমার একহাজার মানের সিমুলেশন-এর রেজাল্ট সেভ করে রাখছি। নিতে চাইলে আওয়াজ দিও।
সহজ সরল, পরিপাটি উপস্হাপন। :clap: