MATLAB的编程a=zeros(20,75)for i=1:3for j=1:500c1=randint(1,1,[1

问题描述:

MATLAB的编程
a=zeros(20,75)
for i=1:3
for j=1:500
c1=randint(1,1,[1,20]);
b1=randint(1,1,[1,75]);
a(c1,b1)=j;
end
end
a
如何将a矩阵中剩下的0用1到500随机的数替换掉;
1个回答 分类:综合 2014-10-23

问题解答:

我来补答
你是想将20x75的矩阵a,用1到500的随机数填满吗?
那样只要
a=randint(20,75,[1 500]);
就可以了
再问: 在那程序的基础上,使得矩阵a剩下的0用1到500填满,共循环三次
再答: 那就在你的代码之后增加

ind=find(a==0);
a(ind)=randint(length(ind),1,[1 500]);

最后,a还不是20x75个位置都填入 1至500的随机数
为什么要这么麻烦
再问: 能把整个程序完整的写出来吗,这个看不太明白
再答: 你是想要一个矩阵里面1500个数
1到500个数,每个数各三个,然后随机填到矩阵中吗?
再问: 还要确保1到500在同一行都不重复
再答: 一次把条件说完嘛,一个一个的改来改去
再问: 每一行的数都不能重复,这个会出现重复
再答: 带有条件限制的填随机数,难点怎样满足限制条件
由于限制条件是同行不能有相同的数

我们可以考虑3个数3个数地往矩阵里面填数
填数的时候保证这三个数填在不同的行里,以满足限制条件
但是问题是,如果完全随机填数
到最后可能空位都在同一行上,那么就再也找不到满足限制的位置了
所以我们要有个策略:平均分配填充
每次填数都从填充数最少的行里面寻找位置
那么分配都每行的填充数字是平均分配的
到最后就不会出现空位都在同一行的情况了

a=zeros(20,75);
s=zeros(20,1); %每行已经填充的个数,初始都是0
for j=1:500
r=nan;
for i=1:3
R=find(s==min(s)); %找到填充数最小的行
R=R(R~=r); %同一个数的,不能取上一次填充的行
r=R(randi(length(R))); %从中随机选取1行
C=find(a(r,:)==0); %找到该行可以填数的列
c=C(randi(length(C))); %随机选1个位置
a(r,c)=j; %填入j值
s(r)=s(r)+1; %该行填充数加1
end
end
 
 
展开全文阅读
剩余:2000
上一页:合外力做功,