矩阵的半随机化

时间:2014-05-08 09:09:32

标签: matlab function random matrix

我创建了矩阵:A随机数为1-8,每行每行重复4次,A有6个,32个列。我知道有更优雅的方法可以做到这一点,但我是一个matlab初学者,因此我使用了我的知识......

A1 = [1:8,1:8,1:8,1:8];
A1 = A1(randperm(length(A1)));
A2 = [1:8,1:8,1:8,1:8];
A2 = A2(randperm(length(A2)));
A3 = [1:8,1:8,1:8,1:8];
A3 = A3(randperm(length(A3)));
A4 = [1:8,1:8,1:8,1:8];
A4 = A4(randperm(length(A4)));
A5 = [1:8,1:8,1:8,1:8];
A5 = A5(randperm(length(A5)));
A6 = [1:8,1:8,1:8,1:8];
A6 = A6(randperm(length(A6)));
Aall(1,:)=A1;
Aall(2,:)=A2;
Aall(3,:)=A3;
Aall(4,:)=A4;
Aall(5,:)=A5;
Aall(6,:)=A6;

现在我想确保" Aall"中每一行的第一个元素。使用函数不等于其他行的所有其他第一个元素(或:矩阵的第一列以不同的数字开头)。我很难创建这个函数......任何帮助都是值得赞赏的!并且不允许在一行(例如5 5)中连续重复相同的元素。如何在一个函数中实现它?

1 个答案:

答案 0 :(得分:0)

我会提出这个解决方案

for j=2:6
    while max(Aall(j,1)==Aall(1:j-1,1))
        z = randperm(size(Aall,2));
        Aall(j,:)=Aall(j,z);
    end;
end;

在这里,我们从第一列中的一个元素转到另一个元素,并将其与所有前面的元素进行比较。如果发现巧合,那一行的元素将重新排列,直到我们得到一个与其他元素不同的值。