2016-12-21 17 views
0

Я использовал это раньше, но просто не могу его запомнить, и не могу найти его нигде.нужен код C, чтобы получить средневзвешенное значение, где последнее значение взвешивается дважды, как и все предыдущие?

Это среднее значение, когда самое новое значение имеет в два раза больше веса всех предыдущих значений (в сочетании), так что с течением времени самые старые значения имеют меньший эффект. И у меня недостаточно памяти для хранения старых значений.

ПОЛУЧИТЬ СРЕДНЯЯ:

int sum=0; 
int n = 0; 
float aver = 0; 
for(;;){ 
    float new_value = some_function(); 
    sum += new_value; 
    ++n; 
    aver = sum/n; 
} 

Но как я получаю в среднем где new_value взвешенной в два раза взвешивание предыдущего среднего?

float aver = 0; 
for(;;){ 
    float new_value = some_function(); 
    aver = aver * ??? + new_value * ???; 

} 
+3

'кляча = (кляча + 2 * new_value)/3;' –

+0

К «в два раза вес всех предыдущих значений» вы имеете в виду в два раза больше, чем * комбинированные * веса всех остальных или два раза столько же, сколько значение * last *? –

+0

Дважды больше, чем последнее значение. –

ответ

3

скользящее среднее, где новейшее значение имеет в два раза больше веса всех предыдущих значений, ...

, как я получаю в среднем где new_value взвешенной в два раза взвешивание предыдущий средний?

Вычислить специальное среднее значение по сумме и последним.

int sum = 0; 
int n = 0; 
float average_special = 0.0; 
for(;;) { 
    float new_value = some_function(); 
    sum += new_value; 
    ++n; 
    average_special = (sum + new_value)/(n+1); 
} 
+0

Это переполнение очень быстро .. –

+1

@EugeneSh. Сомнительное переполнение является проблемой, учитывая, что OP хочет получить ответ на основе _all previous_, что подразумевает, что суммирование всех выборок не является проблемой диапазона. Во всяком случае, скорее всего, возникнет проблема с высокой точностью. Верно, что среднее значение больше похоже на «average = (1-tau)» average + tau * sample' [Low-pass_filter] (https://en.wikipedia.org/wiki/Low-pass_filter#Discrete-time_realization), но OP не спрашивал об этом – chux

+0

Но, похоже, со временем new_value будет все меньше и меньше влиять на average_special. Мне нужно новое значение, чтобы иметь TWICE, в среднем, как и все предыдущие значения. –

 Смежные вопросы

  • Нет связанных вопросов^_^