用于循环迭代

时间:2013-11-05 15:01:13

标签: matlab

n=5; 
h=[1;2;3;4];  
x = [zeros(1,n) randn(1,n) zeros(1,n)];
t(1,:) = [x(n+1:-1:(length(h)-1))];


for k=2:n
    t(k,:) = [x(n+k:-1:(length(h)-1))];  
end

for循环中有什么问题吗?因为我的第一次迭代创建我的行向量没有问题,但是当它出现在for循环中时我似乎可以使循环运行并且我得到的错误消息是'Subscripted assignment dimension mismatch'。我似乎无法找到错误

对于我的情况,我应该得到的最终输出如下

[x6 x5 x4 x3; x7 x6 x5 x4; x8 x7 x6 x5;x9 x8 x7 x6;x10 x9 x8 x7;x11 x10 x9 x8]

3 个答案:

答案 0 :(得分:2)

当我跑到它被卡住的地方时,这就是我所看到的:

您的变量t大小为1x4

您尝试在其下方添加一行1x5

的行

显然它不适合。

从你的描述来看,我会说第二行太长了。

答案 1 :(得分:1)

我想你可能想要这样的东西:

t = zeros(n+1,length(h)) % pre-allocate t to an array of zeros of the correct size
for k=1:n+1
    t(k,:) = x(n+k:-1:length(h)+k-2);
end

显然检查指数是否正确(我认为它们是正确的)。

答案 2 :(得分:1)

您可以使用bsxfun

更轻松地完成此操作
n = 5;
k = 4; % number of columns of result
x = [zeros(1,n) randn(1,n) zeros(1,n)]; % your data

t = x(bsxfun(@plus, (1:n+1).', n:-1:n-k+1 )); % result