a55 matlab排列组合_matlab矩阵排列组合

目的是:运行之后输出所有的排列组合情况(即输出常规矩阵),以及对应的计算值。

问题是:现目前的程序只能输出一个组合结果及对应值,不能一次输出所有的组合情况。

请各位大佬指教,谢谢!

%% (1)初始化,随机生成cellA,B是A中每个元素的向量长度,D是A中每个位置的组合数索引

clear;

clc;

row=4;

column=4;

B=zeros(1,row*column);

D=ones(1,row*column);

A={0.5,[0.6,0.7,0.8],[0.1,0.2],0.4;

[0.4,0.3,0.2],0.5,[0.4,0.5],0.1;

[0.9,0.8],[0.6,0.5],0.5,[0.2,0.3];

0.6,0.9,[0.8,0.7],0.5}

for i=1:row

for j=i+1:column

index=(i-1)*column+j;%取出元素下角标   %转换为单索引

B(index)=length(A{i,j});

end

end

B

%% (2)对A取随机,生成randA

randA=cell(row,column);

for j=1:size(A,1)

for k=1:size(A,2)%返回A的第2维的尺寸。

r=randperm(length(A{j,k}));%randperm将一列序号随机打乱,序号必须是整数

randA{j,k}=A{j,k}(r);%rand函数产生由在(0, 1)之间均匀分布的随机数组成的数组。

end

end

randA

%%(3) 罗列所有的组合可能,每种组合对应一个从A中随机取元素生成的矩阵AI,对AI中所有元素求和即的C(i),最终输出C;

% B(find(B==0))=[];

E=[];

E=B(find(B~=0))

num=prod(prod(E));    %组合总数目 %求数组元素的乘积

C=zeros(1,num);         %输出向量

for i=1:num

for j=1:length(D)

rowIndex=ceil(j/column);

columnIndex=j-(rowIndex-1)*column;

AI(rowIndex,columnIndex)=randA{rowIndex,columnIndex}(D(j));

AI(columnIndex,rowIndex)=1- AI(rowIndex,columnIndex);

end

% end

comb=length(D);

while comb~=0

if D(comb)

D(comb)=D(comb)+1;

break;

else

D(comb)=1;

comb=comb-1;

end

end

end

n=4;

sum=0;

for g=1:num  %没有做到矩阵循环效果

for i=1:n-2

for j=i+1:n-1

for k=j+1:n

sum=sum+abs(AI(i,j)+AI(j,k)-AI(i,k)-0.5);

sum;

end

end

end

CI=(4/(n*(n-1)*(n-2)))*sum;

C(1,g)=1-CI;

end

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页