为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

烙印99 2021-07-02 13:15:11
对于使用 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

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


查看完整回答
反对 回复 2021-07-13
?
森林海

TA贡献2011条经验 获得超2个赞

如上所述,如果 y = nan 会创建数学异常,因此替换永远不会发生。但我发现如果我只使用 subs 然后我得到了我想要的:

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

现在,如果我明确地替换 y = nan 那么我就会得到 nan 答案

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

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


查看完整回答
反对 回复 2021-07-13
  • 2 回答
  • 0 关注
  • 254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信