Scipy Optimizer t未定义

时间:2017-09-08 01:28:27

标签: python scipy

嗨我有这套债券收益率到成熟度代码,我试图调试。我一直没有定义。失去了这是一个错误还是忽略了将t声明为无变量

非常感谢您的帮助。

import scipy.optimize as optimize

def bond_ytm(price, par, T, coup, freq=2, guess=0.05):
    freq = float(freq)
    periods = T*freq
    coupon = coup/100.*par/freq
    dt = [(i+1)/freq for i in range(int(periods))]
    ytm_func = lambda y: \
    sum([coupon/(1+y/freq)**(freq*t) for t in dt]) + \
    par/(1+y/freq)**(freq*t) - price

    return optimize.newton(ytm_func, guess)

2 个答案:

答案 0 :(得分:2)

问题在于你的表达

Optional

您从sum([coupon/(1+y/freq)**(freq*t) for t in dt]) + par/(1+y/freq)**(freq*t) - price ^ right here 获得的第一个t,但第二个不在列表推导范围内 - for t in dt未定义。

也许你的意思是第二个句子在循环中?

答案 1 :(得分:0)

抱歉设法解决了。粗心的错误。对于找到bond_ytm

的其他人有用
import scipy.optimize as optimize

def bond_ytm(price, par, T, coup, freq=2, guess=0.05):
    freq = float(freq)
    periods = T*freq
    coupon = coup/100.*par/freq
    dt = [(i+1)/freq for i in range(int(periods))]
    ytm_func = lambda y : \
    sum([coupon / (1 + y / freq)**(freq * t) for t in dt]) + \
    par / (1 + y / freq)**(freq * max(dt)) - price

    return optimize.newton(ytm_func, guess)

ytm = bond_ytm(95.0428, 100, 1.5, 5.75, 2)
print(ytm)