2011-02-14 85 views
1

我有一個類似於IntegerPartitions函數的問題,因爲我想列出所有非負整數xi,使得對於給定的整數列表{c1,c2,...,cn}和整數n如何解決在數學中的所有非負整數xi

x1*c1+x2*c2+...+xn*cn=n 

請分享您的想法。非常感謝。

+1

你是不是說右邊的n也是整數c1,c2,...,cn的確切數目?或者,右側可以不同,比如m? x1 * c1 + x2 * c2 + ... + xn * cn == m – 2011-02-14 01:31:44

回答

4

的發現內置函數FrobeniusSolve解決了c1,c2,...,cn是正整數(且右手邊不是n)的情況:

In[1]:= FrobeniusSolve[{2, 3, 5, 6}, 13] 

Out[1]= {{0, 1, 2, 0}, {1, 0, 1, 1}, {1, 2, 1, 0}, {2, 1, 0, 1}, {2, 
    3, 0, 0}, {4, 0, 1, 0}, {5, 1, 0, 0}} 

這是你需要的情況,還是你需要消極的c1,c2,...,cn也?

+0

太棒了!這就是我想要的。 :) – 2011-02-14 01:47:28

1

「使用

n = 10; 
cList = RandomInteger[{1, 20}, n] 
xList = Table[Symbol["x" <> ToString[i]], {i, n}] 

S和係數。然後,如果有一組非負xi解決方案的」構建你的ci列表S,它將被

Reduce[cList.xList == n && [email protected]@Thread[xList >= 0], xList, Integers]