Matlab 假设有三个数值 【15,16,17】,现要写出三个数的全部排列,排列的数量从1~5,即总共有3^1+3^2
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/10 05:39:18
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
每一排都是一个数组.
假设有三个数值 【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
每一排都是一个数组.
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矩阵,每个单元都是一个数组
再问: 大神,补充个问题可以么?那个cell数组可以存多少个啊?如果v有20个可能的数剧,然后N也非常大,怎么解决?MATLAB提示放不下啊
再答: 数太多,就不用数组保存,每次产生一个组合就写到文件中
有M个,最多排N个
数据随M,N增长很快
M=20,N=5,就有三百多万众组合
太大的M和N,一个文件都未必能放下
再问: 把p=cell(num,1)换成存文件是么
再问: 大神能教一下怎么写入么?在你之前的程序基础上
再答: v=[15 16 17]; %可选数据
N=5; %最多个数
%以上是输入,下边是计算
M=length(v); %M是可选个数
a=M.^(1:N); %1到N位的排列数
num=sum(a); %全部排列数
fid=fopen('文件名','w');
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
fprintf(fid,'%d\t',v(b));
fprintf(fid,'\n');
end
end
fclose(fid);
再问: mn太大的时间还是存不了 不过还是谢谢你了 (^_^)
再问: 大神 补个简单的问题吧 两个数 1.2, 产生长度为4的全排列, 从1 1 1 1到2 2 2 2,怎么弄
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矩阵,每个单元都是一个数组
再问: 大神,补充个问题可以么?那个cell数组可以存多少个啊?如果v有20个可能的数剧,然后N也非常大,怎么解决?MATLAB提示放不下啊
再答: 数太多,就不用数组保存,每次产生一个组合就写到文件中
有M个,最多排N个
数据随M,N增长很快
M=20,N=5,就有三百多万众组合
太大的M和N,一个文件都未必能放下
再问: 把p=cell(num,1)换成存文件是么
再问: 大神能教一下怎么写入么?在你之前的程序基础上
再答: v=[15 16 17]; %可选数据
N=5; %最多个数
%以上是输入,下边是计算
M=length(v); %M是可选个数
a=M.^(1:N); %1到N位的排列数
num=sum(a); %全部排列数
fid=fopen('文件名','w');
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
fprintf(fid,'%d\t',v(b));
fprintf(fid,'\n');
end
end
fclose(fid);
再问: mn太大的时间还是存不了 不过还是谢谢你了 (^_^)
再问: 大神 补个简单的问题吧 两个数 1.2, 产生长度为4的全排列, 从1 1 1 1到2 2 2 2,怎么弄
从1-5五个数中任取三个数组成可以重复的排列数,有多少组合?
用三个单项式-1,2x,3x^2组成一个整式有多少种可能,全部写出,多项式按字母x的降幂排列
有依次排列的三个数:2,7,5
写出三个数从大到小排列的算法.
有一列数按一定规律排列为1,-3,5,-7,9,…,如果其中三个相邻的数之和为-201,求这三个数?
有一列数按一定规律排列为1,-3,5,-7,9,…,如果其中三个相邻的数之和为-151,求这三个数
有一列数按一定规律排列1、-3、5、-7、9..如果其中三个相邻的数之和为-151求这三个数?用一元一次方程解.
从0,1,2,3,4,5这六个数中任取三个数进行排列,问取得的三个数字能排成三位数且是偶数的概率有多大
从1 2 3 4 5 6 7七个数中选三个不相邻的数总共有多少种取法,要详解
一个数学题:4、-3、2、-1、0、-2、3.的排列有什么规律?后面三个数可能是什么?急,
用三个单项式-1.2x,3x的2次方组成一个整式有多少种可能,全部写出,多项式按字母x的降幂排列
用三个单项式-1.2x,3x^2组成一个整式有多少种可能,全部写出,多项式按字母x的降幂排列