首页 > 解决方案 > Sympy evalf 不适用于 2 个变量表达式中的 1 个变量 subs()

问题描述

对于使用 Sympy 的 Python 大学项目,我需要在部分替换后评估 2 var 符号函数的输出,例如:

f = (x-1)/sqrt((x-10)^2+(y-10)^2) / x = 1 => f = 0

如果我使用 1 var func,它工作正常:

>>> from sympy import *
>>> x = symbols('x')
>>> F = 1-x
>>> F.evalf(subs={x: 1})
0.e-125

但是在 2 var 函数的情况下, subs 似乎没有正确替换:

>>> from sympy import *
>>> x,y = symbols('x y')
>>> F = (x-1)/sqrt((x-10)**2+(y-10)**2)
>>> F.evalf(subs={x: 1})
(x - 1.0)*((x - 10.0)**2 + (y - 10.0)**2)**(-0.5)

我期望 F = 0 因为 x = 1

标签: pythonsympy

解决方案


我不是 sympy 专家,但是当 的值y使表达式非零时,我发现了一个反例:

>>> F.evalf(subs={x:1,y:float("nan")})
nan

y为时nan,结果不为零。所以不可能简化不知道值的表达式(注意:即使结果也应该是 nan,ysympy 也很高兴地计算为 0)F.evalf(subs={x:1,y:oo})


推荐阅读