用matlab生成5乘5的随机主对角线对称矩阵,所有元素为0和1,主对角线全为0; 假设矩阵中有6个1,1的分布是随机且对称,其余数皆为0。
请问生成之后怎做回圈,假设run 50次然后作统计图(hist?)?
另外我code有用while而指令,每重复跑几次就会出错,要怎么跳过或重跑?
A=zeros(5,5);
idx=randperm(5*5);
C=triu(A);
B=C-diag(diag(C));
B(idx(1:3))=1;
b=B'+B;
d=length(find(b>1))
while trace(B)~=0 & d>0
A=zeros(5,5);
idx=randperm(5*5);
C=triu(A);
B=C-diag(diag(C));
B(idx(1:3))=1;
b=B'+B;
d=length(find(b>1))
end
b
矩阵条件我是用while指令去做,while trace(B)~=0 & d>0,但几十次就会有一次没有达到条件就显示结果,不知道该怎么解决。
希望 loop 50次,能出现50个所需的矩阵。
1、是用for指令去run多次.
2、"每重复跑几次就会出错”,是指矩阵中1的数目不是6,且有的数值变为2,d>0就直接跑出结果。
3、抱歉暂时不用,后面还有code是拿来ID和做值用(系统生物),还有点混乱。
目前困扰的是结果错误和循环问题,用while设的条件错误(trace(B)~=0 & d>0)仍旧跑出。
希望运行50次,能出现50个需要的矩阵。
1、你的多个要求似乎都没有在程序中体现出来:
(1)“1的数目不是6”这个要求体现在哪里?
(2)运行50次在哪里?
(3)抱歉,while循环的条件(trace(B)~=0 & d>0)我没看明白什么意思。
2、运行50次的矩阵是否都要保存下来,以便后续进行统计?如果是,可考虑采用以下做法之一:
(1)使用三维数组,每一个Page保存一个矩阵;
(2)使用cell数组保存,每一个cell保存一个矩阵。
3、我不很确定,你对矩阵的要求是不是这样:
(1)5x5对称阵;
(2)所有元素为0或1;
(3)对角线元素为0;
(4)25个元素中,共有6个1,其余19个都是0。
如果上述理解无误,感觉你生成矩阵的思路存在问题。你的生成算法姑且不论是否出现你说的错误,仅仅均匀性问题恐怕就很难保证。
换一种思路:既然对称且对角线为1,那么实际上就是在对角线下面的10个元素中设定三个为1的元素,其位置随机,换言之,就是10取3的随机抽样问题。关于随机抽样,我前几天刚好回答过一个人的提问,见参考资料的链接。
祝好运。