窗口移动计算方法
- 例子
- 方法1
- 方法2
- 运行结果:
例子
在很多算法中都会涉及到窗口滑动,比如基于新息序列更新的自适应卡尔曼滤波器算法中便会使用到。
已知一个数列:OCV = [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15],定义窗口长度为5,每次滑动一个数位,编写程序求Prk。以MATLAB为例,有如下两个方法,直接看程序。
方法1
OCV = [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15];
L = 1;
n = 5;
S = 0;
ts = length(OCV);
Error_x = zeros(1,n);
for i = 1:1:ts
if i <= nError_x(1,i) = OCV(i);S = S + Error_x(1,i);Prk = S/i;
elseS = S - Error_x(1,L);Error_x(1,L) = OCV(i);S = S + Error_x(1,L);L = L+1;if L > nL = 1;end Prk = S/n;
end
a = Prk
end
方法2
OCV = [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15];
n = 5;
S = 0;
ts = length(OCV);
Error_x = zeros(1,n);
for i = 1:1:ts
if i <= nError_x(1,i) = OCV(i);S = S + Error_x(1,i);Prk = S/i;
elseS = 0;for j = 1:1:(n-1)Error_x(1,j) = Error_x(1,j+1);S = S + Error_x(1,j);endError_x(1,n) = OCV(i);S = S + Error_x(1,n);Prk = S/n;end
a = Prk
end