1
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 循环时,我似乎可以使循环运行并且我得到的错误消息是“下标分配维度不匹配”。我似乎找不到错误

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

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

3 回答 3

2

当我运行它直到它被卡住时,这就是我所看到的:

你有一个t大小为 1x4的变量

您尝试在其下方附加一行大小为 1x5

显然不适合。

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

于 2013-11-05T15:06:11.933 回答
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

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

于 2013-11-05T15:09:48.557 回答
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
于 2013-11-05T23:25:44.267 回答