对于使用 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
2 回答

慕码人2483693
TA贡献1860条经验 获得超9个赞
我不是同情专家,但当 的值y
使表达式非零时,我发现了一个反例:
>>> F.evalf(subs={x:1,y:float("nan")}) nan
当y
is 时nan
,结果不为零。所以不可能在不知道值的情况下简化表达式y
(注意:F.evalf(subs={x:1,y:oo})
即使结果也应该是 nan ,sympy 也会愉快地评估为 0)

森林海
TA贡献2011条经验 获得超2个赞
如上所述,如果 y = nan 会创建数学异常,因此替换永远不会发生。但我发现如果我只使用 subs 然后我得到了我想要的:
>>> F.subs(x,1) 0
现在,如果我明确地替换 y = nan 那么我就会得到 nan 答案
>>> F.subs(y,nan) nan
我猜 evalf 只是在评估替换之前检查更多异常。
添加回答
举报
0/150
提交
取消