Thursday, 25 February 2016

প্রোগ্রামিং-প্যাঁচালি ০১

আমার ভাগ্নি সুষ্মির কাছ থেকে জানলাম, ওদের প্রোগ্রামিং শেখানোর চেষ্টা চালানো হচ্ছে। চেষ্টা খুব একটা ফলপ্রসূ হচ্ছে বলে মনে হয়না। তার কন্ঠের হতাশার ধুলো ধীরে ধীরে ঝাড়ু দিয়ে দূর করার একটা উদ্যোগ নেব কি নেবনা করতে করতেই দেখি লেখাটা দাঁড়িয়ে গেল। তো ছড়িয়ে দিলেই বা ক্ষতি কী? আমার টার্গেট অডিয়েন্স হচ্ছে স্কুল-কলেজের মানুষজন যারা প্রোগ্রামিং সম্পর্কে এখন পর্যন্ত কিছু না জানলেও আজ এই লেখাটা পড়ে ভবিষ্যতে একদিন বিরাট বড় প্রোগ্রামার হয়ে যাবে। :-D

প্রোগ্রামিং কী, কিভাবে, কোথায়, কেন - এসব প্রশ্নের উত্তর খোঁজার আগে প্রোগ্রামিংটা আসলে "কখন" - তা  নিয়ে বরং একটু গল্প জমানোর চেষ্টা করা যাক। ভূমিকা শুধুই সময় নষ্ট। সরাসরি কাজে নেমে পড়ছি।

প্রথমে খুব সাধারণ একটা প্রবলেমের কথা ভাবব। ক্লাস নাইনের ফিজিক্স বই-এ সারাক্ষণই দ্যাখা যায় - এরকম একটা প্রবলেম।

  • একটা গাড়ি 15 ms-1 আদিবেগ নিয়ে চলছে। তার ত্বরণ 10 ms-2 । গাড়িটি 20 সেকেন্ডে কতটুকু দূরত্ব অতিক্রম করবে? 

এই প্রশ্ন হাতে আসলে প্রথমেই যেটা হবে, সেটা হল, খুশিতে সব দাঁত বেরিয়ে পড়বে। পরিষ্কার দ্যাখা যাচ্ছে প্রশ্নের মধ্যেঃ u = 15, a = 10, t = 20. বের করতে হবে s এর মান। এ আর এমন কী কঠিন?  s = ut + 1/2 at সূত্রে মানগুলো বসিয়ে দিলেই তো হয়ে গেল, তাইনা?

নিশ্চয়ই তাই! এবার প্রবলেমটাকে একটু বদলে দেওয়াযাকঃ


  • একটা গাড়ি 15 ms-1 আদিবেগ নিয়ে চলছে। তার ত্বরণ 10 ms-2 । 20s থেকে 40s এর মধ্যে প্রতি সেকেন্ড পর পর গাড়িটির অবস্থান নির্ণয় কর। 




এরকম প্রবলেম দেখলে হাসি মিলিয়ে যাবেনা নিশ্চিত, কিন্তু খানিকটা বিরক্তিও লাগবে। কারন আমাদেরকে এখন t = 20s, t = 21s, t = 22s, t = 23s, t = 24s, ... ... t = 38s, t = 39s, এবং t = 40s -প্রত্যেক মুহুর্তের জন্যই s এর মান ক্যালকুলেট করতে হবে।

প্রবলেমটাকে আরেকটু বিরক্তিকর করা যাকঃ
  • বিশটি গাড়ির রেস শুরু হয়েছে। ঠিক বিকাল তিনটায় গাড়ি গুলোর বেগ (u) যথাক্রমেঃ 65, 59, 44, 80, 74, 82, 43, 66, 50, 55, 79, 51, 66, 53, 84, 82, 47, 85, 77 এবং 76 ms-1 , এবং ত্বরণ (a) যথাক্রমেঃ 17, 20, 11, 16, 17, 13, 18, 10, 20, 19, 10, 10, 13, 12, 12, 20, 14, 15, 17 এবং 17 ms-2 , ঘড়িতে তিনটা বেজে বিশ সেকেন্ড থেকে তিনটা বেজে চল্লিশ সেকেন্ডের মধ্যে - এই প্রতি সেকেন্ড পর পর গাড়ি গুলির অবস্থান নির্নয় কর।

