对于等式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!)
个不同的整数解决方案。
答案 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