Решение уравнения с большими показателями с помощью питона - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь рассчитать доходность к погашению облигации, используя следующее уравнение, учитывая, что текущая цена, число периодов, купоны и номинальная стоимость известны.

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 Ответ

1 голос
/ 20 июня 2019

Численные решения могут быть легко получены с помощью 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
...