Аватар для Andrew_Montana
49 / 45 / 41
Регистрация: 12.10.2014
Сообщений: 234

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

30.04.2016, 21:41. Показов 10459. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый Вечер. Не могли бы вы подсказать правильно ли я вообще реализую нахождение определенного интеграла методом Монте-Карло?
И еще у меня проблемы с отображением его работы на графике с помощью Chart, что-то не то выходит.
C#
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
    public partial class Lab3 : Form
    {
      static Random rand = new Random();
       static int numb = rand.Next(5, 30);
        public Lab3()
        {
            InitializeComponent();
            textBox_b.Text = Convert.ToString(Math.PI / 2);
            textBox_n.Text = Convert.ToString(numb);
        }
 
        public double f(double x)
        {
            return Math.Cos(x) / (1 + x * x);    
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            #region Input
            int n, i;
            double a, b, max, min;
 
            a = double.Parse(textBox_a.Text);
            b = double.Parse(textBox_b.Text);
            n = int.Parse(textBox_n.Text);
 
            #endregion
            #region condition
            if (f(a) >= f(b))
            {
                max = f(a); // max значение функции
                min = f(b); // min значение функции
            }
            else
            {
                max = f(b);
                min = f(a);
            }
            #endregion
            #region ...
            double[] x = new double[n];
            double[] y = new double[n];
            int count = 0;
            Random rand = new Random();
            for (i = 0; i < n; i++)
            {
                x[i] = a + (b - a) *rand.Next(5, 30); ; // random N
             chart1.Series["Series1"].Points.DataBindXY(x, y);  // Точки на граффике
 
               y[i] = min + (max - min) *rand.Next(5, 30);
                if (y[i] > f(x[i]))
                {
                    count++;
                }
            }
            double integral = (count * (b - a) * (max - min)) / n;
            richTextBox1.Text += string.Format("\nmin = {0}", min);
            richTextBox1.Text += string.Format("\nmax = {0}", max);
            richTextBox1.Text += string.Format("\nN = {0}", count);
            richTextBox1.Text += string.Format("\nIntegral is = {0}", integral);
            int A = Convert.ToInt32(a);
            double func;
            for(i = A; i<b; i++)
            {
                func = Math.Cos(i) / (1 + i * i);
            chart1.Series["Series2"].Points.AddXY(i, func);
        }
            #endregion
        }
    }
Миниатюры
Вычисление определенного интеграла методом Монте-Карло  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.04.2016, 21:41
Ответы с готовыми решениями:

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

Вычисление определенного интеграла
Как написать программу? Может есть исходники? Только не консольки. Если есть программа, буду благодарен в эквиваленте. Спасибо!

Решение определенного интеграла методом Симпсона
Поиск не помог особо Мб у кого-то есть код для решения данным методом. Очень выручите. зы сам писать пытался - не удалось.

15
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
30.04.2016, 21:58
Лучший ответ Сообщение было отмечено Andrew_Montana как решение

Решение

Monte Carlo пример
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            Console.WriteLine("Integrating function f(x) = x * x from 0 to 1\n");
            Random rand = new Random();
            int nPts = 1000000;
            double s0 = 0;
            double sigma = 0;
            double x = 0.0;
            double fcn;
            for (int i = 0; i < nPts; ++i)
            {
                x = rand.NextDouble();
                fcn = x * x;
                s0 += fcn;
                sigma += fcn * fcn;
            }
            s0 /= nPts;
            sigma /= nPts;
            sigma = Math.Sqrt(Math.Abs(sigma - s0 * s0) / nPts);
            Console.WriteLine("Analytical result           = 0.3333333....333");
            Console.WriteLine("Monte Carlo Integral result = " + s0 + " +- " + sigma);
1
 Аватар для Andrew_Montana
49 / 45 / 41
Регистрация: 12.10.2014
Сообщений: 234
30.04.2016, 22:04  [ТС]
Что у Вас в этом случае означает s0 и sigma?
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
30.04.2016, 22:29
А что отсюда разве не понятно?

