Научная статья на тему 'Автоматизация процесса вычисления определенного интеграла в ходе обучения студентов'

Автоматизация процесса вычисления определенного интеграла в ходе обучения студентов Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
219
23
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
СТАТИСТИЧЕСКОЕ МОДЕЛИРОВАНИЕ / МЕТОД МОНТЕ-КАРЛО / ВЫЧИСЛЕНИЕ ОПРЕДЕЛЕННОГО ИНТЕГРАЛА / ЯЗЫК ПРОГРАММИРОВАНИЯ C#

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Мозжегоров Кирилл Станиславович, Полевщиков Иван Сергеевич

В статье в сокращенной форме изложены особенности применения метода Монте-Карло для вычисления определенных интегралов. Рассмотрены особенности реализации программы, написанной на языке C#, предназначенной для вычисления определенного интеграла методом МонтеКарло.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Мозжегоров Кирилл Станиславович, Полевщиков Иван Сергеевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Автоматизация процесса вычисления определенного интеграла в ходе обучения студентов»

1 SCIENCE TIME 1

il^1 ^jlil АВТОМАТИЗАЦИЯ ПРОЦЕССА ВЫЧИСЛЕНИЯ ОПРЕДЕЛЕННОГО ИНТЕГРАЛА В ХОДЕ ОБУЧЕНИЯ СТУДЕНТОВ Мозжегоров Кирилл Станиславович, Полевщиков Иван Сергеевич, ФГБОУ ВПО «Пермский национальный исследовательский политехнический университет», г. Пермь E-mail: kirill.mozzhegorov@yandex. ru E-mail: i.s.polevshchikov@gmail.com

Аннотация. В статье в сокращенной форме изложены особенности применения метода Монте-Карло для вычисления определенных интегралов. Рассмотрены особенности реализации программы, написанной на языке С#, предназначенной для вычисления определенного интеграла методом Монте-Карло.

Ключевые слова: статистическое моделирование, метод Монте-Карло, вычисление определенного интеграла, язык программирования С#.

Метод Монте-Карло лежит в основе статистического моделирования, заключающегося в том, что модель испытывается множеством случайных сигналов с заданной плотностью вероятности с целью получения выходных результатов [1, 2]. Рассмотрим особенности метода Монте-Карло на примере вычисления определенного интеграла.

Необходимо найти значение интеграла:

x2

у = |(^ .

На рис. 1 представлен график функции /(x) . Вычисление значения интеграла этой функции заключается в нахождении площади под графиком функции.

| SCIENCE TIME |

У4

с2 ЦП)

г2

с1 -

Рис. 1 Определение значения интеграла методом Монте-Карло [1]

В первую очередь, необходимо ограничить кривую сверху, справа и слева, а далее случайным образом распределить точки в прямоугольнике поиска. Количество точек, попавших под кривую по отношению к общему числу точек пропорционально площади под кривой (величине интеграла) по отношению к площади испытуемого прямоугольника. Следовательно, значение интеграла можно вычислить по следующей формуле:

N

У =ТГ • (Х - Х1) • (С2 - С1) ,

