Как рассчитать среднеквадратичное отклонение, если среднее значение неизвестно? Пусть есть некоторый очень, очень большой файл, где в каждой строке числа, для простоты - целые. Рассчитать среднее значения через формулу сумма/кол-во нельзя, т.к. файл огромен, в оперативку сумма не поместится (просто смеритесь с этим!). Поэтому я придумал форму (наверняка не я первый):((i-1) * avg + nextValue) / i гдеi - это текущее кол-во рассчитанных чисел (текущий шаг начиная с 1);avg - текущее среднее значение;nextValue - следующее значение (из файла). Например: 3 3 6 читаем построчно для 3: (0 * 0 + 3) / 1 = 3 для 3: (1 * 3 + 3) / 2 = 3 для 6: (2 * 3 + 6) / 3 = 4 т.е. в любой момент можно остановиться и узнать текущее средн. арифм. значение.Итого: Среднее значение меняется на каждом шаге, а в будущее заглянуть не дано.Вопрос: как узнать среднеквадратичное отклонение, если для него нужно заранее узнать среднее значение? Википедия: Среднеквадратическое отклонениеP.S. Пожалуйста, учтите, что файл очень большой. Представьте себе, самый мощный супер компьютер и SSD диском бесконечно большого объёма (но с ничтожной ОЗУ) будет считывать данные неделями. И остановится он по сигналу, после чего должен сразу же выдать ответ, а не начать считывание повторно (зная среднее значение).
Для рассчета среднеквадратичного отклонения без заранее известного среднего значения можно воспользоваться алгоритмом, который позволяет вычислять среднее значение и среднеквадратичное отклонение параллельно.
Вам понадобится две переменные: одна для хранения текущего среднего значения, а другая - для хранения текущего значения среднеквадратичного отклонения. Начнем с того, что обе переменные равны нулю.
C каждым новым числом из файла мы можем вычислять обновленное значение среднего: new_avg = avg + (nextValue - avg) / i, где i - текущее количество чисел (начиная с 1), avg - текущее среднее значение, nextValue - следующее значение из файла.
При этом, чтобы обновить значение среднеквадратичного отклонения, нужно использовать следующую формулу: new_std_dev = std_dev + (nextValue - avg) * (nextValue - new_avg).
Таким образом, вы сможете сохранять актуальное среднее значение и среднеквадратичное отклонение на каждом шаге обработки данных из файла. Когда обработка завершится, у вас будут актуальные значения среднего и среднеквадратичного отклонения, которые можно использовать для дальнейших расчетов.
Для рассчета среднеквадратичного отклонения без заранее известного среднего значения можно воспользоваться алгоритмом, который позволяет вычислять среднее значение и среднеквадратичное отклонение параллельно.
Вам понадобится две переменные: одна для хранения текущего среднего значения, а другая - для хранения текущего значения среднеквадратичного отклонения. Начнем с того, что обе переменные равны нулю.
C каждым новым числом из файла мы можем вычислять обновленное значение среднего:
new_avg = avg + (nextValue - avg) / i, где i - текущее количество чисел (начиная с 1), avg - текущее среднее значение, nextValue - следующее значение из файла.
При этом, чтобы обновить значение среднеквадратичного отклонения, нужно использовать следующую формулу:
new_std_dev = std_dev + (nextValue - avg) * (nextValue - new_avg).
Таким образом, вы сможете сохранять актуальное среднее значение и среднеквадратичное отклонение на каждом шаге обработки данных из файла. Когда обработка завершится, у вас будут актуальные значения среднего и среднеквадратичного отклонения, которые можно использовать для дальнейших расчетов.