Как проверить равновесие в моделировании Монте-Карло?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как проверить равновесие в моделировании Монте-Карло?

Сообщение Anonymous »


Я написал следующий класс, чтобы проверить, находится ли симуляция Монте-Карло в равновесии.

Первая функция использует статистическую проверку ошибок

# Файл: r_end_to_end_squared_scalar.dat # Описание: Данные моделирования Монте-Карло, представляющие динамику белков. #r-конец-квадрат 15398.447852474459 15907.581694436145 15146.459803846192 13690.330559817616 14581.703711851666 14224.026089792113 14084.006450353565 13580.238453116126 13960.916991568824 14369.807625278698 13980.19145816181 14202.61497898913 ... Чтобы выполнить статистический анализ ошибок (вычисление статистических ошибок для фрагментов данных, взятых из разных частей моделирования) скалярных данных, я выполнил следующие шаги:
[*]
Сбор данных. Запустите моделирование Монте-Карло и соберите данные об интересующих наблюдаемых на каждом этапе.
[*]
Разделение данных на блоки. Разделите данные на несколько блоков одинакового размера. Размер каждого фрагмента должен быть достаточно большим, чтобы представлять симуляцию, но достаточно маленьким, чтобы можно было сравнивать несколько фрагментов.
[*]
Вычислите среднее значение и стандартную ошибку для каждого фрагмента. Для каждого фрагмента вычислите среднее значение и стандартную ошибку среднего значения (SEM). SEM – это стандартное отклонение (SD) выборки, деленное на квадратный корень из количества наблюдений в фрагменте.
[*]
Сравнение по частям: анализируйте средние значения и SEM по частям. Если моделирование достигло равновесия, средние значения должны согласовываться друг с другом, а SEM должны иметь одинаковую величину.

Второй использует метод автокорреляции, который не требует пояснений.

Однако оба они всегда возвращают false.

Что я делаю не так?
с использованием системы; используя System.Linq; использование MathNet.Numerics; использование MathNet.Numerics.IntegralTransforms; пространство имен { Равновесие общественного класса { // Функция для проверки сбалансированности данных public static bool IsEquilibrated(double[] data, int NumberOfChunks = 10) { // Рассчитываем размер чанка int chunkSize = data.Length/numberOfChunks; double[] chunkMeans = новый двойной[numberOfChunks]; double[] chunkSEMs = новый двойной[numberOfChunks]; // Перебираем фрагменты и вычисляем статистику for (int i = 0; i Math.Pow(x - среднее, 2)) / (chunk.Length - 1)); двойной стандартОшибка = стандартное отклонение / Math.Sqrt(chunk.Length); chunkSEMs = стандартная ошибка; } // Выполняем анализ, чтобы определить, сбалансированы ли данные // Порог изменения можно при необходимости отрегулировать двойное среднее значениеOfMeans = chunkMeans.Average(); двойное среднее значениеOfSEMs = chunkSEMs.Average(); двойной порог = среднее значение SEM * 2; // Пример порога: удвоенное среднее значение SEM // Проверяем, все ли фрагменты находятся в пределах среднего значения bool isEquilibrated = chunkMeans.All(среднее => Math.Abs(среднее - среднее значение) x - среднее).ToArray(); // Дополняем данные нулями до следующей степени 2 для эффективного БПФ int n = нулевойMeanData.Length; int nPadded = (int)Math.Pow(2, Math.Ceiling(Math.Log(n, 2))); вар PaddedData = новый Complex32 [nPadded]; for (int i = 0; i < n; i++) { PaddedData = новый Complex32((float)zeroMeanData, 0); } // Выполняем БПФ для данных с нулевым средним значением Fourier.Forward(paddedData, FourierOptions.NoScaling); // Рассчитываем спектр мощности var powerSpectrum = PaddedData.Select(c => c.MagnitudeSquared()).ToArray(); // Обратное БПФ для получения функции автокорреляции вар autocorrComplex = powerSpectrum.Select(p => new Complex32((float)p, 0)).ToArray(); Fourier.Inverse(autocorrComplex, FourierOptions.NoScaling); // Проверяем значения автокорреляции на соответствие порогу for (int lag = 1; lag порог) { вернуть ложь; // Данные не сбалансированы } } вернуть истину; // Данные уравновешены } } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Распараллеливание Numba не повышает производительность при моделировании Монте-Карло?
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Монте-Карло с OpenMP
    Гость » » в форуме C++
    0 Ответы
    31 Просмотры
    Последнее сообщение Гость
  • Монте-Карло с OpenMP
    Anonymous » » в форуме C++
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Ошибка в реализации поиска по дереву Монте-Карло.
    Anonymous » » в форуме C++
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Ошибка в реализации поиска по дереву Монте-Карло.
    Anonymous » » в форуме C++
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»