এবার আর মুখে হাসি থাকবেনা। মেজাজ বিগড়ে যাবে। কারন এবার  t = 20s ধরে তার জন্য বিশটি গাড়ির প্রত্যেকের আলাদা আলাদা u এবং a নিয়ে বিশবার সূত্র থেকে s ক্যালকুলেট করতে হবে। তারপর t = 21s ধরে আবারও বিশবার একই জিনিস ক্যালকুলেট করতে হবে। তারপর আবার t = 22s ধরে...

 ... এরকম চলতেই থাকবে! একই ক্যালকুলেশন বার বার! প্রচন্ড বিরক্তিকর। কিন্তু এত জিনিস পত্র কি হাতে বা ক্যালকুলেটর চেপে করা চারটিখানি কথা? সম্ভব তো অবশ্যই, কিন্তু এই সময় খরচ করার কোন মানে হয়? কোনই মানে হয়না! কিন্তু উত্তর গুলোও তো দরকার। কাওকে না কাওকে তো ক্যালকুলেট করতে হবে। কে করবে? 

এসব কাজ করার জন্য আমাদের একজন বিশেষ বন্ধু আছে। তার বুদ্ধিসুদ্ধি বলতে গেলে একদমই নেই, কিন্তু তার হিসাব-নিকাশ করার গতি ভয়ানক! আমরা তার ভাষায় তাকে যা-ই বলব, সে কোন রকমের প্রতিবাদ ছাড়াই ঠিক তা-ই করে দেবে। আমাদের এই গাধা প্রজাতির বন্ধুটির নাম কম্পিউটার। আর তার সাথে যোগাযোগ করার ভাষা গুলিই হচ্ছে প্রোগ্রামিং ল্যাংগুয়েজ। 

গাড়ির ছোটাছুটির প্রবলেমটা আমরা খুব সাধারন একটা প্রোগ্রাম লিখেই সমাধান করে ফেলতে পারি। এমন একটা প্রোগ্রাম, যেটা ইনপুট হিসেবে u, t আর a এর মান নেবে, এবং s = ut + 1/2 at2 সূত্রটাকে কাজে লাগিয়ে আউটপুট হিসেবে s এর মান বের করে দেবে।

আমি আসলে এখানেই প্রোগ্রামটা লিখে ফেলেছি। সময়, আদিবেগ আর ত্বরণের মান নিচের সাদা অংশে ইনপুট দিয়ে "ফলাফল" বাটন চাপলেই একটা গাড়ি কতখানি পথ পার হয়েছে তা বেরিয়ে পড়বে।


সময় t = সেকেন্ড,
আদিবেগ u = ms-1
ত্বরণ a = ms-2

 

অতিক্রান্ত দূরত্ব = ?


এমন কি, উপরের ইনপুট গুলো ঠিক করে শুধু একটা বাটনের ক্লিকে যে কোন গাড়ির পরবর্তি বিশ সেকেন্ডের অবস্থান নিমেষের মধ্যে বের করে ফেলাও মোটেই কোন কঠিন কাজ না! যাদের বিশ্বাস হচ্ছেনা, তারা নিচের লাল বাটনটায় ক্লিক করলেই আলাদিনের দৈত্য এসে লুকিয়ে লুকিয়ে সব ক্যালকুলেশন করে  মুহুর্তের মধ্যে পরবর্তি বিশ সেকেন্ডের ইতিহাস হাজির করবে!





