Возможности вычисления интегралов быстро осциллирующих функций для различных датчиков псевдослучайных чисел среды программирования MatLab. Приближенное вычисление интеграла с датчиком Парка-Миллера, вихря Мерсьенна, рекурсивного генератора и другими.
Приближенное интегрирование методом Монте-КарлоНеобходимость вычисления интегралов быстро осциллирующих функций возникает во многих исследовательских приложениях физики атмосферы, моделировании прохождения электромагнитных волн через различные среды и многих других разделах радиофизики. В настоящей работе исследованы возможности вычисления интегралов быстро осциллирующих функций для различных датчиков псевдослучайных чисел среды программирования MATLAB. Его достоинствами являются колоссальный период (219937-1), равномерное распределение в 623 измерениях (линейный конгруэнтный метод дает более или менее равномерное распределение максимум в 5 измерениях), быстрая генерация случайных чисел (в 2-3 раза быстрее, чем стандартные ГПСЧ, использующие линейный конгруэнтный метод). Имя, используемое при вызове процедуры Тип датчика Период mt19937ar вихрь Мерсенна Mersenne twister (по умолчанию) 219937-1 dsfmt19937 Быстрый вихрь Мерсенна (SIMD-oriented fast Mersenne twister ) 219937-1 mcg16807 линейный конгруэнтный метод (датчик Парка - Миллера) (Multiplicative congruential generator) 231-2 mlfg6331_64 метод Фибоначчи с запаздываниями (Multiplicative lagged Fibonacci generator) 2124 mrg32k3a Рекурсивный генератор (Combined multiple recursive generator) 2191 shr3cong регистр сдвига с линейной обратной связью (Shift-register generator summed with linear congruential generator) 264 Ниже приведен код программной процедуры PARKMILLER.m в пакете MATLAB, написанной для приближенного вычисления методом Монте-Карло интеграла с использованием различных датчиков пакета MATLAB.Анализ полученных результатов позволяет утверждать, что все приведенные датчики для заявленной цели - приближенного вычисления интегралов методом Монте-Карло - являются достаточно эффективными.Размещено на .
План
Оглавление
Введение
Приближенное интегрирование методом Монте-Карло при использовании различных датчиков случайных чисел пакета MATLAB
Заключение
Литература
Приложение
Введение
осциллирующий датчик программирование рекурсивный
Необходимость вычисления интегралов быстро осциллирующих функций возникает во многих исследовательских приложениях физики атмосферы, моделировании прохождения электромагнитных волн через различные среды и многих других разделах радиофизики. Несмотря на то, что современные пакеты, поддерживающие алгебраические вычисления, такие как MATLAB, Maple, Mathematica и другие, включают готовые процедуры интегрирования, часто возникает необходимость численных решений задач интегрирования.
Одним из универсальных численных методов интегрирования, часто оказывающимся единственно возможным, является метод Монте-Карло. Однако его недостатком является невысокая точность вычислений. Его сходимость имеет порядок N -1/2 (см. (5)).
Вследствие того, что вычислительный процесс метода Монте-Карло имеет вероятностный характер, получаемая с его использованием точность результата существенно зависит от качества генератора псевдослучайных чисел.
В настоящей работе исследованы возможности вычисления интегралов быстро осциллирующих функций для различных датчиков псевдослучайных чисел среды программирования MATLAB.
Приближенное интегрирование методом Монте-Карло при использовании различных датчиков случайных чисел пакета MATLAB
Наиболее распространенными методами генерации псевдослучайных чисел (ГСПЧ) являются линейный конгруэнтный метод, метод Фибоначчи с запаздываниями, регистр сдвига с линейной обратной связью, регистр сдвига с обобщенной обратной связью.
Из современных ГПСЧ широкое распространение также получил «вихрь Мерсенна», предложенный в 1997 году Мацумото и Нисимурой. Его достоинствами являются колоссальный период (219937?1), равномерное распределение в 623 измерениях (линейный конгруэнтный метод дает более или менее равномерное распределение максимум в 5 измерениях), быстрая генерация случайных чисел (в 2-3 раза быстрее, чем стандартные ГПСЧ, использующие линейный конгруэнтный метод).
Пакет MATLAB предлагает шесть датчиков случайных чисел. Их краткий обзор и основные параметры приведены в таблице.
Таблица Датчики псевдослучайных чисел пакета MATLAB
Имя, используемое при вызове процедуры Тип датчика Период mt19937ar вихрь Мерсенна Mersenne twister (по умолчанию) 219937?1 dsfmt19937 Быстрый вихрь Мерсенна (SIMD-oriented fast Mersenne twister ) 219937?1 mcg16807 линейный конгруэнтный метод (датчик Парка - Миллера) (Multiplicative congruential generator) 231?2 mlfg6331_64 метод Фибоначчи с запаздываниями (Multiplicative lagged Fibonacci generator) 2124 mrg32k3a Рекурсивный генератор (Combined multiple recursive generator) 2191 shr3cong регистр сдвига с линейной обратной связью (Shift-register generator summed with linear congruential generator) 264
Ниже приведен код программной процедуры PARKMILLER.m в пакете MATLAB, написанной для приближенного вычисления методом Монте-Карло интеграла с использованием различных датчиков пакета MATLAB.
%% Тестирование датчиков случайных чисел
%% Приближенное интегрирование быстро осциллирующих функций методом Монте-Карло"
Li = [-1 2]; % диапазон варьирования х xab= Li(1,2)-Li(1,1); % интервал по х
XHI = Li(1,2);
XLO = Li(1,1);
Fmax = (XHI^2)*sin(40*XHI); %
Fmin = (XLO^2)*sin(40*XLO); % yab = Fmax - Fmin; %интервал по у
Sall = xab * yab;
%MYSTREAM=RANDSTREAM("shr3cong"); %Shift-register generator summed with linear congruential generator
SS = S(j) figure plot(index,S,"b",index,Smean,"r")
%legend("Датчик Mersenne twister (по умолчанию)") legend("Датчик Парка - Миллера")
%%legend("Датчик SIMD-oriented fast Mersenne twister")
%legend("Генератор регистра сдвига, суммированный с линейным конгруэнтным генератором")
%legend("Датчик по методу Фибоначчи с запаздываниями")
%legend("Датчик рекурсивный генератор") title("Приближенное интегрирование быстро осциллирующих функций методом Монте-Карло")
Grid on
На рис.1 показана реализация этой процедуры для приведенного выше интеграла с использованием датчика Парка - Миллера.
Рисунок 1. Приближенное вычисление интеграла с использованием датчика Парка-Миллера (красным цветом отображается текущее среднее по реализации)
Рисунок 2. Приближенное вычисление интеграла с датчиком вихря Мерсьенна (синим цветом отображается текущее среднее по реализации)
Рисунок 3. Приближенное вычисление интеграла с помощью датчика рекурсивного генератора (зеленым цветом отображается текущее среднее по реализации)
Рисунок 4. Приближенное вычисление интеграла с помощью датчика регистра сдвига с обратной связью (желтым цветом отображается текущее среднее по реализации
Рисунок 5. Приближенное вычисление интеграла методом Монте-Карло с использованием датчика Фибоначчи с запаздыванием (синим цветом отображается текущее среднее по реализации) S = - 2,5926
Вывод
Анализ полученных результатов позволяет утверждать, что все приведенные датчики для заявленной цели - приближенного вычисления интегралов методом Монте-Карло - являются достаточно эффективными. Однако наиболее эффективными в этом случае представляются два следующих: 1) рекурсивный генератор (Combined multiple recursive generator), имеющий период 2191;
2) регистр сдвига с линейной обратной связью (Shift-register generator summed with linear congruential generator) с периодом 264.