মাল্টিপল রেট অফ রিটার্ন সমস্যা
এই পাঠে যা শিখবেন
- কনভেনশনাল বনাম নন-কনভেনশনাল ক্যাশ ফ্লো — চিহ্ন-পরিবর্তনের সংখ্যা দিয়ে পার্থক্য
- Descartes' rule of signs — কেন এটি শুধু একটি ঊর্ধ্বসীমা দেয়, নিশ্চয়তা নয়
- কেন একাধিক বৈধ IRR থাকলে সাধারণ "IRR ≥ MARR" সিদ্ধান্ত নিয়ম অকার্যকর হয়ে যায়
- Python-এ সুদের হারের একটি রেঞ্জ স্ক্যান করে NPV-এর প্রতিটি চিহ্ন-পরিবর্তন (তথা প্রতিটি রুট) শনাক্ত করা
১ · নন-কনভেনশনাল ক্যাশ ফ্লো ও Descartes' Rule
একটি কনভেনশনাল (conventional) ক্যাশ ফ্লোতে চিহ্ন মাত্র একবার বদলায় — সাধারণত শুরুতে একটি বিনিয়োগ (ঋণাত্মক), তারপর সব বছর ধনাত্মক রিটার্ন (যেমন L20-এর উদাহরণ: $-,+,+,+,+$)। কিন্তু কিছু বাস্তব প্রজেক্টে চিহ্ন একাধিকবার বদলায় — যেমন একটি খনি প্রকল্পে শুরুতে বড় বিনিয়োগ (ঋণাত্মক), মাঝে বছরের পর বছর আয় (ধনাত্মক), আর শেষে পরিবেশ পুনরুদ্ধার বা ডিকমিশনিং খরচ (আবার ঋণাত্মক) — এই ধরনের $-,+,+,\ldots,-$ প্যাটার্নকে নন-কনভেনশনাল (non-conventional) ক্যাশ ফ্লো বলা হয়।
Descartes' rule of signsএকটি বহুপদী সমীকরণের ধনাত্মক বাস্তব মূলের সংখ্যা কখনোই সহগগুলোর চিহ্ন-পরিবর্তনের সংখ্যার চেয়ে বেশি হতে পারে না (একই জোড়-বিজোড়ে কম হতে পারে)। বলে — একটি ক্যাশ ফ্লো সিরিজে ক্রমিকভাবে চিহ্ন যতবার বদলায়, তার সমান বা তার চেয়ে কম সংখ্যক ধনাত্মক বাস্তব IRR থাকতে পারে (একই প্যারিটিতে কম হতে পারে, যেমন ২ চিহ্ন-পরিবর্তনে ২টি বা ০টি রুট থাকতে পারে, কিন্তু ১টি নয়)। এটি একটি ঊর্ধ্বসীমা মাত্র — বাস্তবে কয়টি রুট সত্যিই আছে তা নিশ্চিত করতে হলে সরাসরি হিসাব বা স্ক্যান করতে হয়।
চিহ্ন একবার বদলায় ($-,+,+,\ldots$) — ঠিক একটি IRR থাকার নিশ্চয়তা।
চিহ্ন একাধিকবার বদলায় — ০, ১, বা একাধিক বৈধ IRR থাকতে পারে।
একাধিক IRR থাকলে "IRR vs MARR" তুলনা অস্পষ্ট — কোন IRR ব্যবহার করব তা স্পষ্ট নয়।
২ · একটি ক্লাসিক উদাহরণ — Python দিয়ে রেঞ্জ স্ক্যান
নিচের ক্যাশ ফ্লো — বছর ০-এ $1,000 বিনিয়োগ, বছর ১-এ $3,000 আয়, বছর ২-এ $2,100 খরচ — একটি ক্লাসিক নন-কনভেনশনাল উদাহরণ। চিহ্ন-ক্রম $-,+,-$, অর্থাৎ ২টি চিহ্ন-পরিবর্তন — Descartes' rule অনুযায়ী সর্বোচ্চ ২টি ধনাত্মক IRR থাকতে পারে। একটি একক বাইসেকশন এখানে বিপজ্জনক — কারণ ব্র্যাকেট বাছাইয়ের উপর নির্ভর করে এটি যেকোনো একটি রুট খুঁজে পেতে পারে, অন্যটি সম্পূর্ণ মিস করে যেতে পারে। তাই নিচের কোডে বাইসেকশনের বদলে একটি রেঞ্জ স্ক্যান করা হয়েছে — $i=-50\%$ থেকে $i=200\%$ পর্যন্ত ছোট ছোট ধাপে NPV হিসাব করে প্রতিটি চিহ্ন-পরিবর্তন (অর্থাৎ প্রতিটি রুটের আনুমানিক অবস্থান) সরাসরি শনাক্ত করা হয়েছে।
# মাল্টিপল IRR শনাক্তকরণ -- সুদের হারের একটি রেঞ্জ স্ক্যান করে NPV-এর প্রতিটি চিহ্ন-পরিবর্তন খোঁজা
def npv(cashflows, i):
return sum(cf / (1 + i) ** t for t, cf in cashflows)
# (বছর, ক্যাশ ফ্লো) -- ক্লাসিক নন-কনভেনশনাল সিরিজ: -, +, - => ২টি চিহ্ন-পরিবর্তন
cashflows = [(0, -1000), (1, 3000), (2, -2100)]
signs = [1 if cf > 0 else -1 for _, cf in cashflows]
sign_changes = sum(1 for a, b in zip(signs, signs[1:]) if a * b < 0)
print(f"ক্যাশ ফ্লোর চিহ্ন-ক্রম: {signs}")
print(f"চিহ্ন-পরিবর্তনের সংখ্যা: {sign_changes}")
print(f"Descartes' rule অনুযায়ী সর্বোচ্চ সম্ভাব্য ধনাত্মক IRR: {sign_changes}টি\n")
lo, hi, step = -0.5, 2.0, 0.0005
roots_found = []
i_prev = lo
npv_prev = npv(cashflows, lo)
i = lo + step
while i <= hi:
npv_curr = npv(cashflows, i)
if npv_prev * npv_curr < 0:
# এই ছোট ইন্টারভ্যালে একটি রুট আছে -- লিনিয়ার ইন্টারপোলেশনে আনুমানিক অবস্থান
approx_root = i_prev - npv_prev * (i - i_prev) / (npv_curr - npv_prev)
roots_found.append(approx_root)
i_prev, npv_prev = i, npv_curr
i += step
print(f"স্ক্যানে পাওয়া রুটের সংখ্যা: {len(roots_found)}")
for idx, r in enumerate(roots_found, start=1):
print(f" রুট {idx}: i ≈ {r*100:.2f}% (যাচাই NPV = ${npv(cashflows, r):,.4f})")
নন-কনভেনশনাল ক্যাশ ফ্লো (একাধিকবার চিহ্ন-পরিবর্তন) একাধিক বৈধ IRR দিতে পারে, যা "IRR ≥ MARR" সিদ্ধান্ত নিয়মকে অর্থহীন করে তোলে — কারণ কোন IRR তুলনা করব তা স্পষ্ট নয়, এবং কোনোটিই প্রজেক্টের প্রকৃত আর্থিক গুণমান সঠিকভাবে প্রকাশ করে না। এই সমস্যার সমাধানে পরের পাঠগুলোয় ইনক্রিমেন্টাল রেট অফ রিটার্ন (L22) ও এক্সটার্নাল রেট অফ রিটার্ন/MIRR (L23) — দুটি ভিন্ন কৌশল শেখানো হবে।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ Descartes' rule of signs কেন শুধু একটি "ঊর্ধ্বসীমা" দেয়, নিশ্চিত সংখ্যা নয়?
কারণ এই নিয়ম শুধু বহুপদীর সহগের চিহ্ন-প্যাটার্ন দেখে বলে দেয় কতগুলো ধনাত্মক বাস্তব মূল থাকতে পারে, কিন্তু বাস্তব মূলের বদলে জটিল (complex) মূলও থাকতে পারে, অথবা প্রকৃত রুট-সংখ্যা সর্বোচ্চ সীমার চেয়ে ২, ৪, ইত্যাদি কম হতে পারে (একই জোড়-বিজোড় প্যারিটি বজায় রেখে)। তাই প্রকৃত রুট-সংখ্যা নিশ্চিত করতে সরাসরি হিসাব বা স্ক্যান করাই একমাত্র নির্ভরযোগ্য পথ।
প্র ০২ একটি প্রজেক্টের ২টি বৈধ IRR (১১.৩% ও ৮৮.৭%) থাকলে, MARR = ১৫% হলে সিদ্ধান্ত নেওয়া কতটা সহজ?
মোটেও সহজ নয় — MARR = ১৫% একটি IRR-এর (১১.৩%) চেয়ে বেশি কিন্তু অন্যটির (৮৮.৭%) চেয়ে অনেক কম। "IRR ≥ MARR" নিয়ম প্রয়োগ করতে গেলে ভিন্ন IRR ব্যবহার করলে ভিন্ন সিদ্ধান্ত আসবে — এই দ্বন্দ্বই প্রমাণ করে কেন নন-কনভেনশনাল ক্যাশ ফ্লোতে সাধারণ IRR পদ্ধতি নির্ভরযোগ্য নয়, এবং কেন PW/AW (M4) বা ERR (L23)-এর মতো বিকল্প পদ্ধতি প্রয়োজন হয়।
প্র ০৩ যদি একটি ক্যাশ ফ্লোতে চিহ্ন মাত্র একবারই বদলায় (কনভেনশনাল), তাহলে কি একাধিক IRR-এর ঝুঁকি থাকে?
না — এক্ষেত্রে Descartes' rule অনুযায়ী সর্বোচ্চ ১টি ধনাত্মক IRR-ই থাকতে পারে, তাই L20-এর মতো সরল বাইসেকশন নিরাপদ। একাধিক IRR-এর ঝুঁকি শুধু তখনই আসে যখন প্রজেক্টের ক্যাশ ফ্লো একাধিকবার চিহ্ন বদলায় — যেমন মাঝপথে বড় বাড়তি বিনিয়োগ বা শেষে ডিকমিশনিং/পরিবেশ পুনরুদ্ধার খরচ থাকলে।
অনুশীলন
-
চিন্তা করুন: একটি সৌরবিদ্যুৎ প্রকল্পে বছর ০-এ বিনিয়োগ (ঋণাত্মক), বছর ১-২০-এ আয় (ধনাত্মক),
আর বছর ২০-এ প্যানেল অপসারণ ও রিসাইক্লিং খরচ (ঋণাত্মক) আছে। এর চিহ্ন-ক্রম কী, এবং এটি কনভেনশনাল না
নন-কনভেনশনাল?
চিহ্ন-ক্রম $-,+,+,\ldots,+,-$ — শুরুতে একবার ঋণ থেকে ধনে, শেষে আবার ধন থেকে ঋণে — মোট ২টি চিহ্ন-পরিবর্তন। এটি নন-কনভেনশনাল, তাই Descartes' rule অনুযায়ী সর্বোচ্চ ২টি বৈধ IRR থাকতে পারে — এই কোর্সের উপরের কোডের মতোই একটি রেঞ্জ স্ক্যান করে যাচাই করা প্রয়োজন হবে।
-
পরীক্ষা করুন: উপরের কোড সেলে
step = 0.0005-কেstep = 0.05-এ বদলে (অনেক বড় ধাপ) Run চেপে দেখুন রুট শনাক্তকরণে কী সমস্যা হতে পারে।ধাপ অনেক বড় হলে স্ক্যান দুটি রুটের মধ্যবর্তী সরু এলাকা পুরোপুরি "লাফ দিয়ে" পার হয়ে যেতে পারে — ফলে কিছু চিহ্ন-পরিবর্তন সম্পূর্ণ মিস হয়ে যেতে পারে, এবং প্রিন্ট হওয়া রুটের সংখ্যা প্রকৃত সংখ্যার চেয়ে কম দেখাতে পারে। এটাই দেখায় কেন রেঞ্জ স্ক্যানে ধাপের আকার (resolution) গুরুত্বপূর্ণ — যত ছোট ধাপ, তত নির্ভরযোগ্য ফলাফল, কিন্তু হিসাবও তত বেশি সময় নেয়।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ টাইম ভ্যালু অফ মানি, ক্যাশ ফ্লো সিরিজ, ওয়ার্থ-ভিত্তিক তুলনা, রেট অফ রিটার্ন, ডেপ্রিসিয়েশন, ট্যাক্স, ইনফ্লেশন, রিস্ক অ্যানালাইসিস ও ক্যাপিটাল বাজেটিং — সম্পূর্ণ কোর্স এক জায়গায়।
- Discrete Mathematics কোর্স সহোদর কোর্স বহুপদী ও তাদের মূল সংক্রান্ত ধারণা — Descartes' rule of signs এই কোর্সের বহুপদী অধ্যায়ের সাথে সরাসরি সম্পর্কিত।
- সব 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 — সব এক জায়গায়।