作业帮 > 综合 > 作业

matlab多个长度为3的数组,个数不确定,怎么从每一个数组中取一个数字,得到全排列

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/10 11:47:09
matlab多个长度为3的数组,个数不确定,怎么从每一个数组中取一个数字,得到全排列
假如有3个数组,分别为a b c.其全排列用matlab可以计算出,方法为
[a b c]=ndgrid(a,b,c)
[a(:) b(:) c(:)]
我的数组个数是不确定的,是随着另外的变量发生变化的,
这个不叫全排列吧,应该叫全组合.
 
编了个函数给你:
function C = allcombs(varargin)
n = nargin;
if n < 2, error('Insufficient input'); end
s = '[x1';
for i=2:n
    s = [s sprintf(',x%i',i)];
end
s = [s ']=ndgrid(varargin{:});'];
eval(s);
s = '[x1(:)';
for i=2:n
    s = [s sprintf(',x%i(:)',i)];
end
s = [s ']'];
C = eval(s);
 
调用示例:
a = [1 2];
b = [3 4 5];
c = [6 7];
C = allcombs(a,b,c)
 
运行结果
C =
     1     3     6
     2     3     6
     1     4     6
     2     4     6
     1     5     6
     2     5     6
     1     3     7
     2     3     7
     1     4     7
     2     4     7
     1     5     7
     2     5     7