1

xの各要素が標準化された正規分布に従う30 ベクトルxがあります。したがって、Matlab では、

私は持っている:

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

ここで、ベクトルxから 30*30=900 要素を作成して、次のように定義された 900 ベクトルCを作成します。

ここに画像の説明を入力

2 つの変数 (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を得たいと思っています。これを行列として書き直します。1 つではなく 2 つのインデックス k と l を使用する理由は、最終的にこれらのインデックスがそのような行列の (k,l) エントリを示すようにするためです。C = [ 行 1 行 2 行 3 ... 行 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 に答える