1楼:功诚蹉燕
perms
产生所有可能的排列语法p
=perms(v)p=
perms(v),这里v是一个长度为n的行向量,此函数产生v中这n个元素的全排列矩阵,每行为一个排列。矩阵p包含有n!
2楼:真
clear;clc
n=4;
m=3;
x=nchoosek(1:n,m);
y=cell2mat(arrayfun(@(k)perms(x(k,:)),1:nchoosek(n,m),'uniformoutput',0)')
z=nchoosek(n,m)*prod(1:m)
matlab的全排列问题
3楼:匿名用户
哈哈,我用的是"递增进位制数法"(方法源自网上)**如下:
%%%%%%%%%%%%以下计算出新的排列%%%%%%%%%%%%%%% author by wacs5
%% 排列的总个数为n!
%% 在指定位置插入**即可
%clc
%clear
n=3;
n_1=prod(1:n);
allorder_k=zeros(1,n-1);
ticfor allorder_m=1:n_1 %产生n!个排列
allorder_flag=zeros(1,n);
allorder_p=zeros(1,n);
for allorder_i=1:n-1
position=n-allorder_k(allorder_i);
allorder_j=n;
while(allorder_j>=position)if (allorder_flag(allorder_j)==1)position=position-1;
endallorder_j=allorder_j-1;
endallorder_p(position)=n+1-allorder_i;
allorder_flag(position)=1;
endfor allorder_i=1:nif (allorder_flag(allorder_i)==0)allorder_p(allorder_i)=1;
break;
endend
%%%%以下更新k
for allorder_i=1:n-1
allorder_k(n-allorder_i)=mod(allorder_k(n-allorder_i)+1,allorder_i+1);
if (allorder_k(n-allorder_i)~=0)break;
endend
%%%下面,可以引用allorder_p进行相关处理allorder_p
endtoc
matlab 全排列问题
4楼:匿名用户
用笨办法直接编程的 不知道有没有现成的函数 你可以再查一下 数组b就是你要求的结果
a=[1 2 3 4];
e=1;
for i=1:4
for j=1:4
for l=1:4
b(e)=a(i)*100+a(j)*10+a(l);
e=e+1;
endend
endb
在matlab中、如何进行全排列
5楼:匿名用户
a=perms([1 2 3 4 5 0 0]);
a1=find(a(:,1)==0);a2=find(a(:,7)==0);
aa=union(a1,a2);
a(aa,:)=;
da=diff(a,1,2);
[i,j]=find(da==0);
a(i,:)=;
matlab排列组合问题
6楼:匿名用户
1、数据都是[n1 n2]这种形式?比如n=10,对应的就是[101 102]?
2、最后这句话【从这些数列中选取4个然后从选取的4个数列中任选一个列出所有的排列组合】不明确,详细说明一下。
matlab 排列组合问题 ,**等~
7楼:匿名用户
这是最容易理解的方法了,虽然复杂点
a =[3 0 1 1 2 3 0;
4 3 6 3 1 6 6;
5 6 3 7 3 2 2];
b=for i1=1:3
for i2=1:3
for i3=1:3
for i4=1:3
for i5=1:3
for i6=1:3
for i7=1:3
b=[b;[a(i1,1) a(i2,2) a(i3,3) a(i4,4) a(i5,5) a(i6,6) a(i7,7)]];
endend
endend
endendend
8楼:匿名用户
依照下面的方法,你可以实验一下。
matlab做排列组合:比如要abcd的全排列,可以用perms函数
perms(['abcd'])运行结果
dcba
dcab
dbca
dbac
dabc
dacb
cdba
cdab
cbda
cbad
cabd
cadb
bcda
bcad
bdca
bdac
badc
bacd
acbd
acdb
abcd
abdc
adbc
adcb
以下是几个常用的排列、组合与阶乘等函数。
1、***bntns(x,m)
列举出从n个元素中取出m个元素的组合。其中,x是含有n个元素的向量。
2、perms(x)
给出向量x的所有排列。
3、nchoosek(n,m)
从n各元素中取m个元素的所有组合数。 nchoosek(x,m)从向量x中取m个元素的组合
4、factorial(n)
求n的阶乘。
5、prod(n:m) %求排列数:m*(m-1)*(m-2)*…*(n+1)*n prod(1:2:2n-1)或prod(2:2:2n) %
求(2n-1)!!或(2n)!!
6、cumprod(n:m)
输出一个向量[n n*(n+1) n(n+1)(n+2) … n(n+1)(n+2)…(m-1)m]
7、gamma(n)
求n!8、v='n!';
vpa(v)
更详细资料如下:
nchoosek
binomial coefficient or all ***binations
syntax:
c = nchoosek(n,k)
函数描述: 从 n 个元素中 一次选 k 个元素的所有组合数 c(注意,c是一个数值)。
c = n!/((n–k)! k!);
c = nchoosek(v,k)
函数描述: 从 向量 v 中 一次选其中 k 个元素 的所有组合 c (注意:c是一个矩阵,列
数 为 k )
matlab里,特定位置的排列组合问题 10
9楼:穆萨去**
这个问题可以这样解决,增加一个meshgrid()函数,即 x=linspace(0,3,6); y=linspace(0,3,6); [x,y]=meshgrid(x,y) z=4*(x-1).^2-(y+1).^2 运行结果
10楼:尉易壤驷茂典
1、数据都是[n1
n2]这种形式?比如n=10,对应的就是[101102]?
2、最后这句话【从这些数列中选取4个然后从选取的4个数列中任选一个列出所有的排列组合】不明确,详细说明一下。
matlab全排列 急!!
11楼:匿名用户
你的这个是2行11列,要全排列方式为;首先要定义这个矩阵才行。
perms(a(1,:))和perms(a(2,:)),举个例子吧:
a=[1 2 3;4 5 6]
a =1 2 3
4 5 6
>> perms(a(1,:))
ans =
3 2 1
3 1 2
2 3 1
2 1 3
1 2 3
1 3 2
>> perms(a(2,:))
ans =
6 5 4
6 4 5
5 6 4
5 4 6
4 5 6
4 6 5
我相信你明白了,呵呵。
12楼:廖鲜于白霜
function strc=funstr2(str1,str2)clc,
%检验参数是否是字符串
ls1=length(str1);
for i=1:ls1
if ~ischar(str1(i))
error('input must be string');
endend
ls2=length(str2);
for i=1:ls2
if ~ischar(str2(i))
error('input must be string');
endend
slen=ls1+ls2;
a=nchoosek(1:slen,ls1);
[m,n]=size(a);
a1=zeros(m,slen);
for i=1:m
for j=1:n
a1(i,a(i,j))=1;
endend
strc=cell(m,1);
for ir=1:m
ic=1;
i1=0;
i2=0;
output=;
while ic<=slen;
if(i1<=ls1)&(a1(ir,ic)==1);
i1=i1+1;
output(ic)=str1(i1);
else if (i2<=ls2)&(a1(ir,ic)==0)i2=i2+1;
output(ic)=str2(i2);
endendic=ic+1;
endstrc=char(output);end
用matlab 解决m=[-1,-1......,1,1...]的全排列问题,其中1和-1等概率 10
13楼:匿名用户
n=8;
n_1=prod(1:n);
allorder_k=zeros(1,n-1);
ticfor allorder_m=1:n_1 %产生n!个排列
allorder_flag=zeros(1,n);
allorder_p=zeros(1,n);
for allorder_i=1:n-1
position=n-allorder_k(allorder_i);
allorder_j=n;
while(allorder_j>=position)
if (allorder_flag(allorder_j)==1)
position=position-1;
endallorder_j=allorder_j-1;
endallorder_p(position)=n+1-allorder_i;
allorder_flag(position)=1;
endfor allorder_i=1:n
if (allorder_flag(allorder_i)==0)
allorder_p(allorder_i)=1;
break;
endend
%%%%以下更新k
for allorder_i=1:n-1
allorder_k(n-allorder_i)=mod(allorder_k(n-allorder_i)+1,allorder_i+1);
if (allorder_k(n-allorder_i)~=0)
break;
endend
%%%下面,可以引用allorder_p进行相关处理,你的原始数组为data,你可以用data进行引用
%%如果输出的话,比较耗时间,如果不输出的话,10!大约是30秒左右
allorder_p;
endtoc