我是 scipy 和 python 的新手。我已经广泛搜索了Python中的Excel求解器,并且scipy似乎非常强大。我的问题有点简单。我试图找到一系列现金流的贴现率,以便CF现值的总和等于特定值。
如果我运行代码,我会收到此错误消息。 1500 是我的目标值,所以我尝试最小化目标值和 f(DR) 之间的差异。
运行时警告:在乘法中遇到溢出 DRfactor[i] = DRfactor[i-1]*(1+DRs[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
我想通了。 scipy.optimize.newton 可以将 f(DR) 归零并给出 0.041611073570941355,这与 Excel 求解器给出的答案相同。