matlab中,如何计算一个数组中的各种组合的和(不要重复)?

来源:百度知道 编辑:UC知道 时间:2024/06/27 19:07:37
matlab中,如何计算一个数组中的各种组合的和(不要重复)? 如:[1,3,5]的各种组合的和为[1,3,5,1+3,1+5,3+5,1+3+5]=[1,3,4,5,6,8,9](这里只关心他们组合的和,不必列出如何组合)。是否可以做成一个function,可以就输入的数组,进行相应的处理,并且输入数组的长度是灵活的。万分感谢.本人想出一个矩阵的方法,即[1,3,5;1,3,5;1,3,5].只要列出每个列的不同组合方式,然后将每个矩阵求下三角(上三角也行),再对求得的矩阵进行行求和,但是我做不出如何求每个列的组合方式,即[1,3,5],[1,5,3],[3,1,5],[3,5,1],[5,1,3],[5,3,1],并显示出每个结果是由哪个组合得出的结果啊?

function r=allsubtotal(a)

r=[];
for i=1:length(a);
r=[r sum(nchoosek(a,i).',1)];
end;

r=unique(r);

在命令行输入:
>>SumArray([1 3 5])
即可得到正确结果。其中[1 3 5]可以换成任意的数组。

函数代码如下:

function Y = SumArray(X)
% Edit by Gleafty on May 4th, 2007
[M, N] = size(X);
if M~=1
error('The input of this function must be an array(1*N)!')
end
R = [1];
if N==1
Y = X;
else
for n = 2:N
R1 = [ones(1, 2^(n-1)-1); R];
R2 = [zeros(1, 2^(n-1)-1); R];
R3 = [1 zeros(1,n-1)]';
R = [R1 R2 R3];
end
Y = X * R;
Y = SimpleArray(Y);
end

function Y = SimpleArray(X)
N = length(X);
X1 = sort(X);
Y(1) = X1(1);
m = 1;
for n = 2:N
if X1(n)~=Y(m)
Y(m+1) = X1(n);
m = m+1;
end
end