Несколько незначительных замечаний:
Итак, в основном ваша "функция" v
является дискретной оценкой некоторой функции за один шаг, а не истинной функцией, но это не совсем так. здесь актуально.
Как указано в комментариях выше, вы должны вычислить v для всех временных шагов и агрегировать возведенные в квадрат значения, затем суммировать их за пределами l oop и нормализовать путем деления на len(v)
.
Также неясно, почему при итерации i
вы вычисляете v[i]
, но соответствующее вычисленное вами квадратное значение равно v[i-1]
в квадрате. Следует использовать тот же индекс на той же итерации l oop, иначе вы, скорее всего, пропустите элемент.
Я бы сказал, что причина в том, что результат бесполезен, заключается в том, что root -средний квадрат на самом деле никогда не используется для выходных данных функции (в данном случае RMS - это просто некое полезное средство, которое придает дополнительный вес выбросам); скорее RMS обычно используется для ошибки или дисперсии выходов этой функции. Среднеквадратичная ошибка или дисперсия говорит вам, насколько далеко в исходных единицах функции среднее значение функции отличается от среднего значения?). Обратите внимание, что это действительно важный показатель c, только если вы ожидаете, что значение v будет постоянным.
Учитывая все это, трудно сказать из вашего вопроса, каково ваше намерение и что вы на самом деле пытаясь сделать с этой информацией, так что я буду догадываться, что вас действительно волнует, насколько значение v отличается от среднего. В этом случае вы можете использовать среднеквадратичное отклонение от среднего значения v
, рассчитанного так:
for i in range(1,len(t)):
#calculate v[i] here, omitted for simplicity
# get mean value
mean = sum(squares)/len(squares)
# you want to get the squared value of the difference, not the value itself
squared_diffs = [(item - mean)**2 for item in v)]
# get mean squared diff
ms_diff = sum(squared_diffs) / len(squared_diffs)
# return root of mean squared diff
rms_diff = np.sqrt(ms_diff)
return v,area,rms_diff
Опять же, это полезно, только если вы ожидаете, что выходные данные v
будут постоянными. Если нет, вы попытаетесь подогнать к функции другую модель (линейную, квадратичную c и др. c.), А затем рассчитать среднеквадратичную ошибку. Вопрос был бы гораздо понятнее, если бы вы указали цель этого расчета.