Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 21.12.2022
Сообщений: 9

Вычислить интеграл методом Монте-Карло

21.12.2022, 15:03. Показов 1056. Ответов 13

Студворк — интернет-сервис помощи студентам
Составить программу на языке высокого уровня, вычисляющую определенный интеграл 5 - exp(-2*x) на промежутке от -1 до 1 методом Монте-Карло с точностью 0.00001. С помощью любой экспертной системы найти решение этого интеграла и сравнить полученные результаты.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.12.2022, 15:03
Ответы с готовыми решениями:

Вычисление интеграла методом Монте-Карло
Задания под буквой б

Нахождение площади методом Монте-Карло.
Решить задачу нахождения площади области методом Монте-Карло

Нахождение площади методом Монте-Карло
Помогите, пожалуйста! Определите методом Монте-Карло площадь фигуры: 1) А; 2) В; 3) С; 4) А+С; 5) В+С; 6) В+А; 7) А+В+С Написать...

13
Модератор
10451 / 5742 / 3409
Регистрация: 17.08.2012
Сообщений: 17,474
23.12.2022, 23:52
Лучший ответ Сообщение было отмечено Ekaterinaaaa как решение

Решение

Никакой экспертной системы для нахождения данного интеграла не требуется. Интеграл легко вычисляется аналитически.

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
\int (5-e^{-2x})\operatorname{d}x=5\int \operatorname{d}x-\begin{array}{c|}\int e^{-2x}\operatorname{d}x=\end{array}_{\begin{array}{l}u=-2x\\du:=-2dx\end{array}}=\\\\=5\int \operatorname{d}x+\frac{1}{2}\int e^u\operatorname{d}u=5x+\begin{array}{c|}\frac{e^u}{2}+C=\end{array}_{-2x:=u}=5x+\frac{e^{-2x}}{2}+C<br />

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
Integral=\begin{array}{c|}5x+\frac{e^{-2x}}{2}\end{array}_{-1}^1=\left( 5+\frac{e^{-2}}{2}\right)-\left( -5+\frac{e^2}{2}\right)\approx 6.3731395921529812323317860171987<br />

У Вас по заданию "слишком хорошая" точность для метода Монте-Карло. Придётся генерировать минимум
(1 / 0.00001)2 = 10000000000 (десять миллиардов)
выборок случайной величины, и столько же раз вычислять значение функции и сравнивать его с выборкой. Это будет считаться ну ооооочень долго.

Функция F(x)=5-e-2x возрастает на всей действительной оси и обращается в 0 при x=-ln(5)/2. Следовательно, функция меняет свой знак на заданном интервале интегрирования. Ограничения значения функции на концах интервала: F(-1)>-2.39, f(1)<4.9.

Получается вот такая весёлая картинка:



Незакрашенные области учитывать не нужно. Пишем программу:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
##
function f(x: real): real := 5 - exp(-2 * x);
function i(x: real): real := 5 * x + exp(-2 * x) / 2;
 
  randomize;
  var (xl, xc, xr, hn, hp, eps) := (-1.0, -ln(5) / 2, 1.0, f(-1), f(1), 0.00001);
  var (wn, wp, x, y, s) := (xc - xl, xr - xc, 0.0, 0.0, 0.0);
  var cn, cnf, cp, cpf: Int64;
  (cn, cnf, cp, cpf) := (1, 1, 1, 1);
  loop Int64(1 / sqr(eps)) do
    begin
      x := random(xl, xr);
      if x < xc then
        begin
          y := random(hn, 0.0);
          cn += 1; 
          if y >= f(x) then cnf += 1
        end
      else
        begin
          y := random(0.0, hp);
          cp += 1;
          if y <= f(x) then cpf += 1
        end
    end;
  s := cpf / cp * wp * hp + cnf / cn * wn * hn;
  $'Метод Монте-Карло: {s}'.PrintLn;
  $'  Точное значение: {i(xr) - i(xl)}'.PrintLn
Окно выводаМетод Монте-Карло: 6.3731386530494
Точное значение: 6.37313959215298


На моём древнем компьютере эта программа считала интеграл полчаса.
Посчиталось точно, но это, на самом деле, случайность, поскольку применена самая грубая оценка для количества выборок. Если взять количество выборок хотя бы (3/0.00001)2=30000000000, точность будет гарантирована примерно в 99 случаях из 100, но программа будет считать (у меня) полтора часа. Если у Вас современный числогрыз, то, может быть, минут за 10 посчитает.
2
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
24.12.2022, 08:05
Cyborg Drone,
А вот такой вопрос, если разбить один большой цикл из 2-х неявных на 2 явных, избавившись от if x<XC и разделив количество повторов пропорционально площадям ограничивающих прямоугольников, даст это сколь-либо заметный выигрыш по времени?
1
Модератор
10451 / 5742 / 3409
Регистрация: 17.08.2012
Сообщений: 17,474
24.12.2022, 19:58
Да, будет чуть-чуть побыстрее, поскольку условия в цикле не будет.

