用 python 求解具有大指数的方程
Solving an equation with large exponents with python
我正在尝试使用以下等式计算债券的到期收益率,考虑到当前价格、期数、息票和面值都是已知的。
我使用以下代码创建了一个 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
不过好像不行。非常感谢任何关于我应该如何解决这个问题的帮助。
用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
我正在尝试使用以下等式计算债券的到期收益率,考虑到当前价格、期数、息票和面值都是已知的。
我使用以下代码创建了一个 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
不过好像不行。非常感谢任何关于我应该如何解决这个问题的帮助。
用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