c++ - 您如何计算指数移动平均线的 X° 步长?

标签 c++ algorithm moving-average

我使用基本的指数移动平均线平滑一些数据 filter :

int main ()
{
    double a0 = 0.1;
    double input = 8.0;
    double z = 0.0;

    for(int i=0; i < 200; i++) {
        z += a0 * (input - z);
        std::cout << i  << "° : "<< z << std::endl;
    }
}

由于某些原因,我想每 X (=8) 步执行一次。 事实上,就目前而言,我不知道如何计算每8°输入。我仍然处理每个输入并仅“存储”8°。

如何“节省 CPU”以避免在每一步中进行计算?有没有一个系列可以让我计算出前面 8° 的值?

这是实际的code我有(每一步都很顺利):

int main ()
{
    double a0 = 0.1;
    double input = 8.0;
    double z = 0.0;
    int step = 8;


    for(int i=0; i < 200; i+=8) {
        z += a0 * (input - z);
        std::cout << i  << "° : "<< z << std::endl;

        int j = 1;
        while (j++ < step) {
            z += a0 * (input - z);
        }
    }
}

我想避免将“7个while步骤”变成一个独特的操作。可能吗?

最佳答案

它被称为指数移动平均函数是有原因的:差值(input - z0)是步数的指数递减函数。事实上,经过 N 步后,减少量为 pow(1-a0,N)

现在相关的数学是pow(x,N) == pow(pow(x,8), N/8)

关于c++ - 您如何计算指数移动平均线的 X° 步长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47225704/

相关文章:

c++ - Windows C++ : How can I redirect stderr for calls to fprintf?

c++ - 恐惧的怪异行为

python - 纸笔角色扮演游戏中骰子概率的动态规划

hadoop - 获取错误无法在发出函数中找到符号上下文

sqlite - SQLite 中的移动平均线

c++ - vector 操作和存储到第三个 vector

c++ - 运行 C++ 程序的问题

java - 伽罗瓦域 GF(4) 中乘法的恒定时间

java - 将 ArrayList<String> 数据转换/传输到 String[] 时出现不兼容类型错误

python - 计算移动平均线