এটা দূরত্ব বের করার জন্য একটা খুব সাধারণ প্রোগ্রাম। আমি শুধু কম্পিউটারকে কাজগুলো করার জন্য বলেছি। এই বলাটাই হল প্রোগ্রামিং। সময় নিয়ে কম্পিউটারকে ঠিকঠাক মত বললে সে এসব ছোটখাটো ক্যালকুলেটের থেকে শুরু করে বাজখাঁই সব সফটওয়্যার তৈরি করে দিতে পারে। কিন্তু তাকে বলতে হবে তার ভাষায়। পৃথিবীর মানুষের যেমন বাংলা, ইংরেজি, জার্মান, ফ্রেঞ্চ, আরবি, হিন্দি, চাইনিজ, জাপানিজ -  অনেক অনেক ভাষা, তেমনি কম্পিউটারেরও অনেক ভাষা। সেগুলোর নামও একেক রকম। সি, সি++, পাইথন, জাভাস্ক্রীপ্ট, জাভা, ফরট্রান, এবং আরও আরও অনেক।

এখন প্রশ্ন হল, আমি প্রোগ্রামটা লিখলাম কোথায়? কী ভাষাতেই বা লিখলাম? কী কী নিয়মনীতি মেনে লিখলাম?

লম্বা যাত্রার প্রারম্ভটা হতে হয় ধীর লয়ে। প্রথম দিনের লেখায় প্রশ্ন গুলো রহস্যই থাকুক। সামনে অনেকদূর পথ হাঁটতে হবে।

"The woods are lovely, dark and deep,
But I have promises to keep,
And, miles to go before I sleep,
And, miles to go before I sleep."

শুভ কামনা।
: -)





Tuesday, 29 January 2013

লী গ্রুপ ১ - গ্যালওয়া'র ভাবনা


গ্যালওয়া'র আবিষ্কার নিয়ে যে খটোমটো কথা গুলি বলতে চেয়েছিলাম সেগুলো বলে নেই। এখানে আমি একটু অপরাধ করব। সেটা হল, আমি ধরে নেব, গ্রুপ থিওরী'র একদম প্রাথমিক ব্যাপার গুলো আমার অডিয়েন্সের জানা। আমি ধরে নেব, গ্রুপ, সাবগ্রুপ, অ্যাবেলিয়ান গ্রুপ, কোসেট, ফ্যাক্টর গ্রুপ, পারম্যুটেশন গ্রুপ, ইনভ্যারিয়্যান্ট সাবগ্রুপ - এই জিনিসগুলো নিয়ে আমার অডিয়েন্সের কিছুটা ধারণা আছে। এখন প্রশ্ন হল, গ্যালওয়া কোন ইনফর্মেশন থেকে বুঝতেন যে অ্যালজেব্রাইক ইকুয়েশনটা সল্ভ করা যাবে কিনা। আপাতত ইকুয়েশন বলতে অ্যালজেব্রাইক ইকুয়েশনই বুঝাচ্ছি। মানে
$$ a_0 x^n + a_1 x^{n-1} + \ldots + a_{n-1} x + a_n = 0 $$
-এই ধরনের আরকি। \(x \)  রিয়াল নাম্বার, কমপ্লেক্স নাম্বার দুটোই হতে পারে।

গ্যালওয়া বললেন, এরকম প্রতিটা ইকুয়েশনের কারেস্পন্ডেন্সে একটা  ফাইনাইট গ্রুপ থাকবে। সেটা হবে ওই ইকুয়েশনের ডিগ্রীর সমান অর্ডারের পারম্যুটেশন গ্রুপ। যেমন,
$$x^2 +6x + 5 = 0 $$
এই ইকুয়েশনের ডিগ্রী  2 (কঠিন বাংলায় যাকে বলে দ্বিঘাত সমীকরণ)। তাই এর কারেস্পন্ডিং ফাইনাইট গ্রুপ হবে \(S_2\), অর্থাৎ, 2 অর্ডারের পারম্যুটেশন গ্রুপ। ইকুয়েশনটা যদি কিউবিক হয়, অর্থাৎ এর ডিগ্রী যদি হয় 3, তাহলে গ্রুপ হবে \(S_3\). বিভিন্ন ক্ষেত্রে এই \(S_n\) এর স্ট্রাকচার দেখে বোঝা যাবে যে ইকুয়েশনটা সল্ভ করা যাবে কিনা।

