使用python解决具有大指数的方程式

时间:2019-06-19 15:49:05

标签: python math scipy sympy equation

考虑到当前价格,期数,息票和票面价值都是已知的,我试图使用以下公式计算债券的到期收益率。

img

我使用以下代码创建了一个SymPy表达式:

expr = coupon/pow((1+ytm), exp)
exp= exp+0.5

for x in range(1, periods):
    expr = expr + coupon/pow((1+ytm), exp)
    exp = exp+0.5

exp = exp-0.5
expr = expr+100/pow((1+ytm), exp)

表达式一旦计算就看起来像这样:

Out[3]: 104.375*(ytm + 1)**(-28.7356164383562) + 4.375*(ytm + 1)**(-28.2356164383562) + ..... + 4.375*(ytm + 1)**(-0.735616438356164) + 4.375*(ytm + 1)**(-0.235616438356164)

试图用SymPy solve()方法解决:

from sympy.solvers import solve

但是它似乎不起作用。非常感谢我应如何解决此问题。

1 个答案:

答案 0 :(得分:1)

使用nsolve可以轻松获得数值解。演示一个从您提供的内容中得出的表达式:

>>> print(filldedent(eq))
104.375*(ytm + 1)**(-28.7356164383562) + 4.375*(ytm +
1)**(-28.2356164383562) + 4.375*(ytm + 1)**(-0.735616438356164) +
4.375*(ytm + 1)**(-0.235616438356164)
>>> nsolve(eq-5, 1)
2.49587148297981