数组添加错误

时间:2012-04-17 17:03:15

标签: matlab

我在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

由于

2 个答案:

答案 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个位置。