বীজগণিত · গণিতের ডায়েরি
ফাংশনFunctions, Relations & their Graphs
ফাংশন হলো দুই সেটের মধ্যে এমন একটি সম্পর্ক, যেখানে প্রতিটি ইনপুটের জন্য ঠিক একটি আউটপুট থাকে। অর্থাৎ একই ইনপুট থেকে একাধিক আউটপুট বের হতে পারে না।
গণিতের ভাষায় আমরা লিখি:
\[ f : A \to B \]এখানে \(A\) হলো ইনপুটের সেট, আর \(B\) হলো আউটপুট যাওয়ার সম্ভাব্য সেট। \(A\) সেটের প্রতিটি element ফাংশনের মাধ্যমে \(B\) সেটের কোনো একটি element-এর সাথে যুক্ত হয়।
A function is a relation between two sets, where each input has exactly one output.
সহজভাবে লিখলে,
\[ y = f(x) \]এখানে \(x\) হলো input(Independent Variable), \(f\) হলো নিয়ম (function), আর \(y\) হলো output(Dependent Variable)। অর্থাৎ \(x\)-এর উপর \(f\) নিয়মটি প্রয়োগ করলে যে মান পাওয়া যায়, সেটাই \(y\)।
যেমন,
\[ f(x) = 2x + 3 \]তাহলে,
\[ f(1) = 2(1) + 3 = 5 \] \[ f(2) = 2(2) + 3 = 7 \]মানে ১ ইনপুট দিলে আউটপুট ৫, আর ২ ইনপুট দিলে আউটপুট ৭।
তাহলে ফাংশনের মূল কথা হলো:
প্রতিটি input-এর জন্য output থাকবে ঠিক একটি।
একই নিয়মে একই ইনপুট দিলে সবসময় একই আউটপুট। নিয়ম বদলে দেখো, আউটপুট বদলাবে; কিন্তু এক নিয়মে এক ইনপুটের উত্তর কখনো দুটো হয় না।
এই “এক ইনপুট → এক আউটপুট” কথাটাই ফাংশনের মেরুদণ্ড।
ফাংশনের তিনটা শব্দ খুব গুরুত্বপূর্ণ: domain, codomain, আর range।
এই তিনটা শব্দের সংজ্ঞাই আসে set থেকে। তাই এগুলো বোঝার আগে function-এর set notation-এর সাথে পরিচিত হয়ে নেওয়া দরকার।
Set-এর ভাষায় function লেখা যায় এভাবে:
তাহলে \(f\) হলো \(A\) থেকে \(B\)-তে একটি function। এখানে ordered pair-এর প্রথম অংশ input, দ্বিতীয় অংশ output।
Set notation-এর সৌন্দর্য হলো, পুরো function-টাকে এক লাইনে দেখা যায়। কে কোথায় গেল, কোন input কোন output দিল, সব ordered pair-এর ভেতরেই লেখা থাকে।
এবার সংজ্ঞায় আসা যাক,
\[ f : A \to B \]এখানে \(A\) সেটকে বলা হয় domain। অর্থাৎ যে সব জিনিস আমরা ফাংশনের ভেতরে ঢোকাতে পারি, তাদের পুরো দলটাই domain। \(B\) সেটকে বলা হয় codomain। অর্থাৎ আউটপুটগুলো যে সেটের ভেতরে থাকার কথা, সেই বড় ঘরটাই codomain। কিন্তু ফাংশন চালানোর পর আসলে যে মানগুলো পাওয়া যায়, শুধু সেই মানগুলোর দলকে বলা হয় range।
উপরের উদাহরণেই তাহলে,
এখানে ৮ codomain-এর ভেতরে আছে, কিন্তু কোনো input থেকে ৮ বের হয়নি। তাই ৮ codomain-এর সদস্য, কিন্তু range-এর সদস্য নয়।
সহজভাবে বললে, codomain হলো সম্ভাব্য ঠিকানা, আর range হলো সত্যি সত্যি যেখানে তীর গিয়ে লেগেছে।
Range = {2, 4, 6}, 8-এ কোনো তীর আসেনি, তাই সে codomain-এ আছে কিন্তু range-এ নেই।
ফাংশন বোঝার আগে relation বুঝে নেওয়া ভালো। Relation মানে দুই সেটের মধ্যে যেকোনো ধরনের সম্পর্ক। এক সেটের কোনো element অন্য সেটের কোনো element-এর সাথে জোড়া বাঁধতে পারে।
\[ A = \{1, 2, 3\} \qquad B = \{a, b, c\} \]তাহলে \(A\) থেকে \(B\)-তে একটি relation হতে পারে:
\[ R = \{(1, a),\ (2, b),\ (3, c)\} \]এখানে প্রতিটি ordered pair বলছে, \(A\)-এর কোন element \(B\)-এর কোন element-এর সাথে সম্পর্কিত। আরেকটা relation হতে পারে:
\[ R = \{(1, a),\ (1, b),\ (2, c)\} \]এটাও relation, কারণ relation-এর ক্ষেত্রে একই input একাধিক output-এর সাথে জুড়তে পারে। Relation স্বাধীন – সে শুধু সম্পর্ক বানায়, strict নিয়ম মানতে হয় না।
Function হলো relation-এর এমন এক বিশেষ রূপ, প্রতিটি ইনপুট (x) এর বিপরীতে শুধুমাত্র একটি এবং কেবল একটি আউটপুট (y) পাওয়া যাবে। কোনো অবস্থাতেই একটি ইনপুট থেকে একাধিক আউটপুট পাওয়া যাবে না। অর্থাৎ, domain-এর প্রতিটি element থেকে ঠিক একটি করে arrow বের হবে। একটিও বাদ পড়বে না, আবার একই input থেকে দুই দিকে arrow-ও যাবে না।
\[ A = \{1, 2, 3\} \qquad B = \{a, b, c\} \] \[ f = \{(1, a),\ (2, b),\ (3, c)\} \]এটা function, কারণ 1, 2, 3—প্রতিটি input-এর ঠিক একটি করে output আছে।
\[ R = \{(1, a),\ (1, b),\ (2, c)\} \]এটা relation, কিন্তু function নয়। কারণ একটি input (1) থেকে দুইটা output বের হয়েছে: \(a\) এবং \(b\)। একই input দুই জায়গায় গেলে function ভেঙে যায়।
Function একটু নিয়মানুবর্তী। সে প্রতিটি input-কে ঠিক একবারই পাঠায়। কোথায় পাঠাবে সেটা ভিন্ন হতে পারে, কিন্তু এক input থেকে দুই output সে মেনে নেয় না।
দ্বিতীয়টা function নয়, কারণ 1 থেকে দুই দিকে arrow (a আর b, দুটোতেই)। তৃতীয়টা কিন্তু function– ভিন্ন দুটি ইনপুট থেকে একই output-এ গেলে সমস্যা নেই, সমস্যা এক input-এর দুই output-এ। চতুর্থটাও function নয়– এখানে 1 যাচ্ছে দুই জায়গায় (one-to-many), আবার a-তে আসছে দুইজন (many-to-one), দুটো একসাথে ঘটলে সেটা many-to-many relation।
তাহলে আমরা বলতে পারি, সব function-ই relation, কিন্তু সব relation function নয়।
One-to-one function-কে injective function-ও বলা হয়। এর মূল কথা হলো: একটি আউটপুটের জন্য কেবলমাত্র একটি ইনপুট থাকবে। অর্থাৎ দুইটি input একই output-এ গিয়ে পড়তে পারবে না।
\[ A = \{1, 2, 3\} \qquad B = \{a, b, c, d\} \] \[ f = \{(1, a),\ (2, b),\ (3, c)\} \]এটা one-to-one function। কারণ 1, 2, 3– তিনটি input তিনটি আলাদা output-এ গেছে।
\[ g = \{(1, a),\ (2, a),\ (3, b)\} \]এটা function হলেও one-to-one নয়। কারণ 1 এবং 2– দুইটি আলাদা input একই output \(a\)-তে গেছে।
Output repeat হয়নি, তাই one-to-one; যদিও codomain এবং range set সমান নয়।
Onto function-কে surjective function-ও বলা হয়। এর মূল কথা হলো: codomain-এর কোনো element একা পড়ে থাকবে না, অর্থাৎ কোডোমেন = রেঞ্জ। codomain-এর প্রতিটি element-এ অন্তত একটি করে arrow পৌঁছাতে হবে।
\[ A = \{1, 2, 3, 4\} \qquad B = \{a, b, c\} \] \[ f = \{(1, a),\ (2, b),\ (3, c),\ (4, c)\} \]এটা onto function। কারণ \(B\) সেটের a, b, c– প্রতিটা element-এ অন্তত একটি arrow এসেছে। এখানে \(c\)-তে দুইটা arrow এসেছে, তাতে সমস্যা নেই। Onto হওয়ার জন্য দরকার সবাই যেন covered হয়।
\[ g = \{(1, a),\ (2, b),\ (3, b)\} \]যদি codomain হয় \(B = \{a, b, c\}\), তাহলে \(g\) onto নয়। কারণ \(c\)-তে কোনো arrow যায়নি।
Codomain = Range, তাই onto function; কিন্তু output c-তে দুই input এসেছে, তাই one-to-one function নয়।
যে function একই সাথে one-to-one এবং onto, তাকে বলে bijective function।
মানে, একটি আউটপুটের জন্য কেবলমাত্র একটি ইনপুট থাকবে, আবার codomain-এর কোনো element খালি পড়েও থাকবে না, অর্থাৎ codomain = range হবে।
\[ A = \{1, 2, 3\} \qquad B = \{a, b, c\} \] \[ f = \{(1, a),\ (2, b),\ (3, c)\} \]এটা bijective function।
প্রথমত, কোনো দুই input একই output-এ যায়নি, তাই এটি one-to-one। দ্বিতীয়ত, codomain-এর a, b, c– সবগুলোতেই arrow পৌঁছেছে, তাই এটি onto।
Output repeat হয়নি এবং Codomain = Range।
সব function one-to-one বা onto হবে এমন নয়। কিছু function আছে যেখানে আলাদা input একই output-এ গিয়ে পড়ে। এদের বলে many-to-one function।
\[ f = \{(1, a),\ (2, a),\ (3, b)\} \]এটা function, কারণ প্রতিটি input-এর ঠিক একটি output আছে। কিন্তু one-to-one নয়, কারণ 1 এবং 2 একই output \(a\)-তে গেছে।
তবে মনে রাখতে হবে, one-to-many কিন্তু কোন function নয়, শুধুই relation।
আবার যদি codomain-এর কিছু element untouched থেকে যায়, তাহলে function-টা onto নয়। তখন তাকে into function বলা যায়।
\[ A = \{1, 2, 3\} \qquad B = \{a, b, c, d\} \] \[ f = \{(1, a),\ (2, b),\ (3, c)\} \]এখানে \(d\)-তে কোনো arrow যায়নি। তাই function-টা into, onto নয়।
অন্যদিকে function-এর আরো কিছু প্রকারভেদ আছে, যেমন identity function। এখানে input নিজেকেই output হিসেবে পায়।
\[ f(x) = x \]মানে 1 গেলে 1, 2 গেলে 2, 3 গেলে 3। যেন আয়নায় নিজের মুখ দেখা।
আর constant function-এ সব input একই output দেয়।
\[ f(x) = 5 \]এখানে \(x\) যাই হোক, output সবসময় 5। সবাই আলাদা দরজা দিয়ে ঢোকে, কিন্তু শেষে একই ঘরে এসে দাঁড়ায়।
এবার গ্রাফে আসি। Function-এর প্রতিটি input-output জোড়াকে আমরা ordered pair হিসেবে লিখতে পারি।
\[ f(x) = 2x + 1 \] \[ f(0) = 1 \;\to\; (0, 1) \qquad f(1) = 3 \;\to\; (1, 3) \qquad f(2) = 5 \;\to\; (2, 5) \]এই ordered pair-গুলো coordinate plane-এ বসালে যে ছবি তৈরি হয়, সেটাই function-এর graph।
Graph আসলে function-এর চলার পথ। Equation আমাদের নিয়ম বলে, table আমাদের কয়েকটা মান দেখায়, আর graph আমাদের পুরো চেহারাটা দেখায়।
Ordered pair জমতে জমতেই graph তৈরি হয়।
এবার সমীকরণের সঙ্গে গ্রাফের সম্পর্কটা দেখি। ফাংশন থেকে সমীকরণকে আমরা এভাবে লিখতে পারি,
\[ y = 2x + 1 \]কারণ \(f(x)\) এবং \(y\) একই রাশি, অর্থাৎ, \(y = f(x)\)।
সরলরেখার সবচেয়ে পরিচিত সমীকরণ হলো,
\[ y = mx + c \]এখানে \(m\) হলো রেখাটির ঢাল বা slope, আর \(c\) বলে রেখাটি \(y\)-অক্ষকে কোথায় ছেদ করবে।
Slope আসলে বলে রেখাটি কতটা খাড়া। রেখাটি \(x\)-অক্ষের সাথে \(\theta\) কোণ তৈরি করলে,
\[ m = \tan\theta = \frac{y_2 - y_1}{x_2 - x_1} \]অর্থাৎ রেখার যেকোনো দুটি বিন্দু \((x_1, y_1)\) ও \((x_2, y_2)\) নিলে, \(x\) বরাবর যতটা এগোনো হলো আর \(y\) বরাবর যতটা ওঠা হলো, সেই দুইয়ের অনুপাতই slope। যেমন,
\[ y = 2x + 1 \]তাহলে slope-এর সূত্রে,
\[ m = \frac{y_2 - y_1}{x_2 - x_1} = \frac{3 - 1}{1 - 0} = 2 \]সমীকরণে \(m = 2\) বুঝায় \(x\)-এর মান ১ করে বাড়লে \(y\)-এর মান ২ করে বাড়ে। আবার আর রেখাটি \(x\)-অক্ষের সাথে যে কোণ তৈরি করে, সেটা \(\theta = \tan^{-1}(2) \approx 63.4^\circ\)।
সমীকরণে \(c = 1\) আর রেখাটি \(y\)-অক্ষকে \((0, 1)\) বিন্দুতে ছেদ করে।
x-অক্ষে 1 এগোলে y-অক্ষে 2 ওঠে, তাই m = 2/1 = 2, আর কোণটা θ = tan⁻¹(2) ≈ 63.4°।
তবে সব function-এর graph সরলরেখা হয় না। Graph-এর আকৃতি নির্ভর করে function-এর নিয়ম বা equation-এর ওপর। যেমন,
\[ f(x) = x^2 \] \[ => y = x^2 \]এখানে কয়েকটি মান বসালে পাই,
\[ f(-2) = 4, \quad f(-1) = 1, \quad f(0) = 0, \quad f(1) = 1, \quad f(2) = 4 \]তাহলে ordered pair-গুলো হবে,
\[ (-2, 4),\; (-1, 1),\; (0, 0),\; (1, 1),\; (2, 4) \]এই বিন্দুগুলো coordinate plane-এ বসালে সরলরেখার বদলে U-আকৃতির একটি বাঁকা graph তৈরি হয়। একে parabola বলে। এটি একটি quadratic function-এর graph।
Linear and Quadratic equation ও তাদের graph নিয়ে বিস্তারিত আলোচনা করেছি সরলরেখা থেকে কোয়াড্রাটিক লেখাটিতে।
Graph থেকে domain আর range পড়ার একটা সুন্দর উপায় আছে। মনে আছে, একটি ফাংশনে \(x\) হলো ইনপুট আর \(y\) হলো আউটপুট?
Domain (Input) দেখতে হলে x-axis বরাবর ভাবতে হয়। Graph টি বাম থেকে ডানে কোন কোন x-value ব্যবহার করেছে, সেটাই domain। Range (Output) দেখতে হলে y-axis বরাবর ভাবতে হয়। Graph-টি নিচ থেকে ওপর পর্যন্ত কোন কোন y-value ছুঁয়েছে, সেটাই range।
যেমন, \(f(x) = x^2\)– এর graph হলো ওপরের দিকে খোলা parabola।
x-axis বরাবর graph অসীম যায়, তাই Domain = ℝ এবং y-axis বরাবর 0-এর নিচে কিছু নেই, তাই Range = [0, ∞)
এই graph বাম দিকেও অসীম যায়, ডান দিকেও অসীম যায়। তাই domain হলো সব real number।
\[ \text{Domain} = \mathbb{R} \]কিন্তু \(y\) কখনো 0-এর নিচে নামে না। তাই range হলো:
\[ \text{Range} = [0, \infty) \]অর্থাৎ graph আমাদের শুধু ছবি দেখায় না; কোথায় input চলতে পারে আর output কোথায় আটকে থাকে, সেটাও চোখের সামনে খুলে দেয়।
Graph দেখে function চিনতে সবচেয়ে সহজ পরীক্ষা হলো vertical line test।
Graph-এর ওপর দিয়ে একটি খাড়া রেখা কল্পনা করুন। যদি কোনো জায়গায় সেই খাড়া রেখা graph-কে একবারের বেশি কাটে (ছেদ করে), তাহলে সেটি function নয়। কারণ একই x-value-এর জন্য তখন একাধিক y-value পাওয়া যাচ্ছে।
একটি circle ধরা যাক। কোনো একটি x-value-তে vertical line দিলে circle-কে ওপরেও কাটে, নিচেও কাটে। অর্থাৎ একই x-এর জন্য দুইটি y। তাই পুরো circle y as a function of x নয়।
কিন্তু \(y = x^2\) graph-এ vertical line যেখানেই দাও, একবারই কাটবে। তাই এটি function।
Function হওয়ার শর্তটা এখানেও একই: এক input, এক output।
এক vertical line একবারের বেশি কাটলে function নয়– স্লাইডার টেনে circle বা পাশের parabola-য় এমন জায়গা খুঁজে দেখুন।
Function কিনা বোঝার জন্য vertical line test লাগে। কিন্তু function one-to-one কিনা বোঝার জন্য লাগে horizontal line test।
এবার খাড়া রেখা নয়, আড়াআড়ি রেখা টানা হয়। যদি কোনো horizontal line graph-কে একবারের বেশি কাটে (ছেদ করে), তাহলে function-টা one-to-one নয়। কারণ একই output দুইটি আলাদা input থেকে এসেছে।
যেমন, \(f(x) = x^2\)– এটা function, কারণ vertical line test পাস করে। কিন্তু one-to-one নয়, কারণ \(y = 4\) হলে \(x = 2\) এবং \(x = -2\), দুই input থেকেই একই output আসে।
অন্যদিকে, \(f(x) = x\)– এটা one-to-one function। প্রতিটি input আলাদা output দেয়, আর horizontal line graph-কে একবারের বেশি কাটে না।
বামে horizontal line দুই জায়গায় কাটছে: একই output, দুই input। ডানে যেখানেই টানো, কাটবে একবারই।
Graph দেখে কি Onto function বলা যায়? Graph দেখে onto বোঝার সময় একটু সাবধানে থাকতে হয়। কারণ onto হওয়া শুধু graph-এর উপর নয়, codomain-এর উপরও নির্ভর করে।
ধরা যাক, \(f(x) = x^2\), এর range হলো \([0, \infty)\)।
এখন যদি codomain হয় \(\mathbb{R}\), তাহলে function-টা onto নয়। কারণ negative real number-গুলো codomain-এ আছে, কিন্তু কোনো \(x\) বসিয়ে negative output পাওয়া যায় না। কিন্তু যদি codomain ধরা হয় \([0, \infty)\), তাহলে একই function onto হয়ে যায়। কারণ এবার codomain-এর প্রতিটি মানই কোনো না কোনো input থেকে পাওয়া সম্ভব।
তাই onto বলার আগে সবসময় প্রশ্ন করতে হবে: function কোথা থেকে কোথায় যাচ্ছে?
\[ f : A \to B \]এখানে \(B\) কী, সেটা না জানলে তাকে onto বলা যায় না।
এক function-এর output-কে আরেক function-এর input বানিয়ে দিলে যে নতুন function পাওয়া যায়, তাকে বলে composite function।
ধরা যাক দুটি function,
\[ f(x) = x + 1 \qquad g(x) = x^2 \]প্রথমে \(f\) চালাই, তারপর তার output-টা \(g\)-এর ভেতরে ঢুকিয়ে দিই। এই জোড়া লাগানো function-টাকে লেখা হয়,
\[ (g \circ f)(x) = g(f(x)) \]একটা সংখ্যা দিয়ে দেখি, \(x = 2\) নিলে,
\[ f(2) = 3 \;\to\; g(3) = 9 \qquad \therefore (g \circ f)(2) = 9 \]আর সাধারণভাবে লিখলে,
\[ (g \circ f)(x) = g(x + 1) = (x + 1)^2 \]এখানে একটা মজার ব্যাপার আছে। ক্রমটা উল্টে দিলে কিন্তু ভিন্ন function পাওয়া যায়:
\[ (f \circ g)(x) = f(x^2) = x^2 + 1 \]\(x = 2\) বসালে \((f \circ g)(2) = 5\), কিন্তু \((g \circ f)(2) = 9\)।
একই input 2: 2 → 4 → 5, তাই (f∘g)(2) = f(g(2)) = 5; কিন্তু মেশিনের ক্রম উল্টে গেলে ফলও বদলে যায়: 2 → 3 → 9, তাই (g∘f)(2) = g(f(2)) = 9
তবে এক্ষেত্রে, একটা শর্ত অবশ্য আছে। \(g \circ f\) তখনই বানানো সম্ভব, যখন \(f\)-এর output-গুলো \(g\)-এর domain-এর ভেতরে পড়ে। অর্থাৎ, প্রথম মেশিন যা বের করবে, দ্বিতীয় মেশিন তা খেতে পারতে হবে।
ব্যাপারটা একটা উদাহরণে পরিষ্কার হবে। ধরা যাক,
\[ f(x) = x - 5 \qquad g(x) = \sqrt{x} \]এখানে \(g\)-এর domain হলো \([0, \infty)\), কারণ negative সংখ্যার square root (real number-এ) হয় না। এখন \(x = 2\) নিলে \(f(2) = -3\), এই \(-3\) দ্বিতীয় মেশিনে ঢোকাতে গেলেই বিপদ: \(g(-3) = \sqrt{-3}\), যার কোনো উত্তর নেই। অর্থাৎ \((g \circ f)(2)\) বলে কিছুই নেই। প্রথম মেশিন এমন কিছু বের করেছে, যেটা দ্বিতীয় মেশিন নিতে পারে না।
তাহলে এই \(g \circ f\) চালানো যাবে শুধু সেই \(x\)-গুলোর জন্য, যাদের বেলায় \(f(x) \ge 0\), মানে \(x \ge 5\)। এটাই composite function-এর domain-এর নিয়ম: \(f\)-এর যে input-গুলোর output \(g\)-এর domain-এ ঢুকতে পারে, শুধু সেগুলো নিয়েই \(g \circ f\)-এর domain।
একটা function-এর সব জায়গায় একই নিয়ম থাকতে হবে, এমন কোনো কথা নেই। Domain-কে টুকরো করে এক এক টুকরোয় এক এক নিয়ম দেওয়া যায়। এমন function-কে বলে piecewise function।
সবচেয়ে পরিচিত উদাহরণ absolute value,
\[ f(x) = |x| = \begin{cases} x, & x \ge 0 \\ -x, & x < 0 \end{cases} \]মানে, input শূন্য বা তার চেয়ে বড় হলে যেমন আছে তেমনই থাকবে, আর negative হলে চিহ্ন উল্টে positive হয়ে যাবে। যেমন \(f(3) = 3\), আর \(f(-3) = -(-3) = 3\)।
খেয়াল করার বিষয় হলো, প্রতিটি input ঠিক একটা টুকরোয় পড়ে। তাই প্রতিটি input-এর ঠিক একটাই output। অর্থাৎ নিয়ম টুকরো টুকরো হলেও function কিন্তু একটাই।
Graph-এ দুই টুকরো পাশাপাশি বসে V-আকৃতি তৈরি করে। বাম পাশে \(y = -x\) রেখা নেমে আসে, ডান পাশে \(y = x\) রেখা উঠে যায়।
শূন্যের বাম পাশে নিয়ম −x, ডান পাশে নিয়ম +x – দুই টুকরো মিলে V-আকৃতির একটাই graph।