স্ট্রাকচারটা তাহলে কী?

স্ট্রাকচারটা হল ওই \(S_n\) এর সাবগ্রুপ চেইন। বুঝিয়ে দাওয়ার চেষ্টা করছি। ধরাযাক, ওই \(S_n\) এর ভেতর  বেশ কিছু সাবগ্রুপ পাওয়া গেলঃ \(G_0, G_1, G_2, G_3, \ldots, G_{n-1}, G_n\). এবং এটাও ধরে নিচ্ছি যে, \(G_0\) হল গ্রুপের (\(S_n\) এর) আইডেন্টিটি ইলিমেন্ট, আর \(G_n\) হল স্বয়ং \(S_n\). এখন, এই সাবগ্রুপ গুলোর মধ্যে যদি এমন একটা চেইন থাকে যাতেঃ
$$ G_0 \subset G_1 \subset G_2 \subset G_3 \subset \ldots, G_{n-1} \subset G_n $$
হয়, এবং যদি প্রতিটা \(G_{n-1}\) হয় \(G_n\) এর ইনভ্যারিয়্যান্ট সাবগ্রুপ, এবং (এটাই শেষ শর্ত),  \(G_n / G_{n-1}\) ফ্যাক্টর গ্রুপ গুলোর প্রতিটিই যদি হয় অ্যাবেলিয়ান, তাহলেই কেবল একটা ইকুয়েশনকে তার ডিগ্রীর বর্গমুলের সাহায্যে ডিরেক্টলি সল্ভ করা সম্ভব।

আমি এই ভয়ঙ্করদর্শন থিওরেমের কাঠিন্য দেখে অবাক হচ্ছিনা। আমি অবাক হচ্ছি এটা ভেবে, যে গ্যালওয়া এটি আবিষ্কার করেছিলেন ১৮২৯ এর দিকে। কত বয়স ছিল তাঁর তখন? বড়জোড় ১৮! আমার মাথার উপর পারমানবিক বোমা ফেললেও এই তত্ত্ব বেরুতনা। এই লেখায় আমি আর ডিটেইলে যাচ্ছিনা। কিভাবে ইকুয়েশন গুলোকে সল্ভ করা হয়, সেটা নিয়ে না হয় আরেকদিন বসব। এখন অন্য কথা ভাবছি।

গ্যালওয়া যখন তাঁর পেপার লিখে জার্নালে জমা দিয়েছিলেন, তখন সেটা ছাপা হয়নি। কেন হয়নি, কেউ বলতে পারেনা। হয়ত রেফারী ভেবেছিলেন, এটা কিছুই হয়নি, অথবা কর্তৃপক্ষ ভেবেছিল, পরে ছাপাব, অথবা পেপার গুলো হারিয়ে গিয়েছিল, বা কোন মহান গণিতজ্ঞের বুকশেলফের নিচে গড়াগড়ি খাচ্ছিল, কে জানে কি হয়েছিল। এরপর গ্যালওয়াও বেশি দিন বাঁচেননি। ১৮৩২ সালে একটা ডুয়েলে তিনি মারা যান।  অনেকে বলে, প্রেমের কারনে।

এই অসামান্য প্রতিভাধর কিশোরের সব গবেষনাই হয়ত মানুষ ভুলে যেত, যদি ১৮৪০ এর দিকে কশি কাজ গুলো নিয়ে না ভাবতেন।

বিভিন্ন কনফারেন্সে, জার্নালে যখন পেপার দেই, এবং যখন ওগুলো রিজেক্টেড হয়, তখন মাঝেমধ্যে ভালই লাগে। নিজের ভেতর খানিক গ্যালওয়া-গ্যালওয়া অনুভুতি হয়। এরচে' বেশি কিছু হয়না অবশ্য। নিজের জ্ঞানের পুরুত্ব তো জানি..



Monday, 28 January 2013

লী গ্রুপ ০ - শুরুর কথা।

আমরা যারা ম্যাথম্যাটিক্স ও ফিযিক্স এর সাথে ওঠাবসা করি, তারা সবাই লী-গ্রুপ  নামটির সাথে কমবেশি পরিচিত। জিনিসটা বেশির ভাগ সময়েই অতি দ্রুতগতিসম্পন্ন বাউন্সার বলের মত আমার মাথার অনেক ওপর দিয়ে পার হয়ে যায়। মাঝে মধ্যেই জামার আস্তিন কনুই পর্যন্ত গুটিয়ে প্রতিজ্ঞা করি, লী গ্রুপ  বুঝেই ছাড়ব এবার! কিন্তু তারপর আবার সেই পুরনো ভুত। শ্রদ্ধেয় লী তাঁর গ্রুপ সমেত থেকে যান বইয়ের মলাটে। 


নিজের আলসেমিকে ফাঁকি দেয়ার একটা উপায় মাথায় এল। ভাবছি, লী গ্রুপ  নিয়ে যখন যা কিছু শিখব, এই ব্লগে লিখে রাখব। যাহা লিখিব সত্য লিখিব। সত্য বৈ মিথ্যা লিখিবনা। সবাইকে ভুল ধরিয়ে দেওয়ার জন্য সাদর আমন্ত্রন।

শুরু করা যাক!

লী গ্রুপ জিনিসটা কোথা থেকে উদয় হল, সেটা নিয়ে ভাবছিলাম। জানতে পারলাম, লী গ্রুপের প্রথম গল্প সফাস লী'কে নিয়ে নয়। বরং গল্পটার প্রথম পর্বের নায়ক হলেন গ্যালওয়া, সেই কিশোর ম্যাথম্যাটিশিয়ান। তিনি ছোট্ট বয়সেই গ্রুপ থিওরীকে কাজে লাগিয়ে কিভাবে অ্যালজেব্রাইক ইকুয়েশন সল্ভ করতে হয়, তা বার করে ফেললেন। এটার ডেটেইল নিয়ে কিছু খটটোমটো কথা আমি অবশ্যই লিখব কিছুক্ষণ পর। তার আগে আসল কথাটা বলে রাখি।

Evarsite Galois (1811-1832) Sophus Lie (1842-1899)
গ্যালওয়া যেটা বুঝতে পেরেছিলেন সেটা হল, একটা অ্যালজেব্রাইক ইকুয়েশনের কারেস্পন্ডেন্সে সবসময় একটা ফাইনাইট গ্রুপ থাকবে। সেই ইকুয়েশনকে সল্ভ করা যাবে কিনা তা নির্ভর করবে ওই কারেস্পন্ডিং ফাইনাইট গ্রুপের স্ট্রাকচারের উপর।

গ্যালওয়া'র এই আইডিয়া থেকেই লী ভাবলেন, অ্যালজেব্রাইক ইকুয়েশন সল্ভ করা যাবে কিনা, সেই ইনফর্মেশন যদি জমা থাকে একটা ফাইনাইট গ্রুপের ভেতর, তাহলে, ডিফেরেনশিয়াল ইকুয়েশন সল্ভ করা যাবে কিনা - এই তথ্য হয়ত লুকিয়ে থাকবে একটা ইনফাইনাইট গ্রুপের ভেতর।

এই শুরু হল লী গ্রুপের যাত্রা। এরপর সবই ইতিহাস।

সেই ইতিহাসই জানার চেষ্টা করছি। যখনি জানব, লিখে রাখব আশা রাখি।