Не проверял, сейчас на работе, у меня здесь стоит слишком старая версия Pascal ABC.NET, потому что Windows Vista.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
##
function f(x: real): real := 5 - exp(-2 * x);
function i(x: real): real := 5 * x + exp(-2 * x) / 2;
 
  randomize;
  var (xl, xc, xr, hn, hp, eps) := (-1.0, -ln(5) / 2, 1.0, f(-1), f(1), 0.00001);
  var (wn, wp, x, y, s) := (xc - xl, xr - xc, 0.0, 0.0, 0.0);
  var cn, cnf, cp, cpf: Int64;
  (cn, cnf, cp, cpf) := (1, 1, 1, 1);
  var n := Int64(1 / sqr(eps));
  var m := Int64(n / hp * hn / wp * wn);
  n -= m;
  loop n do
    begin
      x := random(xc, xr);
      y := random(0.0, hp);
      cp += 1;
      if y <= f(x) then cpf += 1
    end;
  loop m do
    begin
      x := random(xl, xc);
      y := random(hn, 0.0);
      cn += 1; 
      if y >= f(x) then cnf += 1
    end;
  s := cpf / cp * wp * hp + cnf / cn * wn * hn;
  $'Метод Монте-Карло: {s}'.PrintLn;
  $'  Точное значение: {i(xr) - i(xl)}'.PrintLn
1
100 / 74 / 21
Регистрация: 12.04.2017
Сообщений: 269
25.12.2022, 12:28
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
На моём древнем компьютере эта программа считала интеграл полчаса.
У меня этот код работает 34с.
Миниатюры
Вычислить интеграл методом Монте-Карло  
0
100 / 74 / 21
Регистрация: 12.04.2017
Сообщений: 269
25.12.2022, 12:46
А вот так это же вычисление можно выполнить, если воспользоваться библиотекой из стандартной поставки PascaАВС.NЕТ:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
## uses NumLibABC;
var o := new StopWatch;
o.Start;
var I := new Quanc8(x -> 5 - exp(-2 * x), -1, 1, 1e-5, 1e-5);
var r := I.Value;
o.Stop;
r.Println;           // (6.37313959215278,1.85660046042368E-12,0,33)
// Значение 6.37313959215278
// абсолютная погрешеость 1.85660046042368E-12
// индикатор надежности 0 (надёжное решение)
// потребовалось вычислить функцию в 33 точках
Println(o.Elapsed);  // 00:00:00.0021802 - время вычисления примерно 2 мс
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
25.12.2022, 12:57
Цитата Сообщение от Alvico Посмотреть сообщение
это же вычисление
Какое отношение QUANC8 имеет к вычислению интеграла методом Монте-Карло?

Добавлено через 5 минут
Строка 28 считает намного быстрее QUANC8 и библиотек для этого подключать не нужно
Или дело все-таки в чем-то другом?
0
Модератор
10451 / 5742 / 3409
Регистрация: 17.08.2012
Сообщений: 17,474
25.12.2022, 13:20
Alvico, ну, у меня очень старый компьютер.
Quanc8 не имеет никакого отношения к методу Монте-Карло
0
100 / 74 / 21
Регистрация: 12.04.2017
Сообщений: 269
25.12.2022, 22:50
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Quanc8 не имеет никакого отношения к методу Монте-Карло
Естественно, там в комментарии к исходнику написано, к чему он имеет отношение. Я привел это как пример, что метод Монте-Карло нужно применять обдуманно и там, где без него сложно обходиться. Несколько миллисекунд и точность на 7 порядков выше служат подтверждением. Опять задача, которую дали бездумно: давайте используем заданный метод программирования для задачи, где он крайне неэффективен. Ну и чему это может научить студента? Привить мнение, что метод Монте-Карло - дрянь? А на деле-то это прекрасный метод и есть задачи, где он очень эффективен. Но знаете, есть такая присказка: вещь хорошая, да жаль что дураку досталась!

