排列:perms(v)
组合:combntns(v,k)
计算组合数:nchoosek(n,k)%就是C(n,k)
[注:
(1),要求v的长度不超过15。
(2),如果v是向量,则nchoosek(v,k)与combntns(v,k)等价,也要求v长度不超过15。]
另外有时会需要产生笛卡尔积,还不知道matlab中有没有现成函数,下面是一个递归程序:
function rs=Desc(set,k) %求set的k次笛卡尔积 if k==1 rs=cell2mat(set'); return; end rs=[]; for i=1:length(set) mat=Desc(set,k-1); mat=[set{i}.*ones(size(mat,1),1),mat]; rs=[rs;mat]; end end |
如:
>> Desc({'0','3'},3)
ans =
000
003
030
033
300
303
330
333
>> Desc({0,3},3)
ans =
0 0 0
0 0 3
0 3 0
0 3 3
3 0 0
3 0 3
3 3 0
3 3 3