Octave 在倍频程中执行矢量化指数移动平均

Octave 在倍频程中执行矢量化指数移动平均,octave,time-series,vectorization,moving-average,Octave,Time Series,Vectorization,Moving Average,在GNU倍频程中,希望计算向量的n天指数移动平均值,而不使用for循环 我可以用for循环来实现这一点,但效率很低。我想使用filter函数,但我不确定如何使其正常工作。将此线程的位拼接在一起后 我使用Octave的过滤函数构建了这个函数 function meanV = movingEMean(V, window) simpleAvg = mean(V(1:window)); alpha = 1/window; X = V(window:end); X(1) = simple

在GNU倍频程中,希望计算向量的n天指数移动平均值,而不使用for循环


我可以用for循环来实现这一点,但效率很低。我想使用filter函数,但我不确定如何使其正常工作。

将此线程的位拼接在一起后

我使用Octave的过滤函数构建了这个函数

function meanV = movingEMean(V, window)
  simpleAvg = mean(V(1:window));
  alpha = 1/window;
  X = V(window:end);
  X(1) = simpleAvg;
  meanV = filter(alpha, [1 alpha-1], X, simpleAvg*(1-alpha));
end
它以简单的移动平均线为基础
V
是计算指数移动平均数的数字列向量<代码>窗口是以天数表示的整数。我用了12个

下面是这个函数的数学解释

function meanV = movingEMean(V, window)
  simpleAvg = mean(V(1:window));
  alpha = 1/window;
  X = V(window:end);
  X(1) = simpleAvg;
  meanV = filter(alpha, [1 alpha-1], X, simpleAvg*(1-alpha));
end

请注意,页面使用
2/(n+1)
(其中
n
window
或天数)作为
alpha
,但我使用
1/n
,因为
alpha
的值适合我的需要。根据需要调整
alpha


或者,我有时需要输入和输出向量的维度来匹配。我通过添加
meanV=[NaN(窗口-1,1);meanV],用
NaN
填充无效值作为
movingEMean
函数中的最后一行。如果需要粗略估计,也可以使用
simpleAvg
填充它。

将此线程中的位拼接在一起后

我使用Octave的过滤函数构建了这个函数

function meanV = movingEMean(V, window)
  simpleAvg = mean(V(1:window));
  alpha = 1/window;
  X = V(window:end);
  X(1) = simpleAvg;
  meanV = filter(alpha, [1 alpha-1], X, simpleAvg*(1-alpha));
end
它以简单的移动平均线为基础
V
是计算指数移动平均数的数字列向量<代码>窗口
是以天数表示的整数。我用了12个

下面是这个函数的数学解释

function meanV = movingEMean(V, window)
  simpleAvg = mean(V(1:window));
  alpha = 1/window;
  X = V(window:end);
  X(1) = simpleAvg;
  meanV = filter(alpha, [1 alpha-1], X, simpleAvg*(1-alpha));
end

请注意,页面使用
2/(n+1)
(其中
n
window
或天数)作为
alpha
,但我使用
1/n
,因为
alpha
的值适合我的需要。根据需要调整
alpha

或者,我有时需要输入和输出向量的维度来匹配。我通过添加
meanV=[NaN(窗口-1,1);meanV],用
NaN
填充无效值作为
movingEMean
函数中的最后一行。如果需要粗略估计,还可以用
simpleAvg
填充它