关于整数解a + b + c = 2

时间:2016-03-24 22:58:52

标签: matlab combinatorics

对于等式a+b+c=2, a,b,c>=0,是否有一个MATLAB函数可以返回数组中的整数解?那就是:

[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 个答案:

答案 0 :(得分: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]]

然后,您可以将返回的符号变量转换为数字的单元格数组:

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