作业帮 > 数学 > 作业

如何在MATLAB下构造伯努利矩阵?

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/28 19:24:58
如何在MATLAB下构造伯努利矩阵?
构造一个M*N的伯努利矩阵,其中每个元素随机的取1或者-1,且取1和-1的概率各为1/2,这里1/2并不是说一定有一半是1,一半是-1,就像抛硬币一样,正反面的概率都为1/2,但是抛10次的话也许有6次是正面,4次是反面.
是先构造一个N*N的伯努利矩阵,然后再随机的从中选取M行,得到自己想要的M*N的矩阵。
N = 10;
A = randint(N,N,[0 1]);
A(A==0) = -1;
M = 8;
B = A(1:M,:)
再问: 最后一行的B=A(1:M,:);不符合要求啊,您这么做的话就是取矩阵A的前8行,而我的要求是取矩阵A的随机8行啊!!求指点。
再答: N = 10; A = randint(N,N,[0 1]); A(A==0) = -1; M = 8; %B = A(1:M,:) % 在 N 行中随机产生 2 行,删除掉 B = A; id = arrayfun(@(x) randint(1,1,[1 x]),N:-1:(M+1)); % 考虑到产生的随机行有可能重复,所以用 for 循环 for k = 1:length(id) B(id(k),:) = []; end; disp(B)
再问: 我觉得这样更简单: N = 10; A = randint(N,N,[0 1]); A(A==0) = -1; M = 8; B = zeros(M,N); index=randperm(N); for i=1:M B(i,:)=A(index(i),:); end 您看还行?
再答: 是的可行。不过取出的永远是 A 的 1-8 行,只是把顺序打乱了。