1

Matlab で畳み込み用に次のコードを書きましたが、通知された行でエラーが発生します。私はMatlabの初心者なので、この質問に答えてください。

function [y] = UmerConv(x,h)

xlen=length(x);
hlen=length(h);

p=1;
for j=1:xlen
    for k=1:hlen
        uinput{p}=x(j)*h(k);
        p=p+1;
    end
end

for i=1:hlen
    if(i==1 || i==hlen)
        y{i}=uinput(i);   // error
    else
        y{i}=uinput(i)+uinput(i+2); // error
    end
end

ありがとう

4

2 に答える 2

2

セル配列構文で uinput に値を割り当てます{}が、後で通常の配列構文で を使用してインデックスを付けますuinput(i)。一貫性を保つ必要があります。中かっこ{}を使用すると、配列はセル配列になり、通常の配列 (かっこのみを使用) とは異なるインデックスが付けられます。

y次に、通常の配列構文だけが必要になると思われる場合は、セル配列構文を使用して、変数 で同じ代入を選択します。

修正されたコードはおそらく次のようになります。

function [y] = UmerConv(x,h)

xlen=length(x);
hlen=length(h);

p=1;
for j=1:xlen
    for k=1:hlen
        uinput(p) = x(j)*h(k); % <-- Changed the {} syntax
        p=p+1;
    end
end

for i=1:hlen
    if(i==1 || i==hlen)
        y(i) = uinput(i);  % <-- Now you access both with () instead of {}
    else
        y(i) = uinput(i) + uinput(i+2); % <-- Same here.
    end
end

コメントで修正を指摘した各場所で、代わりに{}構文のみを使用することもできます。そうすれば、すべてが機能しますが、配列はセル配列になります。通常、これはこのような数値計算には望ましくありません。

于 2012-04-17T17:07:40.267 に答える
0

ベクトルの i 番目の位置にアクセスするには、y(i)代わりにそれ を使用する必要があります。y{i}

于 2012-04-17T17:05:36.877 に答える