我有一个30向量, x ,其中 x 的每个元素都遵循标准化的正态分布。 所以在Matlab中,
我有:
for i=1:30;
x(i)=randn;
end;
现在我想从vector创建30 * 30 = 900个元素, x 来生成900矢量, C 定义如下:
我无法正确执行两个变量(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矢量。
答案 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
如果你真的需要矢量,你可以从矩阵中获取它。