【问题标题】:How to specify a non-negative real number in sympy如何在 sympy 中指定非负实数
【发布时间】:2020-03-06 02:21:33
【问题描述】:

我在符号数学中进行了一些大型运算,这花费了太长时间(以我的口味),我想测试将一些假设烘焙到符号中是否会加快速度。自变量为 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 为零的可能性。 documentation 似乎也没有解释参数的确切含义或它们的解释方式。

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

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    所有实数都是复数,但并非所有实数都有虚部;实数的虚部是 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]
    

    【讨论】:

    • 非常感谢!我担心的是 Sympy 可能会将我的变量视为复数,即跟踪实数和虚数,并考虑方程的潜在复杂解,即使我只对实数感兴趣。当然实数是复数的子集,但我想将范围限制为实数,现在我知道 real=True 会这样做。关于非负数:并非在所有字段中 0 都被视为正数 - 非常感谢有关“询问” Sympy 的提示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2020-06-14
    • 2012-05-27
    • 2016-09-03
    • 2023-01-19
    • 1970-01-01
    相关资源
    最近更新 更多