【发布时间】:2021-07-29 18:25:22
【问题描述】:
在 sympy 中,我想创建一个常量,例如来表示光速。
因此我用关键字constant=True初始化c。
稍后我想检查一个符号是常量还是变量。
没想到c.is_constant()这个命令输出了False。
c = Symbol( 'c' , constant=True, real=True )
c.is_real # outputs True as expected.
c.is_constant() # outputs False. This is unexpected !
如何检查符号是常量还是变量?
【问题讨论】:
-
SymPy 已经有一个光速常数,但使用普通符号也可以。为什么要区分常量和变量?它会有什么不同?几乎可以肯定有更好的方法来解决您的实际问题。
-
查看
is_constant的代码/文档我发现它没有检查assumptions。因此,像您一样设置该假设并没有什么不同。从文档看来,is_constant在应用于表达式时比应用于单个符号更有意义。假设关键字不受限制。foobar=True是允许的,但只有在我添加某种测试时才有意义。 -
@OscarBenjamin :我想使用函数的线性度:
f( const*x ) = const*f( x ),但如果我面对两个变量的乘积(不是:@ 987654330@。因此我想检查x、y或const是常量还是变量。 -
@hpaulj :感谢提示 is_constant 属性似乎是为复合表达式定制的!这对我来说很有意义!但我还不了解 SymPy 的假设系统。你能给我一个例子,说明如何为符号提供自定义布尔属性,如 foobar,以及如何使用你提到的假设系统检查它?
-
我不认为将符号声明为“常量”是做任何你想做的事情的好方法。我认为如果你问一个关于你的实际问题的问题,你可以得到一个更好的答案,即你想做某种操作,因为你知道你的函数
f可以乘以某些符号而不是其他符号。
标签: python constants sympy linear-algebra symbolic-math