A=zeros(100);
n=100*100;
r=randperm(n);
a=(r<=100);
A=a
我这个行吗?我试了下你的,运行报错了,我这个算法是不是均匀分布的随机函数
我运行过了,我的没问题,我的while(shu>=20)这句语句就是用来限制1的数量的,你可以用==,>=或者<=来限制都行,你报错可能是因为直接复制出现非半角的字母情况,建议按照我的直接手打。还有,我的是两个函数,以前面%注释分开的,你建立两个.m文件存储在一个文件夹下,之后直接运行下面的测试文件就行。
我在我的上面测试运行的一组结果为:
A =
0 0 1 0 0
0 0 1 1 0
0 0 0 0 1
0 1 1 0 0
1 1 0 1 1
1 0 0 0 0
0 0 0 0 1
1 0 0 0 0
1 0 0 0 0
1 1 1 1 1
其中1的个数:
shu =
19
PS:我看了你的代码,虽然显示了0,1矩阵,但是无法自己控制0,1的数量,好像与你的要求不太符合。还有randperm(n)函数本身就不是生成的均匀分布的随机函数。他只是随机顺序生成1--n的整数序列。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
你也可以用下面一种方法:
shu=0;%初始化1的计数器
while(shu~=20) %判断当1的数量为20个时,保存结果A
%产生0和1的均匀分布的伪随机整数的新函数矩阵,矩阵为5x6的形式
A=randi([0,1],5,6);
shu=sum(A(:));%计算矩阵A中的所有值的和,即A中1的个数
end
disp('得到的随机矩阵:');
A
disp(['其中1的个数:']);
shu
您好,
a=randperm(10000);
for i=(1:1:10000);
r(1,i)=(a(1,i)<=100);
end;
reshape(r,100,100);
我这个行吗?您那个循环,是直到均匀分布的随机数1的个数为20停止,还是到20个之后后面所有的都为0.能不能给个联系方式 ,谢谢您了。