জিওমেট্রিক গ্রেডিয়েন্ট সিরিজ
এই পাঠে যা শিখবেন
- জিওমেট্রিক গ্রেডিয়েন্ট সিরিজের সংজ্ঞা ও অ্যারিথমেটিক গ্রেডিয়েন্টের সাথে পার্থক্য
- i ≠ g এবং i = g — উভয় ক্ষেত্রের প্রেজেন্ট ওয়ার্থ সূত্র, এবং কেন দুটো আলাদা সূত্র দরকার
- Python-এ
pw_geometric_gradient()ফাংশন লেখা, যা উভয় branch সঠিকভাবে হ্যান্ডেল করে - ডাইরেক্ট টার্ম-বাই-টার্ম সামেশনের সাথে সূত্রের ফলাফল মিলিয়ে উভয় branch যাচাই করা
১ · জিওমেট্রিক গ্রেডিয়েন্ট কী
জিওমেট্রিক গ্রেডিয়েন্টGeometric Gradientএমন একটি সিরিজ যেখানে ক্যাশ ফ্লো প্রতি বছর আগের বছরের তুলনায় একটি স্থির শতকরা হারে বাড়ে বা কমে। সিরিজে বছর ১-এ ক্যাশ ফ্লো $A_1$, এবং প্রতি পরবর্তী বছরে তা আগের বছরের $(1+g)$ গুণ হয় — বছর $t$-এ ক্যাশ ফ্লো $A_1(1+g)^{t-1}$। এটি অ্যারিথমেটিক গ্রেডিয়েন্ট থেকে মৌলিকভাবে আলাদা: অ্যারিথমেটিক গ্রেডিয়েন্টে বৃদ্ধি একটি স্থির টাকার অ্যামাউন্ট (G), কিন্তু জিওমেট্রিক গ্রেডিয়েন্টে বৃদ্ধি একটি স্থির শতকরা হার (g) — যেমন মুদ্রাস্ফীতির সাথে সামঞ্জস্যপূর্ণ বেতন বা অপারেটিং খরচের বৃদ্ধি মডেল করার জন্য এটিই বেশি বাস্তবসম্মত।
$$P = A_1 \cdot \frac{1 - \left(\frac{1+g}{1+i}\right)^n}{i-g}$$
$$P = \frac{A_1 \cdot n}{1+i}$$ (কারণ প্রথম সূত্রে হর $i-g=0$ হয়ে যায় — এই বিশেষ ক্ষেত্রে লিমিট নিয়ে এই সরল রূপ পাওয়া যায়)
i ≠ g সূত্রের হরে $(i-g)$ আছে — যদি i = g হয়, এই হর শূন্য হয়ে যায় এবং সূত্রটি undefined হয়ে
পড়ে (0/0 form)। ক্যালকুলাসে লিমিট নিয়ে দেখানো যায় সেই বিশেষ ক্ষেত্রে P সরল হয়ে
$A_1 n / (1+i)$-তে দাঁড়ায়। তাই বাস্তবায়নে একটি epsilon-based শর্ত দিয়ে
দুটো branch আলাদা করতে হয় — সরাসরি i == g তুলনা floating-point এর কারণে অনির্ভরযোগ্য।
২ · Python-এ প্রয়োগ ও যাচাই
নিচের কোডে pw_geometric_gradient() ফাংশনে abs(i - g) < eps শর্ত দিয়ে দুটো
branch হ্যান্ডেল করা হয়েছে। যাচাইয়ের জন্য একটি স্বাধীন pw_by_direct_sum() ফাংশনও লেখা হয়েছে,
যা প্রতিটি বছরের ক্যাশ ফ্লো আলাদাভাবে হিসাব করে $P/F$ দিয়ে ডিসকাউন্ট করে যোগ করে — এই দুই
সম্পূর্ণ ভিন্ন গণনা-পদ্ধতি একই উত্তর দিলেই বোঝা যাবে সূত্র দুটো সঠিক। দুটো টেস্ট কেস — একটি i ≠ g
(a1=$10,000, g=5%, i=8%, n=10 বছর), আরেকটি i = g (a1=$10,000, g=i=6%, n=10 বছর)।
# জিওমেট্রিক গ্রেডিয়েন্ট সিরিজের প্রেজেন্ট ওয়ার্থ
def pw_geometric_gradient(a1, g, i, n, eps=1e-9):
if abs(i - g) < eps:
return a1 * n / (1 + i)
return a1 * (1 - ((1 + g) / (1 + i)) ** n) / (i - g)
def pw_by_direct_sum(a1, g, i, n):
# প্রতিটি বছরের ক্যাশ ফ্লো আলাদাভাবে হিসাব করে P/F দিয়ে ডিসকাউন্ট করে যোগ করা -- স্বাধীন যাচাই
total = 0.0
for t in range(1, n + 1):
cf_t = a1 * (1 + g) ** (t - 1)
total += cf_t / (1 + i) ** t
return total
# টেস্ট ১: i != g
a1_1, g_1, i_1, n_1 = 10000, 0.05, 0.08, 10
P1_formula = pw_geometric_gradient(a1_1, g_1, i_1, n_1)
P1_direct = pw_by_direct_sum(a1_1, g_1, i_1, n_1)
print("--- টেস্ট ১: i != g ---")
print(f"a1=${a1_1:,.2f}, g={g_1*100:.0f}%, i={i_1*100:.0f}%, n={n_1} বছর")
print(f"সূত্র (i!=g branch) থেকে P = ${P1_formula:,.2f}")
print(f"ডাইরেক্ট সামেশন থেকে P = ${P1_direct:,.2f}")
assert abs(P1_formula - P1_direct) < 1e-6
# টেস্ট ২: i == g
a1_2, g_2, i_2, n_2 = 10000, 0.06, 0.06, 10
P2_formula = pw_geometric_gradient(a1_2, g_2, i_2, n_2)
P2_direct = pw_by_direct_sum(a1_2, g_2, i_2, n_2)
print("\n--- টেস্ট ২: i == g ---")
print(f"a1=${a1_2:,.2f}, g={g_2*100:.0f}%, i={i_2*100:.0f}%, n={n_2} বছর")
print(f"সূত্র (i==g branch) থেকে P = ${P2_formula:,.2f}")
print(f"ডাইরেক্ট সামেশন থেকে P = ${P2_direct:,.2f}")
assert abs(P2_formula - P2_direct) < 1e-6
print("\nদুই টেস্টেই সূত্র (i!=g branch ও i==g branch) ডাইরেক্ট সামেশনের সাথে হুবহু মিলে গেছে -- উভয় branch সঠিক।")
pw_by_direct_sum() ফাংশনটি সূত্রের কোনো জ্ঞান ছাড়াই শুধু মূল সংজ্ঞা
($A_1(1+g)^{t-1}$ প্রতি বছর, প্রতিটি টার্ম আলাদাভাবে $P/F$ দিয়ে ডিসকাউন্ট) ব্যবহার
করে গণনা করে — এটি সূত্র দুটোর একটি সম্পূর্ণ স্বাধীন যাচাই, নিছক হাতে-হিসাব-করা একটি সংখ্যার সাথে তুলনা নয়।
জিওমেট্রিক গ্রেডিয়েন্ট মুদ্রাস্ফীতি বা শতকরা-হারে বৃদ্ধি পাওয়া খরচ/রাজস্ব মডেল করার জন্য অ্যারিথমেটিক গ্রেডিয়েন্টের চেয়ে বেশি বাস্তবসম্মত। এখন পর্যন্ত M3-এ শেখা সব সিরিজই (uniform, arithmetic, geometric) ধরে নিয়েছে প্রথম পেমেন্ট বছর ১-এর শেষে ঘটে — পরের পাঠে দেখা যাবে পেমেন্ট দেরিতে শুরু হলে (deferred) বা সম্পূর্ণ অনিয়মিত হলে কীভাবে হিসাব করতে হয়।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ জিওমেট্রিক গ্রেডিয়েন্ট আর অ্যারিথমেটিক গ্রেডিয়েন্টের মধ্যে মূল পার্থক্য কী?
অ্যারিথমেটিক গ্রেডিয়েন্টে বৃদ্ধি একটি স্থির টাকার অ্যামাউন্ট (প্রতি বছর +G টাকা), কিন্তু জিওমেট্রিক গ্রেডিয়েন্টে বৃদ্ধি একটি স্থির শতকরা হার (প্রতি বছর ×(1+g))। দীর্ঘমেয়াদে জিওমেট্রিক গ্রেডিয়েন্ট এক্সপোনেনশিয়ালি বাড়ে (কম্পাউন্ডিং-এর মতো), আর অ্যারিথমেটিক গ্রেডিয়েন্ট লিনিয়ারলি বাড়ে।
প্র ০২
কোড সেলে eps ব্যবহার না করে সরাসরি if i == g: লিখলে কী সমস্যা হতে পারে?
ফ্লোটিং-পয়েন্ট সংখ্যায় দুটো গাণিতিকভাবে সমান মান (যেমন 0.06 ও অন্য কোনো হিসাব থেকে আসা
0.0600000001) হুবহু সমান নাও হতে পারে — এতে i == g মিথ্যা হয়ে যেতে পারে যখন
বাস্তবে তারা সমান হওয়ার কথা, ফলে ভুল branch (i≠g সূত্র) চলে যাবে এবং শূন্যের কাছাকাছি হর দিয়ে ভাগ হয়ে
একটি অস্বাভাবিক বড় বা ভুল ফলাফল আসতে পারে। abs(i-g) < eps এই ঝুঁকি এড়ায়।
প্র ০৩ g ঋণাত্মক হলে (অর্থাৎ ক্যাশ ফ্লো প্রতি বছর কমছে) সূত্রটি কি এখনও কাজ করবে?
হ্যাঁ — সূত্র ও কোড উভয়ই g-এর জন্য ঋণাত্মক মান গ্রহণ করতে পারে, যতক্ষণ না তা i-এর
সমান হয়ে যায়। উদাহরণস্বরূপ একটি অ্যাসেটের আউটপুট প্রতি বছর ৩% করে কমছে এমন ক্ষেত্রে g = -0.03
বসালেই সঠিক (ছোট হতে থাকা) প্রেজেন্ট ওয়ার্থ পাওয়া যাবে।
অনুশীলন
-
চিন্তা করুন: একটি কোম্পানির প্রথম বছরের অপারেটিং খরচ $20,000, এবং প্রতি বছর ৪% হারে বাড়বে
বলে ধারণা করা হচ্ছে। যদি সুদের হার ৪%-ই হয় (i = g), তাহলে সূত্র $P = A_1 n/(1+i)$ কেন এত সরল
হয়ে যায় — এর পেছনের অন্তর্দৃষ্টি কী?
যখন খরচ বৃদ্ধির হার আর ডিসকাউন্ট হার ঠিক সমান হয়, তখন প্রতি বছরের ক্যাশ ফ্লোর বৃদ্ধি আর তার ডিসকাউন্টিং একে অপরকে ঠিক ভারসাম্যপূর্ণভাবে বাতিল করে দেয় — প্রতিটি বছরের ডিসকাউন্টেড মান আসলে প্রায় সমান হয়ে যায় (প্রতিটি টার্মের ডিসকাউন্টেড ভ্যালু $A_1/(1+i)$-এর কাছাকাছি স্থির থাকে)। তাই মোট P প্রায় "n সংখ্যক সমান টার্মের যোগফল" -এর মতো আচরণ করে, ফলে সূত্রটি এত সরল হয়ে যায়।
-
পরীক্ষা করুন: উপরের কোড সেলে টেস্ট ১-এ
g_1 = 0.05-কেg_1 = 0.08-এ বদলে (অর্থাৎ এখন g_1 == i_1) Run চেপে দেখুন কোন branch চলে এবংassertপাস করে কি না।g_1 = 0.08 = i_1হলেabs(i-g) < epsশর্ত সত্য হয়ে যাবে, তাই ফাংশন এখন i=g branch (a1 * n / (1+i)) ব্যবহার করবে।pw_by_direct_sum()ফাংশনটি (যেটি সূত্র জানে না, শুধু প্রতিটি টার্ম যোগ করে) একই ফলাফল দেবে বলেইassertএখনও পাস করবে — এটাই দেখায় branch পরিবর্তন সঠিকভাবে কাজ করছে।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ টাইম ভ্যালু অফ মানি, ক্যাশ ফ্লো সিরিজ, ওয়ার্থ-ভিত্তিক তুলনা, রেট অফ রিটার্ন, ডেপ্রিসিয়েশন, ট্যাক্স, ইনফ্লেশন, রিস্ক অ্যানালাইসিস ও ক্যাপিটাল বাজেটিং — সম্পূর্ণ কোর্স এক জায়গায়।
- Discrete Mathematics কোর্স সহোদর কোর্স জিওমেট্রিক সিরিজ ও সমষ্টির সূত্র — জিওমেট্রিক গ্রেডিয়েন্ট ফ্যাক্টরের গাণিতিক ভিত্তি সেখানেই তৈরি হয়েছে।
- সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity, Cloud Computing & DevOps, Computer Networks, Operating Systems, Computer Architecture, Programming Languages & Compiler Design, Software Engineering & Git, Theory of Computation ও Engineering Economics — সব এক জায়গায়।