Добавлено через 5 минут
Цитата Сообщение от bormant Посмотреть сообщение
Строка 28 считает намного быстрее QUANC8 и библиотек для этого подключать не нужно
Давно подключить стандартную библиотеку стало проблемой? А чтобы считать "строкой 28", надо, вообще-то, сначала аналитическое решение получить и времени на это уйдет несравнимо больше.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
25.12.2022, 22:51
Alvico,
Не знаю другого способа научить студента применять тот или иной метод, кроме собственно его применения. Но я не педагог, потому моё мнение тут десятое.
Можно много рассуждать о том, нужен ли он именно в этой задаче или нет, но то, что задача может быть использована для тренировки в применении - несомненно.
0
100 / 74 / 21
Регистрация: 12.04.2017
Сообщений: 269
25.12.2022, 22:59
Можно поучиться забивать гвозди микроскопом, вычерпывать озеро чайной ложной, копать ров детской лопаткой, но нужно ли этим заниматься с целью научить студента, который уже и ребенком не считается, пониманию того, что так делать не нужно?
0
Модератор
10451 / 5742 / 3409
Регистрация: 17.08.2012
Сообщений: 17,474
26.12.2022, 08:11
Alvico,

Задание есть задание, тупое оно или ещё какое, это неважно, студенту его нужно сделать и сдать. Сюда приходят в основном за халявой. Тот, кто сам может решить, тот вопросов не задаёт. Это удручает, но так оно и есть.

Тот, кто всего пару месяцев назад познакомился с паскалем, вряд ли полезет копошиться в исходниках. Если бы мы ничего не сказали, студент мог бы несказанно обрадоваться Вашей программе (ещё бы, и меньше, и быстрее, и точнее), и получил бы минимум потерю своего времени с вежливой просьбой преподавателя показать, а где в программе метод Монте-Карло. Вы же не написали, что Ваша программа этот метод не использует, и тем самым запросто могли подвести студента под монастырь.

Насчёт стандартной библиотеки. Стандартную библиотеку, может быть, подключить и быстрее, но, вообще-то, первообразная для заданной функции определяется в уме с лёгкостью, вызывающей изумление. То, что я в сообщении #2 расписал - это так, на всякий случай, для тех, кто плохо помнит таблицу первообразных.
0
100 / 74 / 21
Регистрация: 12.04.2017
Сообщений: 269
26.12.2022, 08:23
Да, в данном конкретном случае первообразная определяется легко. Но всегда ли это так? Жизнь показывает, что обычно наоборот: большинство интегралов не выражаются в аналитических функциях (иначе бы никто не занимался вопросами численного интегрирования.
"Тот, кто всего пару месяцев назад познакомился с паскалем..."
А чем они, простите, в школе занимались на информатике? КуМИР изучали и на нем писали ЕГЭ? К сожалению, обычно не в языке проблема, а в неумении алгоритмизации, неумении выбрать подходящие средства. А это совсем другая проблема.

Ну и последнее. Я считал, что этот форум отличается от остальных "решалок" для нерадивых тем, что тут не позволяется публиковать задания. Оказывается, практически нет. Хорошо, учту на будущее.
0
Модератор
10451 / 5742 / 3409
Регистрация: 17.08.2012
Сообщений: 17,474
26.12.2022, 12:44
Alvico,

Никак нельзя запретить человеку что-то не знать, это его личное дело.

Насчёт публикации заданий, без учёта содержимого темы: запрещено создавать темы в виде ссылок на задания или коды программ, расположенные на других сайтах и публиковать ответы на вопросы или решения задач с форума на другие сайты и давать на них ссылки в качестве ответа. Остальное - пожалуйста.

Предназначение этой части форума: "Программирование с использованием языка Pascal. Решение задач, программирование и готовые программы на Паскаль.". Ничего более.

Этот форум отличается тем, что темы, если они не нарушают правила форума, не закрываются и не удаляются никогда. На первый взгляд, ничего особенного. Но это только на первый взгляд.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2022, 12:44
Помогаю со студенческими работами здесь

Найти площадь фигуры методом Монте-Карло
Найти площадь фигуры методом Монте-Карло. Help)

Найти длину отрезка методом Монте-Карло
Найти длину отрезка при помощи метода Фон-Неймана. Сам метод я не знаю, поэтому прошу помощи. К примеру: Точка двигается в определенном...

Вычислить корень функции, используя метод Монте-Карло
Вычислить корень функции &quot;x-4&quot; используя метод Монте-Карло это метод решения задач с помощью случайных чисел. На паскале. Заранее...

Метод Монте Карло
Найти площадь методом Монте-Карло

Метод Монте Карло
Найти площадь фигуры методом Монте-Карло


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru