我在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
由于
答案 0 :(得分: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
在我注意到评论中的更正的每个地方,您可以选择仅使用{}
语法,然后一切都会有效,但数组将是单元格数组。通常这对于这样的数值计算是不希望的。
答案 1 :(得分:0)
您应该使用y(i)
代替y{i}
来访问向量的第i个位置。