【发布时间】:2013-06-05 12:51:04
【问题描述】:
在this answer 中解释了如何避免args 在诸如Mul、Add 等SymPy 类中排序。
对于新创建的类like this one explained here,当乘以sympy.core.numbers.Float、sympy.core.numbers.Pi 或sympy.core.numbers.Integer 时,它可以转到右侧,例如,给出:
print D(x) * 1.
1.0*D(x)
原始表达式在计算时给出0.,而新表达式给出D(x)。
为了让这个微分算子正常工作,它必须保持在左侧:
print D(x) * 1.
D(x)*1.0
是否有任何隐藏参数,例如 _op_priority 用于更改 __mul__() 优先级,告诉 SymPy 更靠左或靠右的类型?
【问题讨论】:
-
这个问题本身没问题,但如果你用它来创建一个微分运算符对象,你可能做错了。首先,对微分运算符使用乘法是对符号的不一致滥用。另外这种方法不能清楚地表示嵌套的微分算子或常数和微分算子之和等。而且微分算子已经在
diffgeom模块中实现。 -
感谢您的评论!我在使用这个微分运算符时遇到了很多问题,但到目前为止它一直在工作。你知道如何强制给定类在 SymPy 中保持在左侧/右侧吗?
-
我不知道足够的细节来写这个作为答案,但你可以尝试使用
commutative=False。我真的不喜欢这种方法,并希望在未来的 sympy 版本中将其删除(没有这样的计划),但如果您知道自己在做什么,请继续尝试。 -
“左侧”和“右侧”是什么意思?
-
@asmeurer 我更新了这个问题。如果您有任何其他问题,请告诉我...
标签: python expression sympy symbolic-math symbolic-computation