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

您应该使用y(i)y{i}来访问向量的第 i 个位置。

于 2012-04-17T17:05:36.877 回答