পাঠ ১২ · ৫৭-এর মধ্যে · মডিউল ৩
Home / Courses / Engineering Economics / জিওমেট্রিক গ্রেডিয়েন্ট

জিওমেট্রিক গ্রেডিয়েন্ট সিরিজ

Geometric gradient series
১০ মিনিট পড়া মধ্যবর্তী · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • জিওমেট্রিক গ্রেডিয়েন্ট সিরিজের সংজ্ঞা ও অ্যারিথমেটিক গ্রেডিয়েন্টের সাথে পার্থক্য
  • 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) — যেমন মুদ্রাস্ফীতির সাথে সামঞ্জস্যপূর্ণ বেতন বা অপারেটিং খরচের বৃদ্ধি মডেল করার জন্য এটিই বেশি বাস্তবসম্মত।

i ≠ g হলে
$$P = A_1 \cdot \frac{1 - \left(\frac{1+g}{1+i}\right)^n}{i-g}$$
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 বছর)।

Python
# জিওমেট্রিক গ্রেডিয়েন্ট সিরিজের প্রেজেন্ট ওয়ার্থ

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$ দিয়ে ডিসকাউন্ট) ব্যবহার করে গণনা করে — এটি সূত্র দুটোর একটি সম্পূর্ণ স্বাধীন যাচাই, নিছক হাতে-হিসাব-করা একটি সংখ্যার সাথে তুলনা নয়।
মূল কথা · Key takeaway

জিওমেট্রিক গ্রেডিয়েন্ট মুদ্রাস্ফীতি বা শতকরা-হারে বৃদ্ধি পাওয়া খরচ/রাজস্ব মডেল করার জন্য অ্যারিথমেটিক গ্রেডিয়েন্টের চেয়ে বেশি বাস্তবসম্মত। এখন পর্যন্ত 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 বসালেই সঠিক (ছোট হতে থাকা) প্রেজেন্ট ওয়ার্থ পাওয়া যাবে।

অনুশীলন

  1. চিন্তা করুন: একটি কোম্পানির প্রথম বছরের অপারেটিং খরচ $20,000, এবং প্রতি বছর ৪% হারে বাড়বে বলে ধারণা করা হচ্ছে। যদি সুদের হার ৪%-ই হয় (i = g), তাহলে সূত্র $P = A_1 n/(1+i)$ কেন এত সরল হয়ে যায় — এর পেছনের অন্তর্দৃষ্টি কী?

    যখন খরচ বৃদ্ধির হার আর ডিসকাউন্ট হার ঠিক সমান হয়, তখন প্রতি বছরের ক্যাশ ফ্লোর বৃদ্ধি আর তার ডিসকাউন্টিং একে অপরকে ঠিক ভারসাম্যপূর্ণভাবে বাতিল করে দেয় — প্রতিটি বছরের ডিসকাউন্টেড মান আসলে প্রায় সমান হয়ে যায় (প্রতিটি টার্মের ডিসকাউন্টেড ভ্যালু $A_1/(1+i)$-এর কাছাকাছি স্থির থাকে)। তাই মোট P প্রায় "n সংখ্যক সমান টার্মের যোগফল" -এর মতো আচরণ করে, ফলে সূত্রটি এত সরল হয়ে যায়।

  2. পরীক্ষা করুন: উপরের কোড সেলে টেস্ট ১-এ 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 — সব এক জায়গায়।
আগের পাঠ
অ্যারিথমেটিক গ্রেডিয়েন্ট সিরিজ