我试图在sympy中创建实值的变量,因为它只有实部,而不是复杂的,没有虚部。我使用的是Sympy1.0、iPython5.3.0和Python2.7.13。在
In [48]: x = Symbol('x', real=True)
In [49]: x.assumptions0
Out[49]:
{'commutative': True,
'complex': True,
'hermitian': True,
'imaginary': False,
'real': True}
In [50]: x * conjugate(x)
Out[50]:
2
x
结果是正确的,但是它说complex
和{
然后是一堆回溯信息。显然,这些假设在某种程度上相互冲突,我一定是误解了它们的含义。在
如果我试图确保complex=False
我得到:
In [52]: x = Symbol('x', complex=False)
In [53]: x.assumptions0
Out[53]:
{'algebraic': False,
'commutative': True,
'complex': False,
'composite': False,
'even': False,
'imaginary': False,
'integer': False,
'irrational': False,
'negative': False,
'noninteger': False,
'nonnegative': False,
'nonpositive': False,
'nonzero': False,
'odd': False,
'positive': False,
'prime': False,
'rational': False,
'real': False,
'transcendental': False,
'zero': False}
In [54]: x * conjugate(x)
Out[54]:
_
x⋅x
这清楚地表明它把它当作一个复杂的值来处理。在
我做错什么了吗?我真的可以相信real=True
假设变量没有虚部吗?在
这在
sympy
手册中有明确说明,这里:http://docs.sympy.org/latest/modules/assumptions/ask.html?highlight=real#sympy.assumptions.ask.AssumptionKeys.real
尤其是
从数学的角度来看,这是有道理的。在数学意义上,这些“假设”是为了表示符号的属性。所以如果一个数是实数,那就意味着它属于所有实数的集合,这是复平面的一个子集。因此,每一个实数都是一个复数,并且
sympy
与此相关。您应该可以使用Real=True
。在为了回答第二个问题,
conjugate
函数没有对它的输入进行任何类型的类型检查,因为它的非复杂输入无论如何都没有意义,假设没有人会给它传递一个不是复数的值。在非复杂符号的一个例子是非交换变量
(顺便说一句,检查对象假设的正确方法是使用is方法,比如
is_complex
)。在相关问题 更多 >
编程相关推荐