Root查找功能问题

时间:2015-08-21 17:11:54

标签: python scipy

我尝试使用下面的代码找到多项式函数的根。多项式是根据需要设置的,但我的问题是scipy.optimize.newton(f, yields_0)只返回一个值,当我期望它返回一个列表时。我不知道如何解决这个问题。我知道这不是设置函数f的最佳方式,但我不知道列表rhs - bond.price中每个bond的{​​{1}}如何。 bonds只能处理返回单个值的函数吗?如果是这样,我该如何重写下面的代码?

scipy.optimize.newton()

1 个答案:

答案 0 :(得分:1)

我不清楚你的代码到底在做什么,但我可以给你一个快速计算债券收益率的例子。假设流量是0,1,2等的现金流量列表。flows[0]是价格的负值,flows[1]是第一张优惠券,...,流量[-1]是最终的优惠券+兑换价值。

from numpy.polynomial.polynomial import Polynomial
# pv is present value as function of the discount rate
pv = Polynomial(flows)
f1 = pv.deriv(1)
f2 = pv.deriv(2)
v0 = 1/(1+yield_0)
v =  scipy.optimize.newton(pv, v0, fprime=f1, fprime2=f2)
yield = 1.0/v -1

这假定第一张优惠券是在购买保证金之后的六个月内支付的,就像您的代码中的情况一样。产量是每六个月一次,你必须将其调整为年产量。如果您想要更通用的方法,可以在购买日期的任何时间段内支付第一张优惠券,您将无法使用多项式。

我没有测试过这段代码;它可能有错误。