0
我是新來的scipy和python。我已經搜索了相當廣泛的工具,在Python中找到類似於Excel Solver的工具,而且scipy似乎非常強大。我的問題有點簡單。我試圖找出一系列現金流量的折現率,以便CF的現值之和等於一個特定的價值。使用Scipy找到目標值Python
如果我運行代碼,我得到了這個錯誤信息。 1500是我的目標值,所以我儘量減少我的目標值和f(DR)之間的差異。
RuntimeWarning:溢出在乘法 DRfactor遇到[I] = DRfactor [I-1] *(1 + DR的[I])
任何和所有的幫助是非常讚賞
import numpy as np
import scipy as sp
import scipy.optimize
def f(DR):
CFs = [100]*50
DRs = [np.nan]*50
DRfactor = [np.nan]*50
for i in range(0,50):
if 0<=i<=4:
DRs[i] = DR
else:
DRs[i] = (DRs[i-1]-0.1)*0.9+0.1
if i == 0:
DRfactor[i] = 1+DRs[i]
else:
DRfactor[i] = DRfactor[i-1]*(1+DRs[i])
CFPV = np.divide(CFs, DRfactor)
CFsum = np.sum(CFPV)
return (CFsum - 1500)**2
print (f(0.05))
sol = sp.optimize.minimize(f, 0.05)
sol.x
我還不確定這是爲什麼,但是如果你在乘法之後放一個打印,你的代碼就可以正常工作。 – user1862770
我跑了這個並在警告處打印出了數值,它給出了DRfactor [i-1] = [2.51650823e + 304]'和'DRs [i] = [3.97637700e + 11]'。看起來像算法的問題。 – tom10
Excel求解器返回0.0416111292046818,我相信python可以做得更好。可能我使用了錯誤的scipy函數? – Timescape