如何用Matlab生成只含0,1值的随机矩阵,要求限制1的数量
1个回答
2017-08-21
展开全部
%选择函数
function A=xuanze(m,n)
A=zeros();
for i=1:m
for j=1:n
A(i,j)=randperm(2,1)-1;
end
end
end
%测试函数
m=10;
n=5;
A=xuanze(m,n);
shu=sum(A(:));%判断1的数量
while(shu>=20)
A=xuanze(m,n);
shu=sum(A(:));
end
disp('得到的随机矩阵:');
A
disp(['其中1的个数:']);
shu
function A=xuanze(m,n)
A=zeros();
for i=1:m
for j=1:n
A(i,j)=randperm(2,1)-1;
end
end
end
%测试函数
m=10;
n=5;
A=xuanze(m,n);
shu=sum(A(:));%判断1的数量
while(shu>=20)
A=xuanze(m,n);
shu=sum(A(:));
end
disp('得到的随机矩阵:');
A
disp(['其中1的个数:']);
shu
更多追问追答
追问
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
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询