MATLAB,嵌套循环不适用于第二次迭代

时间:2013-12-02 04:01:11

标签: matlab for-loop nested-loops

我的代码如下:

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)。

1 个答案:

答案 0 :(得分:1)

我的问题在于这条线,我相信:

ones = find(T(:,c));

您正在用变量覆盖MATLAB函数ones。这意味着语句ones(b,1)将被评估为variable(5,1),它只会抓取ones变量的第5个元素,而不是生成1的向量。

有(至少)两种可能的解决方案:

  1. 重命名ones变量。
  2. x循环结束时,添加一行clear ones