gpt4 book ai didi

python - SymPy 表达式的 `subs` 方法的 `evalf` 参数到底是做什么用的?像 `s.evalf(subs={...})` 吗?

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:01 27 4
gpt4 key购买 nike

我偶然发现了它,因为它的行为与我预期的不一样。 s.evalf(subs={t: 0}) 到底是做什么用的?

它似乎既不是 s.evalf().subs({t: 0}) 的“快捷方式”,也不是 s.evalf().subs({t: 0}) 作为

import sympy

omega, t = sympy.symbols("omega, t")
s = sympy.pi * sympy.cos(omega*t)

# both result in 3.14159265358979
print(s.evalf().subs({t: 0}))
print(s.subs({t: 0}).evalf())
# results in 3.14159265358979*cos(omega*t)
print(s.evalf(subs={t: 0}))

结果

3.14159265358979
3.14159265358979
3.14159265358979*cos(omega*t)

找不到关于此的良好文档。也许有人知道答案?否则我可能需要查看源代码以了解更多...

最佳答案

evalf(subs=...) 试图避免由于天真替换而导致的重要性损失。

例如

>>> (x + y - z).subs({x: 1e100, y: 1, z: 1e100})
0
>>> (x + y - z).evalf(subs={x: 1e100, y: 1, z: 1e100})
1.00000000000000

朴素替换计算 1e100 + 1 - 1e100,它会丢失 1,因为默认精度 15 位数字不足以保留该信息。使用 evalf(subs=...) 时,表达式会通过 evalf 算法运行,该算法会小心处理此类可能会丢失重要性的问题。 subs 字典告诉 evalf 算法遇到哪些符号时应将其替换为数字。可以看到the source of evalf.py如果您对细节感兴趣。

关于python - SymPy 表达式的 `subs` 方法的 `evalf` 参数到底是做什么用的?像 `s.evalf(subs={...})` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50439037/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com