Приближенное интегрирование методом Монте-Карло
Возможности вычисления интегралов быстро осциллирующих функций для различных датчиков псевдослучайных чисел среды программирования MatLab. Приближенное вычисление интеграла с датчиком Парка-Миллера, вихря Мерсьенна, рекурсивного генератора и другими.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 14.03.2018 |
Размер файла | 212,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Контрольная работа
Приближенное интегрирование методом Монте-Карло
Оглавление
- Введение
- Приближенное интегрирование методом Монте-Карло при использовании различных датчиков случайных чисел пакета 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
%myStream=RandStream('mlfg6331_64');%Multiplicative lagged Fibonacci generator
myStream=RandStream('mcg16807'); %датчик Парка-Миллера
% myStream=RandStream('mt19937ar'); %%'Датчик Mersenne twister (по умолчанию)
%%myStream=RandStream('dsfmt19937'); %%'Датчик SIMD-oriented fast Mersenne twister
%myStream=RandStream('mrg32k3a'); %%'Датчик Combined multiple recursive generator
N =1;
for j=1:10000
Nf = 0;
for i=1:1:N*j
A = rand;
rx = Li(1,1) + A * xab;
f = (rx*rx)*sin(40*rx); %
B=rand;
yf = Fmin + B * abs(yab);
if yf <= f Nf = Nf+1; end;
end
S(j) = Nf/i*N*Sall;
index(j) = j;
Smean(j)=mean(S);
end
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.
Литература
1. Абрамян М.Э., Олифер А.В. Численные методы. Методические указания к выполнению индивидуальных заданий. - Ростов-на-Дону, 1991.
2. Михалкович С.С., Обрезанова О.А., Олифер А.В. Численные методы. Методические указания к выполнению индивидуальных заданий. Выпуск II - Ростов-на-Дону, 1995.
3. Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. -М.: Наука, 1987.
4. Соболь И.М. Численные методы Монте-Карло. М.: Наука, 1973.
5. Kнут Д. Искусство программирования для ЭВМ. Т.2. Получисленные алгоритмы. - М.: Мир, 1977.
6. Press W.H., Teukolsky S.A., Vetterling W.T., Flannery B.P. Numerical Resipes in C. - Cambridge Univ. Press, 1992.
Приложение
Размещено на Allbest.ru
...Подобные документы
Некоторые сведения теории вероятностей. Математическое ожидание, дисперсия. Точность оценки, доверительная вероятность. Сущность метода Монте-Карло. Генераторы случайных чисел. Вычисление кратных интегралов. Описание пользовательского интерфейса.
курсовая работа [301,5 K], добавлен 08.11.2013Особенности работы в режиме командной строки в системе Matlab. Переменные и присваивание им значений. Комплексные числа и вычисления в системе Matlab. Вычисления с использованием функции sqrt. Неправильное использование функций с комплексными аргументами.
дипломная работа [1,9 M], добавлен 30.07.2015Математическая основа параллельных вычислений. Свойства Parallel Computing Toolbox. Разработка параллельных приложений в Matlab. Примеры программирования параллельных задач. Вычисление определенного интеграла. Последовательное и параллельное перемножение.
курсовая работа [1,1 M], добавлен 15.12.2010Методы и алгоритмы вычисления определенных интегралов: метод трапеций и метод Симпсона (метод парабол). Оформление функции вычисления заданного определённого интеграла на Visual Basic 6.0. Программный код функции. Создание приложения для вычисления.
курсовая работа [483,6 K], добавлен 25.06.2014MPI - библиотека передачи сообщений на языке программирования C/C++, ее переносимость, стандартизация, эффективная работа, функциональность. Форматы фактических вызовов MPI. Метод прямоугольников для приближенного вычисления определенного интеграла.
курсовая работа [286,0 K], добавлен 20.06.2012Программа для формирования и просмотра команды для олимпиады по программированию. Генератор случайных чисел в Borland C++, методы их получения. Линейный конгруэнтный метод. Метод Фибоначчи, вихря Мерсенна. Тестирование псевдослучайных последовательностей.
курсовая работа [93,5 K], добавлен 27.09.2014Теория вычисления интеграла и описание используемых численных методов (метод левых и правых прямоугольников, метод трапеции, метод Симпсона). Расчеты в пакете Matlab. Отчет о результатах вычисления в MS Excel. Описание приложения созданного в Delphi.
курсовая работа [2,8 M], добавлен 18.08.2014Характеристика основных методов для решения различных задач с помощью случайных последовательностей. Реализация и проверка эффективности метода Монте-Карло при его применении на различных примерах. Алгоритм метода имитации. Издержки неопределенности.
курсовая работа [98,9 K], добавлен 04.05.2014Разработка различных программ для вычисления X и Y по формуле, для вычисления интеграла, для вычисления таблицы значений функции и для вычисления элементов вектора. Составление блок-схемы программы. Ввод значений, описание переменных и условия расчета.
контрольная работа [148,1 K], добавлен 08.11.2013Разработка программы, которая по заданной самостоятельно функции будет выполнять интегрирование методом прямоугольников. Блок-схема алгоритма вычисления интеграла (функция rectangle_integrate). Экспериментальная проверка программы, ее текст на языке C.
курсовая работа [232,0 K], добавлен 27.05.2013Вычисление определенных интегралов методом Симпсона. Функциональная схема программного комплекса. Реализация функции разбора произвольно заданных математических функций. Методика сохранения графика в графический файл. Интерфейс программного комплекса.
курсовая работа [1,7 M], добавлен 15.06.2009Создание приложения, демонстрирующего решение нелинейного уравнения методом хорд, вычисление интеграла методом Симпсона. Характеристика системы программирования. Разработка мощных систем для работы с локальными и удаленными базами данных с помощью Delphi.
дипломная работа [846,0 K], добавлен 22.09.2012Метод хорд решения нелинейных уравнений. Вычисление интеграла методом Симпсона. Процесс численного решения уравнения. Окно программы расчета корней уравнения методом хорд. Алгоритм вычисления интеграла в виде блок-схемы. Выбор алгоритма для вычислений.
курсовая работа [832,6 K], добавлен 24.07.2012Характеристика вероятностного алгоритма и особенности его использования. Принцип работы и назначение генератора случайных чисел, сущность псевдослучайных чисел. Рассмотрение и реализация метода середины квадрата, разработка алгоритма и его кодирование.
курсовая работа [50,3 K], добавлен 18.09.2009Численные методы. Создание программного продукта, использование которого позволит одновременно исследовать два метода вычисления определенных интегралов: метод трапеций и метод Симпсона. Рассмотрен ход вычисления интеграла в виде кода программы.
курсовая работа [834,6 K], добавлен 14.04.2019Разработка программы, выполняющей интегрирование методом входящих прямоугольников с кратностями и методом Симпсона. Расчет определённого интеграла приближенным и точным методами. Оценка погрешности при вычислении приблизительного значения интеграла.
контрольная работа [71,7 K], добавлен 13.02.2016Создание программного модуля для вычисления интеграла по формулам трапеции и Симпсона, определяя шаг интегрирования по оценке остаточного члена. Для разработки используется табличный процессор Excel и язык программирования Visual Basic for Application.
курсовая работа [159,7 K], добавлен 30.08.2010Рассмотрение методов прямоугольников и трапеций как способов вычисления определенных интегралов. Характеристика графика зависимости погрешности от числа разбиений N. Создание приложения по вычислению интеграла с помощью методов приближенного вычисления.
курсовая работа [1,6 M], добавлен 20.06.2012Разработка программного приложения для вычисления интегралов с помощью метода Симпсона. Составление функциональной и структурной схемы программного продукта, математической модели и тестовых примеров. Изучение предметной области, выбора среды реализации.
курсовая работа [359,3 K], добавлен 08.06.2011Сущность и особенности применения метода средних треугольников. Порядок расчета по методу трапеций и Ньютона-Котеса. Формула Чебышева и значения узлов ее квадратуры. Составление блок-схемы программы и ее основных процедур различными численными методами.
курсовая работа [482,7 K], добавлен 03.01.2010