0 / 0 / 0
Регистрация: 27.02.2016
Сообщений: 39
|
||||||
1 | ||||||
Метод Монте-Карло для двойного интеграла с заданной точностью04.12.2019, 20:14. Показов 8452. Ответов 4
Метки нет (Все метки)
Здравствуйте, нужно вычислить интеграл методом Монте Карло с точностью . Есть значение интеграла, полученное в Mathcad'е . Есть рабочая программа, но она вычисляет максимум с точностью . Если точность задать больше, то условие в while не выполняется, следовательно происходит зацикливание. Что можете посоветовать в данном случае?
0
|
04.12.2019, 20:14 | |
Ответы с готовыми решениями:
4
Программа для вычисления интеграла с заданной точностью методом Симпсона и методом Монте-Карло Метод Монте-Карло для вычисления площади фигуры Вычисление интеграла методом Монте-Карло Вычисление интеграла методом Монте-Карло |
случайный прохожий
3031 / 2062 / 626
Регистрация: 20.07.2013
Сообщений: 5,549
|
|
05.12.2019, 01:40 | 2 |
Попробуй использовать fabs вместо abs.
0
|
0 / 0 / 0
Регистрация: 27.02.2016
Сообщений: 39
|
|
05.12.2019, 07:16 [ТС] | 3 |
fabs не помогло
0
|
3 / 2 / 1
Регистрация: 02.12.2018
Сообщений: 20
|
||||||
05.12.2019, 09:02 | 4 | |||||
* Замените тип int на long long или unsigned long long. int очень быстро переполняется и уходит в минус. От этого и зацикливается.
* Вычисление с точностью 1e-6 измерсяеться минутами, а с точностью 1e-7 - часами... * Точное решение интеграла быстрее всего 11/120 или 0.0916(6): вероятное решение Вот код:
Кликните здесь для просмотра всего текста
Код
n N | Integr - Integr_0| = distance 262 500 |0.09121678 - 0.00000000| = 0.09121678 751 1000 |0.08893915 - 0.09121678| = 0.00227764 1750 2000 |0.08756573 - 0.08893915| = 0.00137342 3795 4000 |0.08712934 - 0.08756573| = 0.00043639 7743 8000 |0.08979841 - 0.08712934| = 0.00266907 15708 16000 |0.09135629 - 0.08979841| = 0.00155788 31700 32000 |0.09119723 - 0.09135629| = 0.00015906 63869 64000 |0.09117357 - 0.09119723| = 0.00002366 128063 128000 |0.09153407 - 0.09117357| = 0.00036050 255945 256000 |0.09146588 - 0.09153407| = 0.00006819 512201 512000 |0.09154776 - 0.09146588| = 0.00008188 1023550 1024000 |0.09151686 - 0.09154776| = 0.00003090 2046898 2048000 |0.09159653 - 0.09151686| = 0.00007966 4094697 4096000 |0.09160642 - 0.09159653| = 0.00000989 n 4094697 N 8192000 Integral 0.09160642 time spend 0:0:0.593 Результат при eps = 1e-6: Кликните здесь для просмотра всего текста
Код
n N | Integr - Integr_0| = distance 262 500 |0.09121678 - 0.00000000| = 0.09121678 751 1000 |0.08893915 - 0.09121678| = 0.00227764 1750 2000 |0.08756573 - 0.08893915| = 0.00137342 3795 4000 |0.08712934 - 0.08756573| = 0.00043639 7743 8000 |0.08979841 - 0.08712934| = 0.00266907 15708 16000 |0.09135629 - 0.08979841| = 0.00155788 31700 32000 |0.09119723 - 0.09135629| = 0.00015906 63869 64000 |0.09117357 - 0.09119723| = 0.00002366 128063 128000 |0.09153407 - 0.09117357| = 0.00036050 255945 256000 |0.09146588 - 0.09153407| = 0.00006819 512201 512000 |0.09154776 - 0.09146588| = 0.00008188 1023550 1024000 |0.09151686 - 0.09154776| = 0.00003090 2046898 2048000 |0.09159653 - 0.09151686| = 0.00007966 4094697 4096000 |0.09160642 - 0.09159653| = 0.00000989 8192265 8192000 |0.09159687 - 0.09160642| = 0.00000955 16389017 16384000 |0.09163554 - 0.09159687| = 0.00003867 32769576 32768000 |0.09165066 - 0.09163554| = 0.00001512 65535286 65536000 |0.09164284 - 0.09165066| = 0.00000783 131078815 131072000 |0.09165979 - 0.09164284| = 0.00001695 262140246 262144000 |0.09166859 - 0.09165979| = 0.00000880 524281599 524288000 |0.09166323 - 0.09166859| = 0.00000536 1048545399 1048576000 |0.09166440 - 0.09166323| = 0.00000117 2097077721 2097152000 |0.09166610 - 0.09166440| = 0.00000170 4194273976 4194304000 |0.09166681 - 0.09166610| = 0.00000071 n 4194273976 N 8388608000 Integral 0.09166681 time spend 0:8:54.365 eps = 1e-7 (всё, что есть): Кликните здесь для просмотра всего текста
Код
n N | Integr - Integr_0| = distance 262 500 |0.09121678 - 0.00000000| = 0.09121678 751 1000 |0.08893915 - 0.09121678| = 0.00227764 1750 2000 |0.08756573 - 0.08893915| = 0.00137342 3795 4000 |0.08712934 - 0.08756573| = 0.00043639 7743 8000 |0.08979841 - 0.08712934| = 0.00266907 15708 16000 |0.09135629 - 0.08979841| = 0.00155788 31700 32000 |0.09119723 - 0.09135629| = 0.00015906 63869 64000 |0.09117357 - 0.09119723| = 0.00002366 128063 128000 |0.09153407 - 0.09117357| = 0.00036050 255945 256000 |0.09146588 - 0.09153407| = 0.00006819 512201 512000 |0.09154776 - 0.09146588| = 0.00008188 1023550 1024000 |0.09151686 - 0.09154776| = 0.00003090 2046898 2048000 |0.09159653 - 0.09151686| = 0.00007966 4094697 4096000 |0.09160642 - 0.09159653| = 0.00000989 8192265 8192000 |0.09159687 - 0.09160642| = 0.00000955 16389017 16384000 |0.09163554 - 0.09159687| = 0.00003867 32769576 32768000 |0.09165066 - 0.09163554| = 0.00001512 65535286 65536000 |0.09164284 - 0.09165066| = 0.00000783 131078815 131072000 |0.09165979 - 0.09164284| = 0.00001695 262140246 262144000 |0.09166859 - 0.09165979| = 0.00000880 524281599 524288000 |0.09166323 - 0.09166859| = 0.00000536 1048545399 1048576000 |0.09166440 - 0.09166323| = 0.00000117 2097077721 2097152000 |0.09166610 - 0.09166440| = 0.00000170 4194273976 4194304000 |0.09166681 - 0.09166610| = 0.00000071 8388573769 8388608000 |0.09166597 - 0.09166681| = 0.00000084 16777343125 16777216000 |0.09166656 - 0.09166597| = 0.00000059 33554619698 33554432000 |0.09166674 - 0.09166656| = 0.00000018 67108922918 67108864000 |0.09166640 - 0.09166674| = 0.00000034 ...
0
|
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
|
|
05.12.2019, 14:16 | 5 |
Несколько важных замечаний:
1. Генератор случайных чисел rand обладает очень маленьким периодом, и для генерации миллиардов случайных чисел не подходит. Для Метода Монте-Карло очень важен правильный выбор генератора псевдослучайных чисел.Так что смотрим в сторону https://ru.cppreference.com/w/cpp/numeric/random 2. Суммирование большого числа чисел типа double Складывать несколько миллионов чисел типа double просто так нельзя.Смотрим:
3. Точность метода и распределение случайной величины https://habr.com/ru/post/274975/ - крайне полезная статья. Итог Для достижения требуемой точности надо объединить все три решения. З.Ы.: Вечером попробую что-нибудь сделать
0
|
05.12.2019, 14:16 | |
05.12.2019, 14:16 | |
Помогаю со студенческими работами здесь
5
Вычисление интеграла методом Монте-Карло Метод Монте-Карло для решение систем линейных алгебраических уравнений Решения кратного интеграла методом Монте Карло на С++ Вычисление интеграла геометрическим методом Монте-Карло Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |