2016-03-24 11 views
-2

a+b+c=2, a,b,c>=0の場合、整数解を配列で返すことができるMATLAB関数がありますか?すなわち:整数解a + b + c = 2

[0 0 2; 0 2 0; 2 0 0; 0 1 1; 1 0 1; 1 1 0] 

a1+a2+..an=k, ai,k>=0ため、(n-1+k)!/((n-1)!*k!)異なる整数解が存在します。

+1

ますが、そのファイル交換にはいくつかの提出がありますあなたに整数のパーティションを与えるでしょう。 – beaker

答えて

2

Symbolic Math Toolboxにアクセスできる場合は、combinat::compositions MuPAD関数を使用できます。あなたにもMuPADの中で直接それを使用するかcall it from MATLABことができます。

>> x = evalin(symengine, 'combinat::compositions(2, Length=3, MinPart=0)') 
x = 
[ [2, 0, 0], [1, 1, 0], [1, 0, 1], [0, 2, 0], [0, 1, 1], [0, 0, 2]] 

あなたは、その後の数字のセル配列に返されたシンボリックVARSを変換することができます:いいえ

>> x = arrayfun(@double, x, 'Uniform',false) 
x = 
    [1x3 double] [1x3 double] [1x3 double] [1x3 double] [1x3 double] [1x3 double] 

>> celldisp(x) 
x{1} = 
    2  0  0 
x{2} = 
    1  1  0 
x{3} = 
    1  0  1 
x{4} = 
    0  2  0 
x{5} = 
    0  1  1 
x{6} = 
    0  0  2 
+0

ありがとう!ちなみに、軸に沿ってポイントを簡単にミラーリングする方法はありますか?例えば[1 1 1]は8つのミラーを持つことができます:[1 1 1 1 -1 -1 1 1 ...] –

+0

@law_lightうわー、ここでは簡単な実装です:http://pastebin.com/MPGpuHcb。任意の長さで動作します。 – Amro

+0

大きな感謝!!!印象的! –

関連する問題