首页 > 解决方案 > 如何在 sympy 中指定非负实数

问题描述

我正在符号数学中进行一些大型操作,这花费了太长时间(不合我的口味),我想测试将一些假设烘焙到符号中是否会加快速度。自变量为 t。

但是,我发现这个:

>>> t = sympy.Symbol('t', positive=True)
>>> t.is_complex
True

这是否意味着 Sympy 假定了复杂的值?同时:

>>> t.is_real
True

什么?这现在是实数还是复数?让我们试着让它明确:

>>> t = sympy.Symbol('t', negative=False, real=True, complex=False)
*** InconsistentAssumptions: {'real': True, 'imaginary': False, 'hermitian': True, 'complex': True, 'commutative': True}, complex=False

所以......我显然不明白符号定义是如何工作的。我想要一个正实数,即不是复数,但出于某种原因,Sympy 似乎坚持认为它必须是复数,而且是 Hermitian 矩阵?或者是(1-元素)厄密矩阵的实标量特例?我认为我没有足够的数学课知道这一点

我也不确定是否positive=True包括t为零的可能性。该文档似乎也没有解释这些参数的确切含义或它们的解释方式。

如果这是相关的:我使用的是 SYmpy 0.7.6。我知道这已经相当老了,但升级不是一种选择,因为程序需要在更新计划不是我决定的机器上运行......

标签: pythonsympy

解决方案


所有实数都是复数,但并非所有实数都有虚数部分;实数的虚部是 0(但这不会使数字不复数):

>>> Symbol('x', real=True).as_real_imag()
(x, 0)

由于所有实数都是复数,因此您不能说它既实数又不复数。考虑实数、有理数和整数可能会有所帮助:所有整数都是有理数(分母为 1),但并非所有有理数都是整数。所有的理性都是真实的,但并非所有的真实都是理性的。

正数、非负数、零、非正数和负数名称具有它们通常的含义。您可以随时要求 SymPy 告诉您它如何查看数字以更好地了解类型:

>>>> from sympy import Tuple
>>> [i.is_positive for i in Tuple(-1, 0, 1)]
[False, True, True]
>>> [i.is_nonnegative for i in Tuple(-1, 0, 1)]
[False, True, True]

推荐阅读