在matlab中、如何进行全排列
发布网友
发布时间:2022-04-22 04:38
我来回答
共1个回答
热心网友
时间:2023-07-15 11:21
修改了一下
不过有要求,那就是,两个数组最大长度不能大于9,
这个代码效率不是很高,但是做几个的排列组合是可以的。
在matlab下输入edit,将下面两行百分号之间的代码复制粘贴进去,保存。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function
range=cmbarrange(A,B)
%下面A,B的长度不能超过9
lenA=length(A);
lenB=length(B);
if
lenA>9
||lenB>9
error('len(array)
must
less
than
10')
return
;
end
%构造字符数组
chA=[];
for
i=1:lenA
chA=strcat(chA,num2str(i));
end
chB=[];
for
i=1:lenB
chB=strcat(chB,num2str(i));
end
%生成各自的全排列
head=perms(chA);
tail=perms(chB);
n1=size(head,1);
n2=size(tail,1);
range=zeros(n1*n2,lenA+lenB);
n=1;
for
i=1:n1
for
j=1:n2
headinfo=head(i,:);
tailinfo=tail(j,:);
for
k=1:lenA
range(n,k)=A(str2num(headinfo(k)));
end
for
k=1:lenB
range(n,lenA+k)=B(str2num(tailinfo(k)));
end
n=n+1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在matlab主窗口中,输入:
cmbarrange([1,3],[5,7,9,120])
就可以了。