где N, - количество точек, принятых для испытаний (то есть попавших в

прямоугольник (рис. 1);

N2 - количество точек под кривой, то есть попавших в закрашенную площадь под функцией (рис. 1);

х, и Х2 - ограничения слева и справа по оси абсцисс соответственно;

с, и с2 - ограничения снизу и сверху по оси ординат соответственно.

В процессе обучения студентов бакалавриата (обучающихся по направлению «Информатика и вычислительная техника»), студенту необходимо автоматизировать процесс вычисления определенного интеграла согласно рассмотренному выше принципу посредством написания программы с использованием одного из языков программирования высокого уровня.

Рассмотрим особенности реализации программы для вычисления

| SCIENCE TIME |

определенного интеграла методом Монте-Карло на примере интеграла вида:

у = | (ик + b)dx .

xl

Для решения поставленной задачи был выбран язык программирования С# [3-4], являющийся современным объектно-ориентированным языком программирования с С-подобным синтаксисом.

Для начала создадим функцию, которая выдавала бы случайное число, подчиняющееся равномерному распределению на интервале [0;1] :

double Value_Rund() {

Random rand = new Random(); double z = rand.NextDouble(); Thread.Sleep(l); return z;

}

Функция Thread. Sleep(l) - блокирует поток на одну миллисекунду, что

й [0;1] позволяет возвращать разные значения случайного числа в интервале ,

которое создается методом NextDouble().

Далее рассмотрим основную функцию расчета введенного пользователем

интеграла. Функция выполняется после нажатия пользователем кнопки

«Решить»:

private void button1_Click(object sender, EventArgs e) {

int n = Convert.ToInt32(numericUpDown1.Value);

int xl = 3;

int x2 = 4;

int a = 4;

int b = -1;

int cl = Convert.ToInt32(numericUpDown2.Value); int c2 = Convert.ToInt32(numericUpDown3.Value); if (c2 < cl || x2 < xl) return;

I SCIENCE TIME I

double res = 0.0; int N1 = 0; int N2 = 0;

for (int i = 0; i < n; i++) {

double xRand = x1 + (x2 - x1) * Value_Rund(); double yRand = c1 + (c2 - c1) * Value_Rund(); double f = a * xRand + b;

if (f >= yRand) {

N1++; N2++;

}

else

N1++;

}

res = N2 * 1.0 / N1 * (x2 - x1) * (c2 - c1); textBox2.Text = res.ToString("F5");

double result = (a * x2 * x2 * 1.0 / 2 + b * x2) - (a * x1 * x1 * 1.0 / 2 + b

* x1);

textBox1.Text = resultToString("F5");

}

Разберем детальнее выполнение этой функции. В первую очередь, считываются данные из формы и определяются коэффициенты интеграла:

int n = Convert.ToInt32(numericUpDown1.Value); int x1 = 3; int x2 = 4; int a = 4; int b = -1;

int c1 = Convert.ToInt32(numericUpDown2.Value); int c2 = Convert.ToInt32(numericUpDown3.Value);

Дальше происходит проверка правильности данных, без которой не может быть получен необходимый результат:

if (c2 < c1 || x2 < x1) return;

I

SCIENCE TIME

I

Затем выполняется цикл с количеством шагов, равным введенному числу п . В этом цикле с помощью функции Уа1ие_Кипё() генерируются случайные точки в заданном прямоугольнике и вычисляется количество точек, попавших в область под графиком (область заданного интеграла):

for (int i = 0; i < n; i++)

{

double xRand = x1 + (x2 - x1) * Value_Rund(); double yRand = c1 + (c2 - c1) * Value_Rund(); double f = a * xRand + b;

if (f >= yRand) {

N1++; N2++;

}

После этого, зная количество попавших точек в заданную функцией область, можно рассчитать значение интеграла:

res = N2 * 1.0 / N1 * (x2 - x1) * (c2 - c1);

Также данный интеграл, применив соответствующие преобразования, можно вычислить аналитически. Это происходит с помощью следующих операций:

double result = (a * x2 * x2 * 1.0 / 2 + b * x2) - (a * x1 * x1 * 1.0 / 2 + b * x1);

Дополнительно была добавлена кнопка «Очистить», которая выполняет очистку результатов. Обработчик нажатия этой кнопки выглядит следующим образом:

private void button2_Click(object sender, EventArgs e)

else

N1++;

}

{

textBox1.Clear(); textBox2.Clear();

}

Рассмотрим результаты работы программы. Для примера возьмем следующий интеграл:

Запустим созданную программу. Введем исходные данные. Результат

е- N = 10 0

работы программы для точек представлен на рис. 2.

Рис. 2 Результат выполнения программы при

N = 10

Результат работы программы для N 100 точек представлен на рис. 3.

Рис. 3 Результат выполнения программы при

N = 100

I SCIENCE TIME I

Согласно рис. 2 и 3 видно, что чем больше количество сгенерированных точек, тем точнее вычисленное значение интеграла.

Таким образом, с использованием языка C# была реализована программа, показывающая на простейшем примере особенности вычисления определенного интеграла методом Монте-Карло. Следует отметить, что практическое применение данный метод находит в случае, когда значение интеграла нельзя найти аналитическим способом [1].

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Литература:

1. Мухин О.И. Лекция «Статистическое моделирование» [Электронный ресурс]. - Режим доступа: stratum.pstu.ac.ru/education/textbooks/modelir/lection21.html. (Дата обращения: 30.08.2014).

2. Гайнанов Р.Р., Файзрахманов Р. А., Полевщиков И.С. Особенности программной реализации процесса расчета определенного интеграла методом Монте-Карло // Science Time. 2015. №1(13). С. 71-75.

3. Павловская Т. А.. C#. Программирование на языке высокого уровня: учебник для вузов. Санкт-Петербург[и др.]: Питер, 2010 . 432 с.

4. Троелсен Э. C# и платформа .NET. Библиотека программиста. СПб.: Питер, 2007. 796 с.

i Надоели баннеры? Вы всегда можете отключить рекламу.