GNU Octave에서 for 루프를 사용하지 않고 벡터의 n 일 지수 이동 평균을 계산하려고합니다.벡터화 된 지수 이동 평균을 옥타브 단위로 수행
for 루프를 사용하여이 작업을 수행 할 수 있지만 비효율적입니다. 필터 함수를 사용하고 싶습니다만, 올바르게 작동하려면 어떻게 해야할지 모르겠습니다.
GNU Octave에서 for 루프를 사용하지 않고 벡터의 n 일 지수 이동 평균을 계산하려고합니다.벡터화 된 지수 이동 평균을 옥타브 단위로 수행
for 루프를 사용하여이 작업을 수행 할 수 있지만 비효율적입니다. 필터 함수를 사용하고 싶습니다만, 올바르게 작동하려면 어떻게 해야할지 모르겠습니다.
스레드
http://octave.1599824.n4.nabble.com/vectorized-moving-average-td2132090.html
에서 함께 비트를 조립할 후 I 옥타브의 필터 기능을 이용하여이 기능을 내장.
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
은 지수 이동 평균을 계산하는 숫자의 열 벡터입니다. window
은 일 수의 정수입니다. 12를 사용했습니다.
다음은이 함수에 대한 수학적 설명입니다.
http://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
주 alpha
로 (n
가 window
또는 일의 번호입니다)하지만, alpha
의 값이 내 요구에 맞는 때문에 나는 1/n
를 사용하는 페이지 2/(n+1)
를 사용하는. 필요에 따라 alpha
을 조정하십시오.
또는 입력/출력 벡터의 치수가 일치해야하는 경우가 있습니다. movingEMean
함수의 마지막 줄에 meanV = [NaN(window-1,1); meanV];
을 추가하여 유효하지 않은 값을 NaN
으로 채 웁니다. 대략적인 추측을 원할 경우 simpleAvg
으로 채울 수도 있습니다.