2016-11-05 90 views
3

sympy FiniteSet我是相当新的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}) 

i。即

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

我该怎么做?

+0

你可以直接用自然数相交,但似乎有[错误](https://github.com/sympy/sympy/issues/11827)。 – asmeurer

回答

3

我觉得东西沿着这些路线将做到这一点,从你一点点额外的魔法。

>>> 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的,我已经忘了阅读,直到我看到你的问题中留言。

+1

谢谢!从我的一部分魔术队 从sympy.sets.fancysets进口Naturals0 为d_fixed在路口(s.as_set(),Naturals0()): solution.subs({d:d_fixed}) 编辑:我对不起,我无法格式化:( – maow