我正在尝试创建一个永久向量并添加新值(标量),直到向量已满。然后所有新值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)];
因为我有白发,所以这不是家庭作业,而是我自己学习新东西时的好奇心。一些帮助解决这个问题将不胜感激。
答案 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
未填充时不注意零。