2016-11-05 12 views
3

sympyをかなり新しくしました。私はlinsolve()で線形方程式の系を解こうとしました。これにより、次の2つの行で再現できる解決法が得られます。sympyを制限する方法シンボルを含むFiniteSet

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

私の解決策は、4つの値はすべて正の整数でなければならないという制限に従います。これは、D = 0のために発生した1、2、3、4

私は

私は制限がしたい何
solution.subs({d : 0}) 

で固定D(例えばD = 0)での解を評価することができました有効なものに対する解の集合を自動的に求める。数学的には、\ mathbb {N^0}^4との交わりに相当します。実際には、

for d_fixed in range(5): 
    solution.subs({d : d_fixed}) 

iのような出力を得たいと思います。 e。

{(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

ありがとう! solution.subs({D:d_fixed}) 編集:私は私の部分から魔法がsympy.sets.fancysetsから が交差点でd_fixed(s.as_set()、Naturals0())のためNaturals0 をインポートしました申し訳ありませんが、フォーマットできません:( – maow

関連する問題