Matlab 假设有三个数值 【15,16,17】,现要写出三个数的全部排列,排列的数量从1~5,即总共有3^1+3^2+...+3^5=363排结果,如下:151617 15 1515 1615 17...17 17 17 17 1617 17 17 17 17每一排都是一个数组.
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/14 11:40:28
Matlab 假设有三个数值 【15,16,17】,现要写出三个数的全部排列,排列的数量从1~5,即总共有3^1+3^2+...+3^5=363排结果,如下:151617 15 1515 1615 17...17 17 17 17 1617 17 17 17 17每一排都是一个数组.
Matlab
假设有三个数值 【15,16,17】,现要写出三个数的全部排列,排列的数量从1~5,即总共有3^1+3^2+...+3^5=363排结果,如下:
15
16
17
15 15
15 16
15 17
...
17 17 17 17 16
17 17 17 17 17
每一排都是一个数组.
Matlab 假设有三个数值 【15,16,17】,现要写出三个数的全部排列,排列的数量从1~5,即总共有3^1+3^2+...+3^5=363排结果,如下:151617 15 1515 1615 17...17 17 17 17 1617 17 17 17 17每一排都是一个数组.
v=[15 16 17]; %可选数据
N=5; %最多个数
%以上是输入,下边是计算
M=length(v); %M是可选个数
a=M.^(1:N); %1到N位的排列数
num=sum(a); %全部排列数
p=cell(num,1);%p是存放结果cell矩阵
ii=1; %存放位置
for n=1:N
for k=1:a(n)
x=k-1;b=zeros(1,n);
for j=1:n
b(n-j+1)=mod(x,M)+1;
x=floor(x/M);
end
p{ii}=v(b);
ii=ii+1; %存放位置加1
end
end
这程序输入在前两行
v是一个向量,表示可以选择的数,可以不止3个
N是最多排列个数,表示可以从v中选1,2,.N个进行排列
而由于取1个,取2个,...取N各排列的数组长度不一致
这里用cell矩阵来存放结果
结果存在p中,p是cell矩阵,每个单元都是一个数组