对于使用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
答案 0 :(得分:2)
我不是专家,但是当y
的值使表达式非零时,我发现了一个反例:
>>> F.evalf(subs={x:1,y:float("nan")})
nan
当y
为nan
时,结果不为零。因此,不可能在不知道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只是在评估替代项之前检查更多异常。