1

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

我有:

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

现在我想从向量中创建 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

它说' ??? “double”类型的输入参数的未定义函数或方法“symsum”。'

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

C'=reshape(C,30,30)

任何人都可以帮助我提供求和代码并获得这样一个 900 向量。

4

2 回答 2

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);
于 2012-07-13T13:12:06.530 回答
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

如果你真的需要这个向量,你可以从矩阵中获得它。

于 2012-07-13T13:03:38.307 回答