【发布时间】:2019-04-21 09:46:18
【问题描述】:
我有一个简单的非线性优化项目。我想找到未来现金流量和终值的贴现率,使总和等于指定的 NPV。以下是我尝试过的一些实验。
两家公司的固定现金流量均为 10,且 NPV 不同。贴现率结果应分别为 1.074 (7.4%) 和 1.052 (5.2%)。 Excel Solver 在 Scipy 返回 NoConvergence 时迅速找到了根源。
import numpy as np
from scipy.optimize import newton_krylov
from scipy.optimize.nonlin import NoConvergence
cf_fy1 = [10]*2
cf_fy2 = [10]*2
cf_fy3 = [10]*2
cf_fy4 = [10]*2
cf_fy5 = [10]*2
cf_fy6 = [10]*2
npv = [200, 400]
def mydr(dr):
terminal_value = np.divide(cf_fy6, np.subtract(dr, 1.03))
ev = np.sum([np.divide(cf_fy1, np.power(dr, 1)),
np.divide(cf_fy2, np.power(dr, 2)),
np.divide(cf_fy3, np.power(dr, 3)),
np.divide(cf_fy4, np.power(dr, 4)),
np.divide(cf_fy5, np.power(dr, 5)),
np.divide(terminal_value, np.power(dr, 5))], axis=0)
z = np.subtract(ev, npv)
return abs(z)
try:
sol = newton_krylov(mydr, [1.1] * len(npv))
converged = True
except NoConvergence as e:
sol = e.args[0]
converged = False
提前谢谢大家!
【问题讨论】:
标签: python optimization scipy