簡體   English   中英

我如何獲得移動平均線?

[英]How do I get a moving average?

我想從這樣的數字數組中獲得 5 天移動平均線。

數字數組:11、12、13、14、15、16、17

5日均線首日:(11 + 12 + 13 + 14 + 15) / 5 = 13

5日均線的第二天:(12 + 13 + 14 + 15 + 16) / 5 = 14

5日均線的第三天:(13 + 14 + 15 + 16 + 17) / 5 = 15

int[] arry = {11,12,13,14,15,16,17};
int sum = 0;
    
for(int j = 0; j < 5; j++) {
    sum += arry[j];
    System.out.println(sum);
}
    
System.out.println();
int average = sum / 5;
System.out.println("Sum: " + sum);
System.out.println("Average: " + average);

我能夠獲得第一個平均值,但對如何實現循環以獲得下一組平均值感到迷惑?

請參閱以下經過測試的代碼(@ajb 的方法更優雅,但為了簡單起見,我使用了 @zapl 的想法):

public static void main(String[] args) {
    int[] arry = { 11, 12, 13, 14, 15, 16, 17 };
    int size = 5;

    for (int i = 0; i + size <= arry.length ; i++)

        int sum = 0;
        for (int j = i; j < i + size; j++) {
            sum += arry[j];
            System.out.println(sum);
        }

        System.out.println();
        int average = sum / 5;
        System.out.println("Sum: " + sum);
        System.out.println("Average: " + average);
    }
}

公共類移動平均{

public static void main(String[] args) {
    double[] array = {1.2, 3.4, 4.5, 4.5, 4.5};

    double St = 0D;
    for(int i=0; i<array.length; i++) {
        St = movingAvarage(St, array[i]);
    }
    System.out.println(St);

}

private static double movingAvarage(double St, double Yt) {
    double alpha = 0.01, oneMinusAlpha = 0.99;
    if(St <= 0D) {
        St = Yt;
    } else {
        St = alpha*Yt + oneMinusAlpha*St;
    }
    return St;
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM