gpt4 book ai didi

python - sy.sympify(str(expression)) 不等于表达式

转载 作者:行者123 更新时间:2023-11-28 17:06:24 26 4
gpt4 key购买 nike

据我了解,str 将 SymPy 表达式转换为字符串,sympify 将字符串转换为 SymPy 表达式。因此,我希望以下内容成立(对于合理的表达)。

>>> sy.sympify(str(expr)) == expr
True

我试过了,对于简单的例子确实是这样(例如,expr = x+y)。但是,当我用下面的表达式尝试时,它不起作用:

import sympy as sy
a = sy.symbols("a")
A = sy.Matrix(3,3, a)
c0,c1,c2 = sy.symbols("c0 c1 c2", positive = True)
c1*c2**2*a(0, 1)**2*a(1, 2)*a(2, 2) - c1*c2**2*a(0, 1)**2*a(2, 2)**2 - c1*c2**2*a(0, 1)*a(0, 2)*a(1, 1)*a(2, 2) + c1*c2**2*a(0, 1)*a(0, 2)*a(2, 1)*a(2, 2) - c1*c2**2*a(0, 1)*a(1, 1)*a(1, 2)*a(2, 2) + c1*c2**2*a(0, 1)*a(1, 1)*a(2, 2)**2 + c1*c2**2*a(0, 2)*a(1, 1)**2*a(2, 2) - c1*c2**2*a(0, 2)*a(1, 1)*a(2, 1)*a(2, 2) - c1*a(0, 0)**2*a(1, 1)*a(2, 1) + c1*a(0, 0)**2*a(2, 1)**2 + c1*a(0, 0)*a(0, 1)*a(1, 1)*a(2, 0) - c1*a(0, 0)*a(0, 1)*a(2, 0)*a(2, 1) + c1*a(0, 0)*a(1, 0)*a(1, 1)*a(2, 1) - c1*a(0, 0)*a(1, 0)*a(2, 1)**2 - c1*a(0, 0)*a(1, 1)**2*a(2, 0) + c1*a(0, 0)*a(1, 1)*a(2, 0)*a(2, 1) - c2**2*a(0, 0)*a(0, 1)*a(1, 2)*a(2, 2) + c2**2*a(0, 0)*a(0, 1)*a(2, 2)**2 + c2**2*a(0, 0)*a(0, 2)*a(1, 1)*a(2, 2) - c2**2*a(0, 0)*a(0, 2)*a(2, 1)*a(2, 2) + c2**2*a(0, 1)*a(1, 0)*a(1, 2)*a(2, 2) - c2**2*a(0, 1)*a(1, 0)*a(2, 2)**2 - c2**2*a(0, 2)*a(1, 0)*a(1, 1)*a(2, 2) + c2**2*a(0, 2)*a(1, 0)*a(2, 1)*a(2, 2) + c2*a(0, 0)**2*a(1, 2)*a(2, 1) - c2*a(0, 0)**2*a(2, 1)*a(2, 2) - c2*a(0, 0)*a(0, 1)*a(1, 2)*a(2, 0) + c2*a(0, 0)*a(0, 1)*a(2, 0)*a(2, 2) - c2*a(0, 0)*a(1, 0)*a(1, 2)*a(2, 1) + c2*a(0, 0)*a(1, 0)*a(2, 1)*a(2, 2) + c2*a(0, 0)*a(1, 1)*a(1, 2)*a(2, 0) - c2*a(0, 0)*a(1, 1)*a(2, 0)*a(2, 2)

有人能告诉我为什么它对这个表达式不起作用吗?

PS:我知道我应该举一个最小的工作示例,但我只是没有找到表达式的哪一部分导致了问题。

最佳答案

一个最小的例子是

x = sy.symbols("x", positive=True)
expr = 2*x
sy.sympify(str(expr)) == expr # False

这很有道理:expr 的字符串表示形式,即 "2*x",没有关于 x 为正数的信息。因此,sy.sympify(str(expr)) 创建了一个名为“x”并带有默认假设的新符号。这是与原始符号不同的符号。

如果没有正假设,比较将返回 True。

保持正假设的一种方法是使用 locals 字典明确说明字符串中的字符“x”表示现有符号 x:

x = sy.symbols("x", positive=True)
expr = 2*x
sy.sympify(str(expr), locals={"x": x}) == expr # True

关于python - sy.sympify(str(expression)) 不等于表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50694693/

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