使用新值填充向量并向左移动

时间:2015-04-28 06:18:22

标签: matlab

我正在尝试创建一个永久向量并添加新值(标量),直到向量已满。然后所有新值x将替换最后一个值,并将所有其他值左移1,以便向量的第一个值离开它。矢量开头是空的。

更新

  

所以在开始时,向量为空[]

     

当我第一次运行该函数时(x = 1):1

     

运行该功能10次后将是这样的:1 2 3 4 5 6 7 8 9 10

     

下次将是这样的:2 3 4 5 6 7 8 9 10 11

     

依此类推:3 4 5 6 7 8 9 10 11 12

x只是一个不像上面那样渐进的新值。

这是我到目前为止所做的,但我得到了错误

function [ b ] = buffer( x )

persistent A;
A = int16.empty(10,0); % preallocate
for pos=1:10
   [ A(1:pos) x A((pos+1):end) ];
    b=A

 end
  

错误:索引超出矩阵维度。缓冲区出错(第14行)[   A(1:pos)x A((pos + 1):end)];

因为我有白发,所以这不是家庭作业,而是我自己学习新东西时的好奇心。一些帮助解决这个问题将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么此代码将有所帮助,

function b = buffer(x) 
persistent A;
if isempty(A)
    A = int16.empty(1,0); % preallocate
end
A = [A x];
if length(A) > 10
    A(1 : length(A) -10) = [];
end
b = A;
end

更简单的方法就是这样,

function b = buffer(x)
persistent A;
if isempty(A)
    A = zeros(1,10); % preallocate
end
A = [A(2:end) x];
b = A; 
end

如果您在A未填充时不注意零。