python - Sympy - 将等价表达式与等号 (=) 进行比较
问题描述
我知道在 Sympy 中,== 等价性不适用于符号表达式,因此不能用于检查符号等价性。从文档中,建议使用simplify (a-b)
并检查结果是否为 0。例如,
>>> simplify((x + 1)**2 - (x**2 + 2*x + 1))
但是,这似乎不适用于其中包含等于的表达式。例如,我想比较(2x=6 和 x=3),应该相等。
>>> a = Eq(2*x,6)
>>> b = Eq(x,3)
>>> simplify(a-b)
−x=3+(2x=6)
或更复杂的方程应该等价
>>> a = Eq(x*(y+1),6)
>>> b = Eq(2*x*y + 2*x, 12)
>>> simplify(a-b)
(x(y+1)=6)−(2x(y+1)=12)
想知道在 Sympy 中是否有很好的方法或技巧来做到这一点。
谢谢!
解决方案
使这些方程等效的原因是它们具有相同的解集,或者在求解 时它们是相同的x
。让 sympy 解决它们并比较解决方案:
from sympy import *
x, y = symbols('x y')
a = Eq(2*x,6)
b = Eq(x,3)
print(solve(a) == solve(b)) #True
这同样适用于您更复杂的示例:
a = Eq(x*(y+1),6)
b = Eq(2*x*y + 2*x, 12)
print(solve(a)) # [{x: 6/(y + 1)}]
print(solve(b)) # [{x: 6/(y + 1)}]
print(solve(a) == solve(b)) # True
推荐阅读
- c - 在C中查找然后复制子字符串的有效方法
- javascript - 将事件(例如模糊)添加到多个元素(现在和未来)
- r - 在 dplyr 函数中将列名添加到 vars()
- caddy - 如何使用 Caddy 同时提供 http 和 https?
- google-compute-engine - 如何在 Google Compute 中取消 Sendgrid?
- talend - 如何使用 Talend tRESTClient 组件通过 POST 方法发送 xml 请求
- php - PHP登录只接受静态密码
- php - Laravel - 查询过去 7 天的计数值
- windows - 在某些 Windows 安装上生成的缩略图被关联程序的图标否决
- python - 如何从 Web 访问我的 Gunicorn 提供的 Flask 应用程序?