Monte Carlo Integral result = " + s0 + " +- " + sigma
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10424 / 5154 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
01.05.2016, 10:04
afront, Тут же вроде не нужно на nPts делить:
C#
1
sigma = Math.Sqrt(Math.Abs(sigma - s0 * s0) / nPts);
Да и модуль тоже не нужен кстати.
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
01.05.2016, 10:27
Storm23, sigma - это стандартное отклонение, без nPts никак, да и корень можно извлечь только из положительного числа, поэтому и нужен модуль
Миниатюры
Вычисление определенного интеграла методом Монте-Карло  
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10424 / 5154 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
01.05.2016, 12:59
afront, А где вы взяли эту формулу? Она неправильная. Вот правильная формула:

https://en.m.wikipedia.org/wiki/Standard_deviation
Т.о. делить на nPts в вашем примере - не нужно.

Стандартная девиация это корень из дисперсии. А дисперсия это разность между мат ожиданием квадрата минус квадрат мат ожидания:
D=M(x^2)-(Mx)^2
Отсюда и формула выше.

А что касается модуля, то он не нужен потому что средний квадрат всегда больше квадрата среднего.

И еще, если считать оценку девиации, то перед взятием корня нужно еще умножить на N/(N-1).
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
01.05.2016, 13:50
Storm23, это пример из книжки https://www.crcpress.com/Numer... 0849374791, стр. 427, все вопросы к автору
0
548 / 479 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
02.05.2016, 23:05
"нахождение определенного интеграла методом Монте-Карло?"

В данной задаче метод "Монте-Карло" неприменим и решения мы не получим. Этот метод используется для определения вероятности наступления какого-либо события (рулетка). Кстати, есть довольно эффетивный метод вычисления числа Пи метод "Монте-Карло".
Тут же нужно просто вычислить площадь подинтенральной функции суммируя большое колучество прямоугольников с очень малым основанием.
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
03.05.2016, 08:36
"В данной задаче метод "Монте-Карло" неприменим" - https://ru.wikipedia.org/wiki/... 0%BB%D0%BE
0
548 / 479 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
03.05.2016, 16:46
afront. Я посмотрл эту статью на примере вычисления интеграла. Там делится интервал интегрирования на набольшое количаство участков и потом во всех этих участках вычисляется значения подинтегральной финкции т.д.
При вероятностном методе выбора участка получим много повторяющихся значений и искажение реультата.
А чтобы избежать этого, нужно использовать цикл и это уже не метод Монте Карло.
А, например, при вычислении числа Пи, случайным образом генерируются координаты точек.
Отношения количества попаданий точек внуть круга, вписанного в квадрат, к общему ноличеству точек и дает
Пи/4
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10424 / 5154 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
04.05.2016, 08:42
Цитата Сообщение от afront Посмотреть сообщение
это пример из книжки https://www.crcpress.com/Numer... 0849374791, стр. 427, все вопросы к автору
Ну я так и сделал
Автор согласен что это ошибка, обещает исправить во втором издании.
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
04.05.2016, 10:00
Storm23, это хорошо, в книжке много ошибок, к сожалению
0
0 / 0 / 0
Регистрация: 18.02.2019
Сообщений: 1
18.02.2019, 19:08
Можете скинуть этот проект?
0
548 / 479 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
18.02.2019, 23:15
Andrew_Montana, Давняя задача. Для вычисления интеграла метод МонтеКарло неприменим. Покажите сам интеграл, далее
стандартный метод и получите решение с любой точностью.
0
548 / 479 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
21.02.2019, 02:20
Andrew_Montana, Повозился пару дней и ,к счастью, нашел прием вычисления интеграла методом MonteCarlo
Необходимо только иметь значение подинтегральной функции
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.02.2019, 02:20
Помогаю со студенческими работами здесь

Нахождение определенного интеграла методом трапеций
Добрый вечер! Помогите с кодом на С# для нахождения определенного интеграла методом трапеций. Мы задаем пределы интегрирования и...

Расчет определенного интеграла методом Монте Карло. Перенос с TurboPascal
Привет, друзья! Столкнулся с проблемой реализации метода Монте Карло для нахождения значения определенного интеграла на c#. Нашел в...

Потоки. Вычисление числа пи методом Монте-Карло
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using...

Вычисление площади фигуры на фотоснимке методом Монте-Карло
Дан фотоснимок электронного микроскопа с изображением некоторой фигуры. Фотоснимок предварительно обрабатывается и переводится в монохром...

Вычисление определённого интеграла методом трапеции
Программа вычисляет определённый интеграл методом трапеции -&gt;Не выводит значения переменных на экран&lt;- using System; using...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru