Skip to content

অধ্যায় ০.৪ · Calculus II — Integration

১ · ভূমিকা ও insight (অন্তর্দৃষ্টি)

গত অধ্যায়ে (0.3) আমরা derivative (তাৎক্ষণিক পরিবর্তনের হার) শিখেছি — একটি curve-এর কোনো বিন্দুতে slope কত। এই অধ্যায়ে আমরা ঠিক উল্টো প্রশ্ন করব: একটি curve-এর নিচে কতটুকু জায়গা (area) আছে? এই area বের করার গাণিতিক যন্ত্রের নাম integral (বক্ররেখার নিচের ক্ষেত্রফল / accumulation বা সঞ্চয়)।

কেন statistics-এ এটি অপরিহার্য? একটি গল্প দিয়ে শুরু করি।

ধরুন আপনি একটা শহরের সব প্রাপ্তবয়স্ক মানুষের উচ্চতা মাপলেন। উচ্চতা একটি continuous রাশি — কেউ ১৭০.০ cm, কেউ ১৭০.০০০৩ cm। এমন রাশির ক্ষেত্রে "ঠিক ১৭০.০০০০... cm লম্বা হওয়ার probability কত?" — এই প্রশ্নের উত্তর কার্যত শূন্য (অসীম সম্ভাব্য মান, প্রতিটির ভাগে কিছুই পড়ে না)। তাহলে আমরা প্রশ্নটা পাল্টাই: "উচ্চতা ১৬৮ থেকে ১৭২ cm-এর মধ্যে হওয়ার probability কত?" — এর উত্তর দেওয়া যায়।

continuous রাশির জন্য আমরা একটি probability density function (সংক্ষেপে density, বা pdf — সম্ভাব্যতার ঘনত্ব) আঁকি: একটি মসৃণ curve \(f(x)\)। আর তখন—

probability = density curve-এর নিচের area।

অর্থাৎ "১৬৮ থেকে ১৭২-এর মধ্যে থাকার probability" = \(f(x)\) curve-এর \(x=168\) থেকে \(x=172\) পর্যন্ত নিচের area। এই area-ই integral। এজন্যই continuous probability, expectation (গড়), variance — Part II-র প্রায় সব কিছুই integral দিয়ে লেখা হয়। density যদি integral-এর ভাষা না বুঝি, তবে continuous distribution কখনোই পরিষ্কার হবে না।

Hook — দূরত্ব ও গতি। একটা গাড়ির speedometer প্রতি মুহূর্তে গতি (speed) দেখায়। ১ ঘণ্টায় গাড়ি কত দূর গেল? যদি গতি সারাক্ষণ ৬০ km/h থাকত, উত্তর সহজ: \(60 \times 1 = 60\) km — অর্থাৎ "গতি × সময়", যা একটা আয়তক্ষেত্রের (rectangle) ক্ষেত্রফল (উচ্চতা ৬০, প্রস্থ ১)। কিন্তু গতি যদি ওঠা-নামা করে? তখন আমরা সময়কে অনেক ছোট ছোট টুকরোয় ভাগ করি, প্রতিটি টুকরোয় গতি প্রায় ধ্রুবক ধরে ছোট ছোট দূরত্ব যোগ করি — এটাই Riemann sum, আর টুকরোগুলো অসীম সূক্ষ্ম করলে যা পাই তা-ই integral। গতি-সময় curve-এর নিচের area = মোট দূরত্ব। ঠিক এই "ছোট টুকরো যোগ করে সঞ্চয়" ধারণাটাই density-র নিচের area = probability হিসেবে ফিরে আসবে।


২ · মূল ধারণা ও সংজ্ঞা

২.১ area-কে rectangle দিয়ে আনুমানিক করা — Riemann sum

ধরা যাক একটি function \(f(x)\) আছে যা \([a, b]\) ব্যবধানে (interval) ধনাত্মক ও মসৃণ। আমরা চাই \(f\)-এর curve, \(x\)-অক্ষ, এবং উল্লম্ব রেখা \(x=a\)\(x=b\) দিয়ে ঘেরা area

curve-এর নিচের আকৃতি বাঁকা, তাই সরাসরি area-র সূত্র নেই। কৌশল: এই area-কে অনেকগুলো সরু rectangle দিয়ে ঢেকে দিই, কারণ rectangle-এর area জানি (\(=\) প্রস্থ \(\times\) উচ্চতা)।

ধাপগুলো (notation বাংলায় খোলা হলো):

  1. \([a,b]\)-কে \(n\) টি সমান টুকরোয় ভাগ করি। প্রতিটি টুকরোর প্রস্থ $\(\Delta x = \frac{b-a}{n}.\)$ এখানে \(\Delta x\) ("ডেল্টা x") মানে \(x\)-অক্ষে এক টুকরোর প্রস্থ।

  2. ভাগ-বিন্দুগুলো (partition points): \(x_0 = a,\ x_1 = a + \Delta x,\ x_2 = a + 2\Delta x, \dots,\ x_n = b\)। সাধারণভাবে \(x_i = a + i\,\Delta x\)

  3. প্রতিটি টুকরোয় একটি height বাছি — function-এর মান কোনো একটি প্রতিনিধি বিন্দু \(x_i^\*\)-তে, অর্থাৎ \(f(x_i^\*)\)। সেই টুকরোর rectangle-এর area \(= f(x_i^\*)\,\Delta x\)

  4. সব rectangle-এর area যোগ করি: $$ S_n = \sum_{i=1}^{n} f(x_i^*)\,\Delta x. $$ এই যোগফল \(S_n\)-ই Riemann sum (রিমান যোগফল — area-র আনুমানিক মান)।

প্রতিনিধি বিন্দু \(x_i^\*\) কোথায় নেব, তার ওপর তিনটি প্রচলিত নাম: - left Riemann sum — প্রতিটি টুকরোর বাম প্রান্ত: \(x_i^\* = x_{i-1}\)। - right Riemann sum — ডান প্রান্ত: \(x_i^\* = x_i\)। - midpoint rule — টুকরোর মাঝবিন্দু: \(x_i^\* = \tfrac{1}{2}(x_{i-1}+x_i)\) (সাধারণত সবচেয়ে নির্ভুল)।

২.২ definite integral — limit হিসেবে সংজ্ঞা

rectangle যত সরু হবে (\(n\) যত বড়, \(\Delta x\) যত ছোট), আনুমানিক area তত নিখুঁত হবে। \(n \to \infty\) সীমায় (limit) এই যোগফল একটি নির্দিষ্ট মানে স্থির হয় — সেটাই definite integral:

\[ \boxed{\ \int_a^b f(x)\,dx \;=\; \lim_{n\to\infty} \sum_{i=1}^{n} f(x_i^\*)\,\Delta x\ } \]

notation-এর প্রতিটি টুকরো বাংলায়: - \(\displaystyle\int\) — "integral sign", আসলে S (sum) অক্ষরের লম্বা রূপ; "যোগ করো" বলছে। - \(a\) (নিচে) ও \(b\) (উপরে) — limits of integration (নিম্ন ও ঊর্ধ্ব সীমা): কোথা থেকে কোথা পর্যন্ত যোগ। - \(f(x)\)integrand (যে function-এর area নিচ্ছি)। - \(dx\) — অসীম সূক্ষ্ম প্রস্থ \(\Delta x\)-এর limit রূপ; "\(x\) বরাবর যোগ করছি" তা মনে করায়, আর কোন variable-এ integrate করছি তা জানায়।

এই \(\int_a^b f(x)\,dx\) একটি সংখ্যা (number) — \(a\) থেকে \(b\) পর্যন্ত curve-এর নিচের signed area।

signed area (চিহ্নিত ক্ষেত্রফল)। integral কেবল "জায়গা" নয়, চিহ্নসহ জায়গা। \(f(x)\) যেখানে \(x\)-অক্ষের উপরে (ধনাত্মক), সেই area ধনাত্মক হিসেবে যোগ হয়; যেখানে \(f(x)\) অক্ষের নিচে (ঋণাত্মক), সেই area ঋণাত্মক হিসেবে বিয়োগ হয়। যেমন \(\int_0^{2\pi}\sin x\,dx = 0\) — উপরের ও নিচের area পরস্পর কাটাকাটি করে ফেলে (§৬-এ ছবি)।

কখন এই limit আসলেই থাকে? Part 0-তে আমরা ধরে নেব \(f\) যথেষ্ট ভালো (যেমন continuous বা টুকরো-টুকরো continuous) — তখন integral সর্বদা থাকে। কোন function-এর integral থাকে আর কোনটির থাকে না — সেই rigorous প্রশ্ন (Riemann বনাম Lebesgue integrability) Part VII-এ।

২.৩ antiderivative ও indefinite integral

একটি function \(F(x)\)-কে \(f(x)\)-এর antiderivative (প্রতি-অন্তরকলজ) বলি যদি \(F'(x) = f(x)\) হয়। অর্থাৎ derivative নিলে \(F\) ফিরে \(f\) হয়ে যায়।

উদাহরণ: \(f(x) = x^2\)-এর একটি antiderivative \(F(x) = \tfrac{x^3}{3}\), কারণ \(\frac{d}{dx}\tfrac{x^3}{3} = x^2\)। লক্ষ করুন \(\tfrac{x^3}{3}+5\)-ও antiderivative — ধ্রুবকের (constant) derivative শূন্য। তাই antiderivative একটি অজানা ধ্রুবক \(C\) সহ লেখা হয়:

\[ \int f(x)\,dx = F(x) + C \qquad (\text{indefinite integral — সীমাহীন integral}). \]

এখানে সীমা নেই, ফল একটি function (definite integral-এর মতো সংখ্যা নয়)। \(C\)-কে constant of integration বলে।

কিছু মৌলিক antiderivative (এগুলো derivative-এর নিয়ম উল্টো করেই পাওয়া, 0.3 মনে করুন):

\(f(x)\) \(\int f(x)\,dx\)
\(x^n\ (n\neq -1)\) \(\dfrac{x^{n+1}}{n+1} + C\)
\(\dfrac{1}{x}\) \(\ln\lvert x\rvert + C\)
\(e^{x}\) \(e^{x} + C\)
\(\cos x\) \(\sin x + C\)
\(\sin x\) \(-\cos x + C\)

২.৪ Fundamental Theorem of Calculus (FTC)

কেন antiderivative গুরুত্বপূর্ণ? কারণ Fundamental Theorem of Calculus (ক্যালকুলাসের মৌলিক উপপাদ্য) দেখায় যে definite integral গণনা করতে limit-এর সেই কষ্টকর যোগফল লাগে না — শুধু একটি antiderivative দরকার।

Part 1 (antiderivative দিয়ে integral গণনা)। যদি \(F\) হয় \(f\)-এর একটি antiderivative (\(F' = f\)), তবে $$ \int_a^b f(x)\,dx = F(b) - F(a). $$ ডান পক্ষকে সংক্ষেপে \(\big[F(x)\big]_a^b\) লেখা হয় ("\(F\)-এর মান \(b\)-তে বিয়োগ \(F\)-এর মান \(a\)-তে")।

Part 2 (integral দিয়ে antiderivative)। "চলমান উপরের সীমা" দিয়ে একটি area-function বানাই: $$ A(x) = \int_a^x f(t)\,dt \quad\Longrightarrow\quad A'(x) = f(x). $$ অর্থাৎ area জমা হওয়ার তাৎক্ষণিক হার = সেই বিন্দুর function মান।

এই দুই অংশ একসাথে যা বলে তা গভীর ও সুন্দর:

integration ও differentiation পরস্পরের বিপরীত (inverse) প্রক্রিয়া। একটায় সঞ্চয় করি, অন্যটায় হার বের করি — একটি অন্যটাকে বাতিল করে দেয়।

(integration variable হিসেবে এখানে \(t\) ব্যবহার করেছি যাতে উপরের সীমার \(x\)-এর সাথে গুলিয়ে না যায়; integration variable একটি "dummy" — নাম যা-ই হোক, integral-এর মান বদলায় না।)

২.৫ improper integral — অসীম সীমা

statistics-এ density প্রায়ই পুরো বাস্তব সংখ্যারেখায় (whole real line) ছড়ানো — যেমন normal distribution \(-\infty\) থেকে \(+\infty\) পর্যন্ত। তখন সীমা অসীম, একে improper integral (অপ্রকৃত integral) বলি। সংজ্ঞা একটা limit দিয়ে: $$ \int_a^{\infty} f(x)\,dx = \lim_{t\to\infty} \int_a^{t} f(x)\,dx, \qquad \int_{-\infty}^{\infty} f(x)\,dx = \lim_{s\to-\infty}\lim_{t\to\infty} \int_{s}^{t} f(x)\,dx. $$ limit-টি একটি সসীম (finite) সংখ্যায় পৌঁছালে integral converges (অভিসারী), নাহলে diverges (অপসারী)। উদাহরণ: \(\int_0^\infty e^{-x}\,dx\) converges (মান \(1\)); কিন্তু \(\int_1^\infty \frac{1}{x}\,dx\) diverges।

২.৬ double integral — volume-এর সংক্ষিপ্ত পরিচয়

এক variable-এর integral curve-এর নিচের area দেয়। দুই variable-এর function \(f(x,y)\) একটি surface (তল) — একটা পাহাড়ের মতো। তখন integral সেই surface-এর নিচের volume (আয়তন) দেয়। একে double integral বলি: $$ \iint_{R} f(x,y)\,dA = \lim \sum_{i,j} f(x_i^*, y_j^*)\,\Delta x\,\Delta y. $$ ভাবুন: তল-অঞ্চল \(R\)-কে ছোট ছোট আয়তাকার টালি (tile) \(\Delta x \times \Delta y\)-তে ভাগ করি; প্রতিটি টালির ওপর একটি সরু "স্তম্ভ" (column) দাঁড় করাই যার উচ্চতা \(f(x_i^\*, y_j^\*)\); স্তম্ভের আয়তন \(=\) উচ্চতা \(\times\) ভিত্তির area; সব যোগ করে limit নিই — পাই volume।

বাস্তবে double integral গণনা করি iterated integral (পুনরাবৃত্ত integral) হিসেবে — একবারে এক variable: $$ \iint_{R} f(x,y)\,dA = \int_{c}^{d}!!\left(\int_{a}^{b} f(x,y)\,dx\right)dy. $$ ভেতরের integral-এ \(y\)-কে ধ্রুবক ধরে শুধু \(x\)-এ integrate করি (একটা "টুকরো" বা slice-এর area), তারপর সেই ফলকে \(y\)-তে integrate করি (slice-গুলো জুড়ে volume)। statistics-এ দুটি random variable একসাথে থাকলে তাদের joint density \(f(x,y)\) হয়, আর "দুটোই কোনো অঞ্চলে পড়ার probability" = সেই অঞ্চলের ওপর double integral।


৩ · পূর্ণাঙ্গ উদাহরণ

উদাহরণ ১ — Riemann sum হাতে গণনা ও limit মিলিয়ে দেখা

\(f(x) = x^2\)-এর \([0, 2]\)-তে area, \(n = 4\) rectangle দিয়ে right Riemann sum দিয়ে আনুমানিক করি।

  • প্রস্থ: \(\Delta x = \dfrac{2-0}{4} = 0.5\)
  • ডান প্রান্ত বিন্দু: \(x_1 = 0.5,\ x_2 = 1.0,\ x_3 = 1.5,\ x_4 = 2.0\)
  • উচ্চতা \(f(x_i) = x_i^2\): \(0.25,\ 1.0,\ 2.25,\ 4.0\)
  • যোগফল: $$ S_4 = (0.25 + 1.0 + 2.25 + 4.0)\times 0.5 = 7.5 \times 0.5 = 3.75. $$

এখন FTC দিয়ে সঠিক মান: \(x^2\)-এর antiderivative \(\tfrac{x^3}{3}\), তাই $$ \int_0^2 x^2\,dx = \Big[\tfrac{x^3}{3}\Big]_0^2 = \tfrac{8}{3} - 0 = 2.6667. $$ \(S_4 = 3.75\) একটু বেশি (right sum, তাই overestimate)। \(n\) বাড়ালে \(S_n \to 2.6667\), অর্থাৎ \(\int_0^2 x^2\,dx = 8/3\) (§৫-এর Riemann sum code-এ এই অভিসরণ সংখ্যায় যাচাই করা আছে)।

উদাহরণ ২ — substitution: \(\displaystyle\int_0^1 2x\,e^{x^2}\,dx\)

substitution (প্রতিস্থাপন) হলো chain rule-এর উল্টো। একটি ভেতরের অংশকে নতুন variable \(u\) ধরি।

ধরি \(u = x^2\)। তাহলে \(\dfrac{du}{dx} = 2x\), অর্থাৎ \(du = 2x\,dx\) — ঠিক integrand-এ \(2x\,dx\) অংশটি আছে! সীমাও বদলাই: \(x=0 \Rightarrow u=0\), \(x=1 \Rightarrow u=1\)। $$ \int_0^1 2x\,e^{x^2}\,dx = \int_0^1 e^{u}\,du = \big[e^{u}\big]_0^1 = e^1 - e^0 = e - 1 \approx 1.7183. $$ (§৫-এ scipy ও sympy উভয়েই \(1.7183\) নিশ্চিত করেছে।)

উদাহরণ ৩ — integration by parts: \(\displaystyle\int_0^1 x\,e^x\,dx\)

integration by parts (অংশে অংশে integration) হলো product rule-এর উল্টো। সূত্র: $$ \int u\,dv = uv - \int v\,du. $$ লক্ষ্য: এমনভাবে \(u\)\(dv\) ভাগ করা যাতে নতুন integral \(\int v\,du\) সহজ হয়। এখানে \(u = x\) (derivative নিলে সরল হয়ে \(1\) হয়), \(dv = e^x\,dx\) (integrate করলে \(v = e^x\))। $$ du = dx, \qquad v = e^x. $$ $$ \int_0^1 x\,e^x\,dx = \big[x\,e^x\big]_0^1 - \int_0^1 e^x\,dx = (1\cdot e^1 - 0) - \big[e^x\big]_0^1 = e - (e - 1) = 1. $$ ফল ঠিক \(1\) (§৫-এ নিশ্চিত)। ভাগ উল্টো করলে (যেমন \(u=e^x,\ dv=x\,dx\)) integral আরও জটিল হতো — তাই কোনটাকে \(u\) ধরব, সেই বাছাই-ই কৌশল। (একটি সহায়ক নিয়ম: LIATE — Log, Inverse-trig, Algebraic, Trig, Exponential — এই ক্রমে আগেরটিকে \(u\) ধরা সুবিধাজনক।)

উদাহরণ ৪ — improper integral ও density normalization

statistics-এ অপরিহার্য একটি ফল: Exponential distribution-এর density \(f(x) = e^{-x}\) (\(x \ge 0\), নাহলে \(0\))। এটি বৈধ density হতে হলে মোট area \(1\) হওয়া চাই: $$ \int_0^{\infty} e^{-x}\,dx = \lim_{t\to\infty}\big[-e^{-x}\big]0^{t} = \lim\big) = 0 + 1 = 1. \checkmark $$ এটাই }\big(-e^{-t} + e^{0normalization — density-র নিচের মোট area সর্বদা \(1\) (মোট probability \(=1\))।

এবার expectation (গড় মান) — density-কে \(x\) দিয়ে গুণ করে integrate: $$ \mathbb{E}[X] = \int_0^{\infty} x\,e^{-x}\,dx = 1 $$ (integration by parts দিয়ে; §৫-এ যাচাই)। অর্থাৎ Exponential\((1)\)-এর গড় \(1\)। এই দুটি গণনা (\(\int f = 1\) আর \(\int x f = \mathbb{E}[X]\)) Part II-তে অবিকল এভাবেই ফিরে আসবে।


৪ · প্রমাণ ও derivation (উৎপাদন)

৪.১ FTC Part 1 — কেন \(\int_a^b f = F(b) - F(a)\) (difficulty ★★)

আমরা FTC Part 2-কে (অর্থাৎ \(A(x)=\int_a^x f(t)\,dt \Rightarrow A'(x)=f(x)\)) মেনে নিয়ে Part 1 প্রমাণ করব। ধাপগুলো:

ধাপ ১. area-function সংজ্ঞা করি: \(A(x) = \displaystyle\int_a^x f(t)\,dt\)। সংজ্ঞা থেকেই \(A(a) = \int_a^a f = 0\) (শূন্য প্রস্থ, শূন্য area) এবং \(A(b) = \int_a^b f\) — অর্থাৎ যা আমরা চাই।

ধাপ ২ (FTC Part 2 ব্যবহার)। \(A'(x) = f(x)\)। তার মানে \(A\) নিজেই \(f\)-এর একটি antiderivative।

ধাপ ৩। ধরা যাক \(F\) আমাদের হাতের কোনো antiderivative (\(F' = f\))। দুটি antiderivative-এর পার্থক্য একটি ধ্রুবক (কারণ \(\frac{d}{dx}(A - F) = f - f = 0\), আর derivative শূন্য মানে function ধ্রুবক — 0.3-এ দেখা)। তাই $$ A(x) = F(x) + C \quad\text{কোনো ধ্রুবক } C\text{-র জন্য}. $$

ধাপ ৪ (\(C\) বের করা)। \(x = a\) বসাই: \(A(a) = 0\), তাই \(0 = F(a) + C \Rightarrow C = -F(a)\)

ধাপ ৫ (উপসংহার)। \(x = b\) বসাই: $$ \int_a^b f = A(b) = F(b) + C = F(b) - F(a). \qquad\blacksquare $$

এই প্রমাণের মূল চাবি ধাপ ৩: derivative শূন্য \(\Rightarrow\) ধ্রুবক — যা 0.3-এর Mean Value Theorem-এর সরাসরি ফল।

৪.২ FTC Part 2-র intuitive (অন্তর্দৃষ্টিগত) প্রমাণ (difficulty ★★)

\(A(x) = \int_a^x f(t)\,dt\) হলে \(A'(x) = f(x)\) কেন? derivative-এর সংজ্ঞা থেকে: $$ A'(x) = \lim_{h\to 0} \frac{A(x+h) - A(x)}{h}. $$ লব \(A(x+h)-A(x)\) মানে \(x\) থেকে \(x+h\) পর্যন্ত একটি সরু ফালির (strip) area। \(h\) ছোট হলে এই ফালি প্রায় একটি rectangle — প্রস্থ \(h\), উচ্চতা প্রায় \(f(x)\) (কারণ \(f\) continuous, ওই টুকরোয় প্রায় ধ্রুবক)। তাই $$ A(x+h) - A(x) \approx f(x)\cdot h \quad\Longrightarrow\quad \frac{A(x+h)-A(x)}{h} \approx f(x). $$ \(h \to 0\)-তে "\(\approx\)" সমান হয়ে যায়, পাই \(A'(x) = f(x)\)\(\blacksquare\) (কঠোর সংস্করণে এখানে Mean Value Theorem for integrals লাগে; Part VII-এ পূর্ণ rigorous রূপ।)

৪.৩ substitution সূত্রের derivation (difficulty ★)

substitution আসলে chain rule উল্টো করেই পাওয়া। chain rule (0.3): \(\dfrac{d}{dx}F(g(x)) = F'(g(x))\,g'(x)\)। দুই পক্ষকে \(x\)-এ integrate করি: $$ \int F'(g(x))\,g'(x)\,dx = F(g(x)) + C. $$ এখন \(u = g(x)\), \(f = F'\) ধরলে \(F'(g(x)) = f(u)\) আর \(g'(x)\,dx = du\), তাই বাঁ পক্ষ \(= \int f(u)\,du = F(u)+C\)। সংক্ষেপে: \(u = g(x),\ du = g'(x)\,dx\) — মূল উদাহরণ ২-এর কৌশল। \(\blacksquare\)

৪.৪ integration by parts সূত্রের derivation (difficulty ★)

product rule (0.3): \(\dfrac{d}{dx}\big(u(x)v(x)\big) = u'v + uv'\)। দুই পক্ষ integrate করি: $$ u(x)v(x) = \int u'v\,dx + \int uv'\,dx. $$ পদ সাজিয়ে: \(\displaystyle\int uv'\,dx = uv - \int u'v\,dx\), অর্থাৎ \(\int u\,dv = uv - \int v\,du\). \(\blacksquare\)

দেখা যাচ্ছে — substitution আর by parts, দুটোই 0.3-এর differentiation নিয়ম (chain rule ও product rule) সরাসরি উল্টে নেওয়া। FTC যেহেতু differentiation আর integration-কে inverse বানায়, প্রতিটি derivative নিয়ম একটি integral নিয়মে রূপ নেয়।


৫ · কোড ল্যাব (Python)

প্রথমে from-scratch (NumPy দিয়ে Riemann sum হাতে গড়ে) তত্ত্ব যাচাই করব, তারপর library (scipy.integrate.quad numeric, sympy.integrate symbolic) দিয়ে মিলিয়ে দেখব।

৫.১ from-scratch — NumPy দিয়ে Riemann sum

import numpy as np

def riemann_sum(f, a, b, n, rule="mid"):
    """f-এর [a,b]-তে integral, n টি rectangle দিয়ে Riemann sum।
    rule: "left", "right", বা "mid" (midpoint)।"""
    edges = np.linspace(a, b, n + 1)      # n+1 টি ভাগ-বিন্দু
    dx = (b - a) / n                       # প্রতিটি টুকরোর প্রস্থ
    if rule == "left":
        x_star = edges[:-1]                # বাম প্রান্ত
    elif rule == "right":
        x_star = edges[1:]                 # ডান প্রান্ত
    else:  # midpoint
        x_star = 0.5 * (edges[:-1] + edges[1:])
    return np.sum(f(x_star) * dx)          # Σ f(x*) Δx

# f(x) = x^2, [0,2], সঠিক উত্তর = 8/3 ≈ 2.66667
f = lambda x: x**2
exact = 8 / 3
print(f"exact          = {exact:.6f}")
for n in [4, 8, 50, 1000, 100000]:
    approx = riemann_sum(f, 0, 2, n, rule="mid")
    print(f"n={n:6d}  midpoint = {approx:.6f}   error = {abs(approx-exact):.2e}")

প্রত্যাশিত আউটপুট (সংখ্যা মেলে):

exact          = 2.666667
n=     4  midpoint = 2.625000   error = 4.17e-02
n=     8  midpoint = 2.656250   error = 1.04e-02   # (n বাড়লে error দ্রুত কমে)
n=    50  midpoint = 2.666400   error = 2.67e-04
n=  1000  midpoint = 2.666666   error = 6.67e-07
n=100000  midpoint = 2.666667   error = 6.67e-11

\(n\) যত বড়, error তত ছোট — Riemann sum সত্যিই definite integral-এ converge করছে। এটাই §২.২-এর limit-সংজ্ঞার সংখ্যাগত প্রমাণ।

৫.২ library — scipy (numeric) বনাম sympy (symbolic)

from scipy import integrate
import sympy as sp
import numpy as np

# --- (ক) numeric integration: scipy.integrate.quad ---
# quad ফেরত দেয় (মান, আনুমানিক error)
val, err = integrate.quad(lambda x: x**2, 0, 2)
print(f"[1] ∫x^2 dx [0,2] : quad = {val:.10f}  (err ~ {err:.1e})")   # 2.6666666667

# substitution উদাহরণ: ∫ 2x e^{x^2} dx [0,1] = e - 1
val, _ = integrate.quad(lambda x: 2*x*np.exp(x**2), 0, 1)
print(f"[2] ∫2x e^(x^2) [0,1] : quad = {val:.10f}  (e-1 = {np.e-1:.10f})")

# by parts উদাহরণ: ∫ x e^x dx [0,1] = 1
val, _ = integrate.quad(lambda x: x*np.exp(x), 0, 1)
print(f"[3] ∫x e^x [0,1] : quad = {val:.10f}")

# improper integral: scipy অসীম সীমা সরাসরি নেয় (np.inf)
val, _ = integrate.quad(lambda x: np.exp(-x), 0, np.inf)
print(f"[4] ∫e^(-x) [0,∞) : quad = {val:.10f}   (normalization = 1)")

# --- (খ) symbolic integration: sympy.integrate ---
x = sp.symbols('x')
print("\n--- sympy (closed form) ---")
print("[1] ∫x^2 dx [0,2]      =", sp.integrate(x**2, (x, 0, 2)))            # 8/3
print("[2] ∫2x e^(x^2) [0,1]  =", sp.integrate(2*x*sp.exp(x**2), (x, 0, 1)))# -1 + E
print("[3] ∫x e^x dx [0,1]    =", sp.integrate(x*sp.exp(x), (x, 0, 1)))     # 1
print("[4] ∫e^(-x) dx [0,∞)   =", sp.integrate(sp.exp(-x), (x, 0, sp.oo)))  # 1

# indefinite (antiderivative) — sympy '+C' দেখায় না, মনে রাখতে হয়
print("\nantiderivative of x^2 :", sp.integrate(x**2, x), "(+ C)")

# FTC যাচাই: d/dx ∫_0^x sin(t) dt = sin(x)
t = sp.symbols('t')
F = sp.integrate(sp.sin(t), (t, 0, x))     # = 1 - cos(x)
print("FTC: F(x) =", F, " ;  F'(x) =", sp.diff(F, x))   # sin(x)

প্রকৃত আউটপুট (চালিয়ে যাচাই করা হয়েছে):

[1] ∫x^2 dx [0,2] : quad = 2.6666666667  (err ~ 3.0e-14)
[2] ∫2x e^(x^2) [0,1] : quad = 1.7182818285  (e-1 = 1.7182818285)
[3] ∫x e^x [0,1] : quad = 1.0000000000
[4] ∫e^(-x) [0,∞) : quad = 1.0000000000   (normalization = 1)

--- sympy (closed form) ---
[1] ∫x^2 dx [0,2]      = 8/3
[2] ∫2x e^(x^2) [0,1]  = -1 + E
[3] ∫x e^x dx [0,1]    = 1
[4] ∫e^(-x) dx [0,∞)   = 1

antiderivative of x^2 : x**3/3 (+ C)
FTC: F(x) = 1 - cos(x) ;  F'(x) = sin(x)

দুই পথ (numeric quad ও symbolic sympy) একই উত্তর দিচ্ছে, আর §৩-৪-এর হাতে-করা মানের সাথেও মিলছে। শেষ লাইন FTC সরাসরি দেখাচ্ছে: \(\frac{d}{dx}\int_0^x \sin t\,dt = \sin x\) — integration উল্টে derivative নিলে integrand ফিরে আসে।

from scipy import integrate
import numpy as np

# (1) double integral: surface exp(-(x^2+y^2)) এর নিচে R^2-এ মোট volume = π
#     dblquad(func, x_lo, x_hi, y_lo, y_hi); func(y, x) ক্রমে আর্গুমেন্ট নেয়।
vol, _ = integrate.dblquad(lambda y, x: np.exp(-(x**2 + y**2)),
                           -np.inf, np.inf, lambda x: -np.inf, lambda x: np.inf)
print(f"∬ exp(-(x²+y²)) dA over R² = {vol:.6f}   (π = {np.pi:.6f})")

# (2) joint density f(x,y)=4xy on [0,1]² — বৈধ density কিনা: মোট ∬ = 1
total, _ = integrate.dblquad(lambda y, x: 4*x*y, 0, 1, lambda x: 0, lambda x: 1)
print(f"∬ 4xy dA over [0,1]² = {total:.6f}   (normalization = 1)")

# P(X<0.5, Y<0.5) = সেই অঞ্চলের ওপর double integral
p, _ = integrate.dblquad(lambda y, x: 4*x*y, 0, 0.5, lambda x: 0, lambda x: 0.5)
print(f"P(X<0.5, Y<0.5) = {p:.6f}   (closed form 1/16 = {1/16:.6f})")

# (3) probability = density-র নিচের area: standard normal-এ P(0.5 ≤ Z ≤ 2)
normal_pdf = lambda x: np.exp(-x**2 / 2) / np.sqrt(2*np.pi)
prob, _ = integrate.quad(normal_pdf, 0.5, 2.0)
print(f"P(0.5 ≤ Z ≤ 2) = {prob:.6f}")

প্রকৃত আউটপুট:

∬ exp(-(x²+y²)) dA over R² = 3.141593   (π = 3.141593)
∬ 4xy dA over [0,1]² = 1.000000   (normalization = 1)
P(X<0.5, Y<0.5) = 0.062500   (closed form 1/16 = 0.062500)
P(0.5 ≤ Z ≤ 2) = 0.285787

লক্ষণীয়: \(\iint_{\mathbb{R}^2} e^{-(x^2+y^2)}\,dA = \pi\) — এই বিখ্যাত ফলটিই (পরোক্ষভাবে) প্রমাণ করে কেন normal density-তে \(\frac{1}{\sqrt{2\pi}}\) ধ্রুবকটি বসে: ওটাই মোট area \(1\) বানায়। joint density \(4xy\) normalize হয়ে \(1\), আর একটি অঞ্চলের probability সেই অঞ্চলের double integral — Part II-এর joint distribution-এর হুবহু পূর্বরূপ।


৬ · ভিজ্যুয়ালাইজেশন

নিচের প্রতিটি figure-এর কোড ঠিক যা দিয়ে ছবিটি বানানো হয়েছে তা-ই। (in-figure লেখা English; ব্যাখ্যা বাংলায়।)

Figure 1 — Riemann sum convergence

\(n\) বাড়লে (4 → 8 → 16 → 64) rectangle-গুলো curve-কে কত নিখুঁতভাবে ঢাকছে এবং আনুমানিক area সঠিক মান \(7.5\)-এর দিকে এগোচ্ছে — তা দেখায়।

import matplotlib; matplotlib.use("Agg")
import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return 0.5 * x**2 + 1.0
a, b = 0.0, 3.0
exact = (0.5*b**3/3 + b) - (0.5*a**3/3 + a)   # = 7.5

ns = [4, 8, 16, 64]
fig, axes = plt.subplots(2, 2, figsize=(10, 6.5))
xs = np.linspace(a, b, 400)
for ax, n in zip(axes.ravel(), ns):
    edges = np.linspace(a, b, n + 1)
    width = (b - a) / n
    mids = 0.5 * (edges[:-1] + edges[1:])      # midpoint rule
    heights = f(mids)
    approx = np.sum(heights * width)
    ax.bar(edges[:-1], heights, width=width, align="edge",
           alpha=0.45, edgecolor="#1f4e79", color="#69b3e7", linewidth=0.6)
    ax.plot(xs, f(xs), color="#c0392b", lw=2.2, label="f(x) = 0.5x^2 + 1")
    ax.set_title(f"n = {n}   approx = {approx:.4f}   (exact = {exact:.4f})")
    ax.set_xlabel("x"); ax.set_ylabel("f(x)")
    ax.legend(loc="upper left", fontsize=9)
fig.suptitle("Riemann sum approaches the true area as n increases", fontsize=14)
fig.tight_layout(rect=[0, 0, 1, 0.97])
fig.savefig("../_assets/0-4-riemann.png")

n বাড়ার সাথে Riemann rectangle-গুলো curve-এর নিচের area-কে আরও নিখুঁতভাবে আনুমানিক করছে; approx ক্রমে exact = 7.5-এর দিকে এগোচ্ছে — definite integral-এর limit-সংজ্ঞার দৃশ্যরূপ।

Figure 2 — signed area

integral কেবল area নয়, চিহ্নসহ area। \(x\)-অক্ষের উপরের অংশ ধনাত্মক (সবুজ), নিচের অংশ ঋণাত্মক (লাল)। \(\sin x\)-এর ক্ষেত্রে \([0,2\pi]\)-তে দুই অংশ সমান, তাই মোট integral \(0\)

import matplotlib; matplotlib.use("Agg")
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 600)
y = np.sin(x)
fig, ax = plt.subplots(figsize=(9, 4.5))
ax.plot(x, y, color="#34495e", lw=2.2)
ax.axhline(0, color="black", lw=1.0)
m_pos = (x >= 0) & (x <= np.pi)
ax.fill_between(x[m_pos], 0, y[m_pos], color="#27ae60", alpha=0.5, label="positive area  (+2)")
m_neg = (x >= np.pi) & (x <= 2*np.pi)
ax.fill_between(x[m_neg], 0, y[m_neg], color="#c0392b", alpha=0.5, label="negative area  (-2)")
ax.set_title("Signed area:  integral of sin(x) over [0, 2pi] = 0  (areas cancel)")
ax.set_xlabel("x"); ax.set_ylabel("sin(x)")
ax.set_xticks([0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi])
ax.set_xticklabels(["0", "pi/2", "pi", "3pi/2", "2pi"])
ax.legend(loc="upper right")
fig.tight_layout()
fig.savefig("../_assets/0-4-signed-area.png")

sin(x)-এর integral signed area: [0,π]-এ ধনাত্মক area (+2, সবুজ) এবং [π,2π]-এ ঋণাত্মক area (−2, লাল) পরস্পর কাটাকাটি করে, তাই [0,2π]-তে মোট integral শূন্য।

Figure 3 — probability = density-র নিচের area

এই figure-টিই অধ্যায়ের statistics-হৃদয়। একটি standard normal density curve, আর তার নিচে \(0.5 \le X \le 2\) অঞ্চলের shaded area = সেই range-এ থাকার probability (\(\approx 0.286\))।

import matplotlib; matplotlib.use("Agg")
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

def normal_pdf(x):
    return np.exp(-0.5 * x**2) / np.sqrt(2*np.pi)

x = np.linspace(-4, 4, 800)
y = normal_pdf(x)
fig, ax = plt.subplots(figsize=(9, 4.5))
ax.plot(x, y, color="#2c3e50", lw=2.2, label="standard normal pdf  f(x)")
lo, hi = 0.5, 2.0
mask = (x >= lo) & (x <= hi)
ax.fill_between(x[mask], 0, y[mask], color="#e67e22", alpha=0.55,
                label=f"P({lo} <= X <= {hi}) = shaded area")
ax.set_title("Probability = area under the density curve")
ax.set_xlabel("x"); ax.set_ylabel("density  f(x)")
ax.legend(loc="upper left")
p = norm.cdf(hi) - norm.cdf(lo)
ax.text(1.25, 0.06, f"area = {p:.3f}", fontsize=11, ha="center")
fig.tight_layout()
fig.savefig("../_assets/0-4-density-area.png")

standard normal density curve-এর নিচে 0.5 থেকে 2 পর্যন্ত shaded area; এই area-ই P(0.5 ≤ X ≤ 2) ≈ 0.286 — continuous probability মানেই density-র নিচের integral।

Figure 4 — double integral = volume (surface-এর নিচে)

দুই variable-এর function \(f(x,y) = e^{-(x^2+y^2)}\) একটি পাহাড়-আকৃতির surface। বাঁয়ে উপর-থেকে দেখা (heatmap), ডানে 3D surface। double integral এই surface-এর নিচের volume (\(=\pi\), পুরো তলে)।

import matplotlib; matplotlib.use("Agg")
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D  # noqa

def surf(x, y):
    return np.exp(-(x**2 + y**2))

gx = np.linspace(-2, 2, 200); gy = np.linspace(-2, 2, 200)
X, Y = np.meshgrid(gx, gy); Z = surf(X, Y)

fig = plt.figure(figsize=(11, 4.5))
ax1 = fig.add_subplot(1, 2, 1)
im = ax1.imshow(Z, extent=[-2, 2, -2, 2], origin="lower", cmap="viridis", aspect="equal")
ax1.set_title("Top view: f(x,y) = exp(-(x^2+y^2))")
ax1.set_xlabel("x"); ax1.set_ylabel("y"); ax1.grid(False)
fig.colorbar(im, ax=ax1, shrink=0.85, label="height f(x,y)")
ax2 = fig.add_subplot(1, 2, 2, projection="3d")
ax2.plot_surface(X, Y, Z, cmap="viridis", linewidth=0, antialiased=True, alpha=0.95)
ax2.set_title("Volume under surface = double integral of f(x,y) dA")
ax2.set_xlabel("x"); ax2.set_ylabel("y"); ax2.set_zlabel("f(x,y)")
fig.tight_layout()
fig.savefig("../_assets/0-4-double-integral.png")

f(x,y)=exp(−(x²+y²)) surface-এর বাম পাশে heatmap (উপর থেকে দেখা) ও ডান পাশে 3D রূপ; double integral এই পাহাড়-আকৃতির surface-এর নিচের volume পরিমাপ করে, যা পুরো তলে π-এর সমান।


৭ · অনুশীলনী

প্রতিটি প্রশ্নে difficulty tag ও hint দেওয়া। পূর্ণ সমাধান _solutions/00-04-calculus-2-integration-solutions.md-এ।

ক · ধারণাগত (conceptual)

প্রশ্ন ১ (★). নিজের ভাষায় ব্যাখ্যা করুন কেন continuous random variable-এর ক্ষেত্রে "ঠিক একটি নির্দিষ্ট মান নেওয়ার probability শূন্য", অথচ "একটি range-এ থাকার probability ধনাত্মক"। integral/area-র ভাষায় উত্তর দিন। Hint: শূন্য-প্রস্থ rectangle-এর area কত?

প্রশ্ন ২ (★). indefinite integral \(\int f(x)\,dx\) ও definite integral \(\int_a^b f(x)\,dx\)-এর মধ্যে মৌলিক পার্থক্য কী — একটির ফল কী ধরনের বস্তু, অন্যটির কী? "\(+C\)" কেন শুধু indefinite-এ থাকে? Hint: একটি function, অন্যটি একটি সংখ্যা।

প্রশ্ন ৩ (★★). "differentiation আর integration পরস্পরের বিপরীত" — FTC-র কোন দুটি বিবৃতি এই কথাটি ধরে রাখে? প্রতিটির এক বাক্যে অর্থ লিখুন। Hint: একটি \(F(b)-F(a)\), অন্যটি \(A'(x)=f(x)\)

খ · গণনামূলক (computational)

প্রশ্ন ৪ (★). FTC দিয়ে নিচের definite integral গণনা করুন: (ক) \(\displaystyle\int_1^3 (2x + 1)\,dx\) (খ) \(\displaystyle\int_0^{\pi} \sin x\,dx\) (গ) \(\displaystyle\int_1^{e} \frac{1}{x}\,dx\)Hint: প্রতিটির antiderivative লিখে \([F(x)]_a^b\) প্রয়োগ করুন।

প্রশ্ন ৫ (★★). substitution ব্যবহার করে গণনা করুন: \(\displaystyle\int_0^2 x\,e^{x^2}\,dx\)Hint: \(u = x^2\) ধরুন; সীমাও \(u\)-তে বদলান।

প্রশ্ন ৬ (★★). integration by parts দিয়ে \(\displaystyle\int_1^{e} \ln x\,dx\) গণনা করুন। Hint: \(u = \ln x,\ dv = dx\) ধরুন (LIATE: Log আগে)।

প্রশ্ন ৭ (★★). improper integral \(\displaystyle\int_0^{\infty} \lambda e^{-\lambda x}\,dx\) (\(\lambda > 0\)) গণনা করে দেখান এটি \(1\) — অর্থাৎ rate-\(\lambda\) Exponential density বৈধ (normalized)। Hint: antiderivative \(-e^{-\lambda x}\); \(t\to\infty\)-তে limit।

গ · প্রমাণভিত্তিক (proof-based)

প্রশ্ন ৮ (★★). linearity প্রমাণ করুন: যেকোনো ধ্রুবক \(\alpha, \beta\)-র জন্য $\(\int_a^b \big(\alpha f(x) + \beta g(x)\big)\,dx = \alpha\int_a^b f(x)\,dx + \beta\int_a^b g(x)\,dx.\)$ Hint: Riemann sum-এর সংজ্ঞায় বসিয়ে \(\sum\)-এর linearity ও limit ব্যবহার করুন।

প্রশ্ন ৯ (★★★). additivity প্রমাণ করুন: \(a < c < b\) হলে $\(\int_a^b f(x)\,dx = \int_a^c f(x)\,dx + \int_c^b f(x)\,dx.\)$ Hint: antiderivative \(F\) ধরে FTC দুবার প্রয়োগ; অথবা area-কে দুই টুকরোয় ভাগ করুন।

ঘ · কোডিং (coding)

প্রশ্ন ১০ (★). §৫.১-এর riemann_sum ফাংশন ব্যবহার করে \(\int_0^1 4x^3\,dx\) আনুমানিক করুন rule="left", "right", "mid" তিনটিতেই, \(n = 1000\)-এ। সঠিক মান \(1\)-এর সাথে কোনটি সবচেয়ে কাছে? ব্যাখ্যা করুন কেন left ও right বিপরীত দিকে ভুল করে। Hint: function বাড়ন্ত হলে left কম-আনুমান, right বেশি-আনুমান।

প্রশ্ন ১১ (★★). scipy.integrate.quadsympy.integrate — দুটি দিয়েই \(\int_{-\infty}^{\infty} x^2 \cdot \frac{1}{\sqrt{2\pi}}e^{-x^2/2}\,dx\) গণনা করুন। (এটি standard normal-এর variance।) দুই উত্তর কি একই? মানটি কত হওয়া উচিত? Hint: np.inf / sp.oo ব্যবহার করুন; উত্তর \(1\) হওয়ার কথা।

প্রশ্ন ১২ (★★★). scipy.integrate.dblquad দিয়ে দেখান যে joint density \(f(x,y) = x + y\) on \([0,1]^2\) একটি বৈধ density (মোট integral \(=1\)), এবং তারপর \(P(X + Y \le 1)\) গণনা করুন। (ত্রিভুজাকার অঞ্চল!) Hint: \(P(X+Y\le 1)\)-এর জন্য ভেতরের সীমা \(y: 0 \to 1-x\) নিন।


৮ · সারসংক্ষেপ ও সংযোগ

মূল পয়েন্ট (recap):

  • integral = curve-এর নিচের signed area = accumulation (সঞ্চয়)। Riemann sum \(\sum f(x_i^\*)\Delta x\)-এর \(n\to\infty\) limit হলো definite integral \(\int_a^b f(x)\,dx\) — একটি সংখ্যা।
  • antiderivative \(F\) (\(F'=f\)) দিলে indefinite integral \(\int f\,dx = F + C\) — একটি function।
  • Fundamental Theorem of Calculus integration ও differentiation-কে inverse বানায়: \(\int_a^b f = F(b)-F(a)\), এবং \(\frac{d}{dx}\int_a^x f(t)\,dt = f(x)\)। এর ফলে integral গণনা মানে antiderivative খোঁজা।
  • দুটি মূল technique — substitution (chain rule উল্টো) ও integration by parts (product rule উল্টো)।
  • improper integral (\(-\infty\)/\(\infty\) সীমা) limit দিয়ে সংজ্ঞায়িত; density পুরো রেখায় ছড়ালে দরকার।
  • double integral = surface-এর নিচের volume; iterated integral হিসেবে একবারে এক variable গণনা।
  • numeric (scipy.integrate.quad, dblquad) বনাম symbolic (sympy.integrate) — একটি দ্রুত সংখ্যা, অন্যটি closed-form; দুটো মিলিয়ে যাচাই।

statistics-এর সাথে সংযোগ (কেন এত গুরুত্বপূর্ণ):

integral ধারণা statistics-এ রূপ
density-র নিচের area \(P(a \le X \le b) = \int_a^b f(x)\,dx\)
মোট area \(=1\) normalization: \(\int_{-\infty}^{\infty} f(x)\,dx = 1\)
density-কে \(x\) দিয়ে গুণ করে integrate expectation: \(\mathbb{E}[X] = \int x\,f(x)\,dx\)
\((x-\mu)^2\) দিয়ে গুণ করে integrate variance: \(\mathrm{Var}(X) = \int (x-\mu)^2 f(x)\,dx\)
double integral over অঞ্চল joint probability: \(P((X,Y)\in R) = \iint_R f(x,y)\,dA\)

পূর্ববর্তী সংযোগ (← 0.3): integration হলো 0.3-এর differentiation-এর বিপরীত — derivative নিয়ম (chain, product) উল্টে integral নিয়ম (substitution, by parts) পাওয়া যায়, আর FTC দুটিকে এক সুতোয় বাঁধে। 0.2-এর \(\sum\) notation-এর continuous সংস্করণই \(\int\)

পরবর্তী সংযোগ (→ 0.5): এরপর Linear Algebra (vector, matrix, eigenvalue) — multivariate statistics, covariance matrix, এবং regression-এর ভাষা। integral ও linear algebra পরে একসাথে কাজ করবে: multivariate normal density-তে matrix (\(\Sigma\)) আর double/multiple integral দুটোই লাগবে।

source pointer: এই অধ্যায় self-contained (Part 0 just-in-time foundations)। যেখানে এই integral-যন্ত্র কাজে লাগবে — Part II: Continuous Random Variables (2.4)Expectation, Variance, Moments (2.5) — সেখানে density, normalization, expectation সবই এই অধ্যায়ের \(\int\) দিয়ে আনুষ্ঠানিকভাবে সংজ্ঞায়িত হবে। rigorous integration তত্ত্ব (Lebesgue integral, কোন function integrable) আসবে Part VII (measure-theoretic probability)-তে।