MATLAB中如何计算这种排列组合

2020-11-17 21:36:42 字数 3386 阅读 5085

1楼:匿名用户

第一题程序:

1-nchoosek(51,18)/nchoosek(54,18)结果:0.7121

第二题程序:

3^18/nchoosek(54,18)

结果:3.9971e-006

如何利用matlab把多组向量排列组合。 25

2楼:匿名用户

生成全排列可以用perms函数,把各向量放在元胞数组中,然后按照全排列来组合即可:

m = ;

i=perms(1:3);

c=mat2cell(i,ones(6,1),3);

r=cellfun(@(ii)[m],c,'uniformoutput',false)

这样得到的结果r是一个元胞数组,其每个元素分别是一个组合出来的向量。

>> cellfun(@(c)fprintf('%s\n',mat2str(c)),r)

[7 8 9 4 5 6 1 2 3]

[7 8 9 1 2 3 4 5 6]

[4 5 6 7 8 9 1 2 3]

[4 5 6 1 2 3 7 8 9]

[1 2 3 4 5 6 7 8 9]

[1 2 3 7 8 9 4 5 6]

matlab如何求16个数的排列组合 10

3楼:

1、数据都是[n1 n2]这种形式?比如n=10,对应的就是[101 102]?

2、最后这句话【从这些数列中选取4个然后从选取的4个数列中任选一个列出所有的排列组合】不明确,详细说明一下。

matlab对于一组已有数据的多种排列组合

4楼:匿名用户

a=1:10;%十个数,可以是其他不同的十个r=zeros(size(a));%每个位置出现的次数,初始化全部为零

fori=1:100

b=a(randperm(length(a)));%b就是a中10个数的随机顺序排列

ind=find(b==1);%找到1的位置,也可以是其他a中的数字r(ind)=r(ind)+1;%对应位置记录加1个end

5楼:匿名用户

x=x(randperm(numel(x)))numel(x)获得变量长度

randperm(n)产生长度为n的随机数列 如:

randperm(4)

ans=

3 2 1 4

x(...) 取得x中相应元素产生新数列

6楼:匿名用户

% matrix_in是输入矩阵

% matrix_out是输出

矩阵function [matrix_out] = randmatrix(matrix_in)

[line column] = size(matrix_in);

matrix_out=zeros(line,column);

for i=1:line

seed=randperm(column);

matrix_out(i,:)= matrix_in(i,seed);

endend

7楼:匿名用户

n=100;

a=;

fork=1:n

a(k,:)=randperm(10);

end;

id=1;

sum(a==id)

8楼:

是的 matlab程序内核是c语言 m文件是ascii码文本

9楼:段干睿思彤瑗

a=randperm(10);

%a为1~10随意打乱顺序

b=[1,3,5,7,9];

%b为一组下标数据

c=a(b);

%将矩阵中对应下标的数据取出,结果存在c矩阵中(c为a矩阵的第[1,3,5,7,9]位)

d=sort(c);

%并对c矩阵由小到大排列,结果存在d矩阵中

在matlab中怎么输入排列组合 5

10楼:疾风动竹

1、***bntns(x,m)

列举出从n个元素中取出m个元素的组合。其中,x是含有n个元素的向量。

2、perms(x)

给出向量x的所有排列。

在matlab中实现向量中元素的排列组合

11楼:匿名用户

其实挺简单。首先,忽略固定为0的几项,直接排列不固定的几项,比如如你所说的1、2、3、4、5、0、0:

x=[1,2,3,4,5,0,0];

y=perms(x);

y就是x的所有排列,perms是系统函数,你可以help一下。

但关键是有两个零,有些排列是重复的,此时使用化简函数unique即可:

y=unique(y,'rows');

y变成了一个排列的矩阵,每一行是一种排列,而且不重复。

最后在需要的位置插入一些0的列向量即可。

求助解决matlab排列组合问题 30

12楼:匿名用户

n=1:210;

k=20;

%数组n中挑k个的组合

n=length(n);

a=zeros(1,k);

i=1;j=1;

while 1

if j<=n

a(i)=j;

if i==k

disp(n(a));%这里只作显示,需要时可以用其它语句替换,比如保存到某个文件

else

i=i+1;

endj=j+1;

else

i=i-1;

if i==0

break;

endj=a(i)+1;

endend

这个程序只要你有足够的时间就可以把所有的组合全部都列出来,但是因为个数太多,一楼已经分析过,要看到全部显示完毕你这辈子是没指望了,厌烦了就ctrl+c终止程序吧。

13楼:小mm爱流氓

10的100次方,阿基米德说这个数字比全宇宙的沙子还多。你怎么不算这个数字呢

14楼:不畏严寒

运行不了,要死机了。

matlab 排列组合程序

15楼:真

组合命令:nchoosek,例子

nchoosek(1:5,3)%在[1 2 3 4 5]里取3个的全部组合

然后你可以对每一种组合(每一行)进行相应的计算即可