2016-11-05 52 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