【问题标题】:How to restrict sympy FiniteSet containing symbol如何限制包含符号的 sympy FiniteSet
【发布时间】:2016-11-05 18:05:43
【问题描述】:

我对 sympy 还很陌生。我试图用 linsolve() 求解一个线性方程组。这产生了一个可以用以下两行重现的解决方案。

d = symbols("d")
solution = sets.FiniteSet((d + 1, -d + 4, -d + 5, d))

我的解决方案遵守限制,所有四个值都必须是正整数。这发生在 d = 0、1、2、3、4 时。

我能够使用固定 d(例如 d = 0)评估解决方案

solution.subs({d : 0})

我希望将一组解决方案自动限制为有效的解决方案。数学上等于与 \mathbb{N^0}^4 的交集。在实践中,我想从

获得类似的输出
for d_fixed in range(5):
    solution.subs({d : d_fixed})

我。 e.

{(1, 4, 5, 0)}
{(2, 3, 4, 1)}
{(3, 2, 3, 2)}
{(4, 1, 2, 3)}
{(5, 0, 1, 4)}

我该怎么做?

【问题讨论】:

  • 你可以直接与自然数相交,但似乎有a bug

标签: python-2.7 sympy


【解决方案1】:

我认为这些方面的东西会做到这一点,你需要一点额外的魔法。

>>> from sympy import *
>>> var('d')
d
>>> solution = sets.FiniteSet((d+1,-d+4,-d+5,d))
>>> list(list(solution)[0])
[d + 1, -d + 4, -d + 5, d]
>>> from sympy.solvers.inequalities import reduce_inequalities
>>> reduce_inequalities([0<=d + 1, 0<=-d + 4, 0<=-d + 5, 0<=d],[d])
And(0 <= d, d <= 4)

感谢https://stackoverflow.com/users/1879010/dietrich 的评论,在我看到你的问题之前我一直忘记阅读。

【讨论】:

  • 谢谢!我的魔力来自 sympy.sets.fancysets import Naturals0 for d_fixed in Intersection(s.as_set(), Naturals0()): solution.subs({d : d_fixed}) 编辑:对不起,我可以' t 格式 :(
猜你喜欢
  • 2018-06-04
  • 2013-11-02
  • 2022-07-02
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
相关资源
最近更新 更多