【问题标题】:Sympy -power variable equation fail (bond yield)Sympy -power 变量方程失败(债券收益率)
【发布时间】:2021-02-18 08:59:44
【问题描述】:

我是 sympy 的新手,正在尝试让它为我解方程。我一直对完整的方程有问题,所以把它简化了,我相信挑战是有一个 -ve 变量。例如

y=symbols('y')
eqn=Eq(4*2.71828**(y*5),200)
solve(eqn,y)

以上工作正常,并给出0.782405127372565的答案

但是,我真正想做的是有一个 -y,如下所示。这给了我没有答案。有什么想法吗?

y=symbols('y') 
eqn=Eq(4*2.71828**(-y*5),200)
solve(eqn,y)

【问题讨论】:

标签: python sympy


【解决方案1】:

2.71828**(y*5) 看起来不太适合用于搜索精确解的符号库。请使用exp(-y*5)。一般来说,最好尽可能avoid floats

为避免将复数作为解决方案,您可以将y 限制为real。 只要有可能, sympy 就会返回精确的符号解。您可以通过N().evalf() 将它们转换为数字。

from sympy import Eq, symbols, solve, exp, N

y = symbols('y', real=True)
eqn = Eq(4 * exp(-y * 5), 200)
sol = solve(eqn, y)
print(sol, [N(s) for s in sol])

输出:

[log(2000**(1/5)/10)] [-0.782404601085629]

没有real=True,你会得到所有 5 个复杂的解决方案。

【讨论】:

  • 感谢@JohanC。知道这真的很有用....我现在可以正常工作,并在此过程中给了自己一些要学习的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 2011-05-14
  • 2013-09-28
相关资源
最近更新 更多