我的代码如下:
clc; close all; clear all;
k = 10; N = 50; f = 0.1; b = round(f*N);
for x = 1:2
R = []; W = zeros(N,N); rand_vec = [];
for i = 1:k+1
rand_vec = [ones(b,1); zeros(N-b,1)];
rand_vec = rand_vec(randperm(N));
T(:,i) = rand_vec;
end
for c = 1:k
for r = 1:N
if T(r,c+1) == 1
ones = find(T(:,c));
W(ones,r) = W(ones,r) + 1;
end
end
W(find(W)) = 1;
end
for j = 1:k
RVT = T';
R = [R; RVT(j,:)*W];
end
R(find(R<5)) = 0;
R(find(R>=5)) = 1;
E = sum(length(find(R))-length(find(RVT(2:11,:))));
end
使用变量x的外部for循环内的所有内容都适用于第一次运行。在for循环的第二次迭代中,我收到以下错误消息:
指数超出矩阵维度。
Error in Untitled4 (line 7)
rand_vec = rand_vec(randperm(N));
我不确定如何解决这个问题。当我设置x == 1时,代码工作正常。该部分代码应该生成一个矩阵(N乘以k + 1),其中包含随机间隔的0和1,频率为(f)。
答案 0 :(得分:1)
我的问题在于这条线,我相信:
ones = find(T(:,c));
您正在用变量覆盖MATLAB函数ones
。这意味着语句ones(b,1)
将被评估为variable(5,1)
,它只会抓取ones
变量的第5个元素,而不是生成1的向量。
有(至少)两种可能的解决方案:
ones
变量。x
循环结束时,添加一行clear ones
。