python用穷举法解方程

img

运行不出结果 是计算量太大还是有错误啊?代码如下

import numpy as np
M=100
C=0.025
m=1
T=5
P=99.99
Tlist_TB2216=np.arange(1,mT+1)/m
coupon=np.ones_like(Tlist_TB2216)MC/m
y=0.01
NPV_coupon=np.sum(coupon
np.exp(-yTlist_TB2216))
NPV_par=M
np.exp(-y*Tlist_TB2216[-1])
value=NPV_coupon+NPV_par
while value!=P:
if value>P:
y=y+1
else:
y=sum(y-1,y)/2
print('2022年7月25日22付息国债16的到期收益率',round(y,4))

看到小数(浮点数),就要想到二进制里不可避免的误差,所以while value!=P很难成立,也就意味着进入了死循环。
一般的做法是当二者之间的差小于一个极小值,比如10的-6次方或更小,则认为两者相等。
另外你的代码里value在while代码块里没有变化啊,不就相当于恒不等?