python二分法求NPV 0時的內部收益率

2021-10-12 21:34:30 字數 1835 閱讀 2293

專案的現金流入和流出如下圖

使用二分法定義irr的求解過程函式:

def

irr(r_low=

0, r_up=

0.1, epsilon=1e-

8): n =

0while

true

: r_mid =

(r_low + r_up)/2

n +=

1#print(r_low, r_mid, r_up)

#print(npv(r_low), npv(r_mid), npv(r_up))

if r_mid - r_low <= epsilon or r_up - r_mid <= epsilon:

return r_mid, n #設定好終止條件及返回結果

elif npv(r_mid)

* npv(r_low)

>=0:

r_low = r_mid #中點和左端點函式值同號,說明零點在右端,將中點賦值給左端點

else

: r_up = r_mid #中點和左端點函式值異號,說明零點在左端,將中點賦值給右端點

列印出irr的數值以及迭代次數

列印出irr代入所定義的npv函式的結果

irr, n = irr(

)print

('irr = , iterative: times.'

.format

(irr, n)

)print

('npv = '

.format

(npv(irr)

))

另外,npv函式的另一種定義方法如下:

def

npv(r)

: s =

0for i in

range(1

,16):

s +=

-19900./

(1+ r)

**i for i in

range(19

,23):

s +=

40000./

(1+ r)

**i s +=

100000./

(1+r)**

30for i in

range(65

,86):

s +=

50000./

(1+ r)

**i s +=

900000./

(1+ r)

**85

return s

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

求方程根 (二分法)

二分法求方程的根 求下面方程的乙個根 f x x3 5x2 10x 80 0 若求出的根是a,則要求 f a 10 6 解法 對f x 求導,得f x 3x2 10x 10。由一元二次方程求根公式知方呈f x 0 無解,因此f x 恆大於0。故f x 是單調遞增的。易知f 0 0且f 100 0,所...