使用 Scipy 查找目标值 Python



我是 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 求解器给出的答案相同。

最新更新