Sympy Evalf不适用于2个变量表达式中的1个变量subs()

时间:2018-10-10 15:50:10

标签: python sympy

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

  

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

如果我使用1 var函数,则效果很好:

>>> 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

2 个答案:

答案 0 :(得分:2)

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

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

ynan时,结果不为零。因此,不可能在不知道y的值的情况下简化表达式(注意:即使结果也应该是nan,sympy都会很高兴地将F.evalf(subs={x:1,y:oo})的值评估为0)

答案 1 :(得分:1)

如上所述,如果y = nan会创建数学异常,因此替换永远不会发生。 但是我发现如果我只是使用潜艇,那么我会得到想要的东西:

>>> F.subs(x,1)
0

现在,如果我只明确地用y = nan代替,那么我得到nan答案

>>> F.subs(y,nan)
nan

我猜测evalf只是在评估替代项之前检查更多异常。