从向量循环使用两个变量

时间:2012-07-13 12:49:02

标签: matlab loops

我有一个30向量, x ,其中 x 的每个元素都遵循标准化的正态分布。 所以在Matlab中,

我有:

for i=1:30;
x(i)=randn;
end;

现在我想从vector创建30 * 30 = 900个元素, x 来生成900矢量, C 定义如下:

enter image description here

我无法正确执行两个变量(k和l)的循环。我有:

for k=1:30,l=1:30;
C(k,l)=(1/30)*symsum((x(i))*(x(i-abs(k-l))),1,30+abs(k-l));
end

它说' ???未定义的函数或方法'symsum'用于类型的输入参数 '双'。

我希望从中获得一个900矢量, C 然后我将重写为矩阵。我使用两个索引k和l而不是一个索引的原因是因为我最终希望这些索引表示这种矩阵的(k,l) - 条目因此重要的是我的900矢量将是以 C = [第1行第2行第3行...第30行]所以我可以使用重塑工具,即

C'=reshape(C,30,30)

任何人都可以帮我解释求和的代码并得到这样的900矢量。

2 个答案:

答案 0 :(得分:2)

让我们试着让它变得有效。

n = 30;
x = randn(n,1);

%# preassign C for speed
C = zeros(n); 

%# fill only one half of C, since it's symmetric
for k = 2:n
   for l = 1:k-1
      %# shift the x-vector by |k-l| and sum it up
      delta = k-l; %# k is always larger than l
      C(k,l) = sum( x(1:end-delta).*x(1+delta:end) );
   end
end

%# fill in the other half of C
C = C + C';

%# add the diagonal (where delta is 0, and thus each
%# element of x is multiplied with itself
C(1:n+1:end) = sum(x.^2);

答案 1 :(得分:0)

在我看来,你想要一个30x30元素的矩阵C. 鉴于你提供的公式我会做

x = randn(1,30)
C = zeros(30,30)
for k=1:30
    for l=1:30
        v = abs(k-l);
        for i =1:30-v
            C(k,l) = C(k,l) + x(i)*x(i+v);
        end
    end
end

如果你真的需要矢量,你可以从矩阵中获取它。