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


烙印99
浏览 257回答 2
2回答

慕码人2483693

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

森林海

如上所述,如果 y = nan 会创建数学异常,因此替换永远不会发生。但我发现如果我只使用 subs 然后我得到了我想要的:>>> F.subs(x,1) 0现在,如果我明确地替换 y = nan 那么我就会得到 nan 答案>>> F.subs(y,nan) nan我猜 evalf 只是在评估替换之前检查更多异常。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python