Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/177: Рейтинг темы: голосов - 177, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 27.10.2010
Сообщений: 29

Метод Монте-Карло

15.12.2012, 22:03. Показов 34588. Ответов 18
Метки faq+ (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, я хотела бы попросить помочь разобраться с методом Монте-Карло для вычисления площади. Необходимо взять две кривые, не пересекающиеся, провести к ним касательные, соединить до прямоугольника, и вычислить площадь между кривыми. Формула следующая: S=m/n*Sпрямоугольника, где m-количество точек, попавших в область, площадь которой надо найти, а n количество набросанных точек (взять, например, 1000 штук). Вот такая задачка). Буду очень благодарна за помощь.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.12.2012, 22:03
Ответы с готовыми решениями:

Метод Монте-Карло
Необходимо методом Монте-Карло подсчитать объём трёхмерного цилиндра. Как действовать дальше, есть только мысли в разброс n=1000; ...

Метод Монте-Карло
Добрый вечер! Я хотел бы попросить помочь разобраться с методом Монте-Карло. Есть творческая задачка которую нужно реализовать в matlab....

Метод Монте-Карло
Здравствуйте. Помогите пожалуйста решить эти задачи в matlab. Нужно решить до завтрашнего утра, а я совершенно не знаком с данным методом,...

18
49 / 49 / 3
Регистрация: 07.12.2012
Сообщений: 201
Записей в блоге: 1
16.12.2012, 02:42
Напишите пожалуйста оригинал условия.
0
0 / 0 / 0
Регистрация: 27.10.2010
Сообщений: 29
16.12.2012, 17:16  [ТС]
Это и есть оригинал, могу только нарисовать картинку и приложить ее к теме...
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
17.12.2012, 09:45
Лапка, ну ты бы хоть сами ф-ции написала, а то что решать то?
0
0 / 0 / 0
Регистрация: 27.10.2010
Сообщений: 29
17.12.2012, 15:53  [ТС]
)))Функции можно любые взять, не имеет значения, главное чтобы не пересекались))
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
17.12.2012, 20:20
Лучший ответ Сообщение было отмечено как решение

Решение

Ну давай попробуем настрочу кой-что пока еду в маршрутке, а Кудзе-кун подправит если что
Matlab M
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
clear, clc
% определяем кривые
f1 = @(x) x.^2 + 2;
f2 = @(x) -exp(abs(x)); 
% пределы интегрирования 
a = -3;
b = 2;
% определяем диапазон значений y
x = linspace(a,b,500);
y1 = f1(x);
y2 = f2(x);
maxy = max( [max(y1), max(y2)] ); % максимальное значение ф-ций
miny = min( [min(y1), min(y2)] ); % минимальное значение ф-ций
S = (b-a)*(maxy-miny); % площадь прямойгольной области
 
% начинаем Монте-Кралить
N = 5000; % число точек
x = a + (b-a)*rand(1,N);
y = miny + (maxy-miny)*rand(1,N);
L1 = f1(x)<=y; % логический вектор: если точка ниже перв. кривой, то 1
n1 = sum( L1 ); % кол-во точек под первой кривой
L2 = f2(x)<=y; % логический вектор: если точка ниже второй. кривой, то 1
n2 = sum( L2 ); % кол-во точек под второй кривой
m = abs(n1-n2); % кол-во точек между кривыми
I = m/N*S % значение интеграла
 
% рисуем облака! ^_^
x1 = x(L1);
y1 = y(L1);
x2 = x(L2);
y2 = y(L2);
plot(x1,y1,'.r',x2,y2,'.g','EraseMode','xor');
4
0 / 0 / 0
Регистрация: 27.10.2010
Сообщений: 29
18.12.2012, 14:01  [ТС]
Спасибо большое!

Добавлено через 23 минуты
Извините за глупый вопрос, а что значит @(x), и abs - это модуль комплексного числа? Просто не пойму вторую функцию...
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
18.12.2012, 14:21
f = @(x) - так мы объявляем функцию f(x)
abs - это модуль, в данном случае просто модуль числа |x|
1
0 / 0 / 0
Регистрация: 27.10.2010
Сообщений: 29
18.12.2012, 17:21  [ТС]
Спасибочки)
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
18.12.2012, 17:32
на здоровьечко))))
0
 Аватар для Triton.cpp
35 / 35 / 2
Регистрация: 14.04.2011
Сообщений: 107
10.01.2013, 00:35
А как теперь преобразовать вышеприведенный алгоритм для того, чтобы:
1. вычислить https://www.cyberforum.ru/cgi-bin/latex.cgi?\int_{0}^{4}cos(\frac{x}{2})+5(число точек = 2000);
2. построить график подынтегральной функции;
3. отметить на графике «случайные» точки, образованные при решении.

Добавлено через 1 час 3 минуты
Подправил текст программы — интеграл вычисляется верно, но с построением графика функции проблема.
Matlab M
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
clear, clc
% определяем кривые
f1 = @(x) cos(x./2) + 5;
f2 = @(x) 0; 
% пределы интегрирования 
a = 0; b = 4;
% определяем диапазон значений y
x = linspace(a,b,500);
y1 = f1(x); y2 = f2(x);
maxy = max( [max(y1), max(y2)] ); % максимальное значение ф-ций
miny = min( [min(y1), min(y2)] ); % минимальное значение ф-ций
S = (b-a)*(maxy-miny); % площадь прямойгольной области
 
N = 2000; % число точек
x = a + (b-a)*rand(1,N);
y = miny + (maxy-miny)*rand(1,N);
L1 = f1(x)<=y; % логический вектор: если точка ниже перв. кривой, то 1
n1 = sum( L1 ); % кол-во точек под первой кривой
L2 = f2(x)<=y; % логический вектор: если точка ниже второй. кривой, то 1
n2 = sum( L2 ); % кол-во точек под второй кривой
m = abs(n1-n2); % кол-во точек между кривыми
I = m/N*S % значение интеграла
 
% Построение точек
x1 = x(L1); y1 = y(L1);
x2 = x(L2); y2 = y(L2);
plot(x1,y1,'.r',x2,y2,'.g','EraseMode','xor'); 
 
% Построение графика функции
x3 = 0:0.01:4;
y3 = cos(x./2)+5;
plot(x3,y3)
0
 Аватар для Triton.cpp
35 / 35 / 2
Регистрация: 14.04.2011
Сообщений: 107
10.01.2013, 00:51
Для построения графика изменил последние строки:
Matlab M
1
2
3
4
5
6
% Построение графика функции
hold on;
f = inline('cos(x./2)+5');
x3 = 0:0.01:4;
y3 = f(x3);
plot(x3,y3)
2
1 / 1 / 0
Регистрация: 27.02.2013
Сообщений: 16
27.02.2013, 22:54
Доброго времени суток всем.
Воспользовалась вашим кодом, но для того,чтоб построить 3 функции, и посчитать интеграл. В общем вот как он выглядит у меня сейчас.. Работает, но не так,как хотелось бы.
Matlab M
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
clear, clc
% определяем кривые
f1 = @(x) 2*(2*x-1);
f2 = @(x) -2*(2*(x-1)-1);
f3 = @(x) -2*(sin(2*pi*(x-2))+1);
% пределы интегрирования 
a = 0;
b = 3;
% определяем диапазон значений y
x = linspace(a,b,500);
y1 = f1(x);
y2 = f2(x);
y3 = f3(x);
maxy = max( [max(y1), max(y2), max(y3)] ); % максимальное значение ф-ций
miny = min( [min(y1), min(y2), min(y3)] ); % минимальное значение ф-ций
S = (b-a)*(maxy-miny); % площадь прямойгольной области
 
% Метод Монте-Карло
N = 5000; % число точек
x = a + (b-a)*rand(1,N);
y = miny + (maxy-miny)*rand(1,N);
L1 = f1(x)<= y; % логический вектор: если точка ниже перв. кривой, то 1
n1 = sum( L1 ); % кол-во точек под первой кривой
L2 = f2(x)<= y; % логический вектор: если точка ниже второй. кривой, то 1
n2 = sum( L2 );% кол-во точек под второй кривой
L3 = f3(x)<= y;
n3 = sum( L3 );
m = abs(n1-n2-n3); % кол-во точек между кривыми
I = m/N*S % значение интеграла
 
% заполняем точками
x1 = x(L1);
y1 = y(L1);
x2 = x(L2);
y2 = y(L2);
x3 = x(L3);
y3 = y(L3);
plot(x1,y1,'.r',x2,y2,'.g',x3,y3,'.r','EraseMode','xor');
может быть есть какие-то недочеты?? Если возможно,то объясните(
А то я нуб(
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
28.02.2013, 08:00
Лапа, а зачем там аж три функции?
*когда имеем дело с двумя ф-циями, то находим площадь между ними, а тут как?
0
1 / 1 / 0
Регистрация: 27.02.2013
Сообщений: 16
28.02.2013, 09:35


У нас по заданию три функции.
по сути, график их в матлабе выглядит так.

а по заданию:
разработать программу в среде MATLAB, вычисляющую величину F методом Монте-Карло при заданном числе экспериментов.
+
с помощью разработанной программы вычислить определенный интеграл F при N=2^i экспериментах, где i=0,...,14
Миниатюры
Метод Монте-Карло  
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
28.02.2013, 18:20
Солнце, дык у тебя функция одна! просто она кусочная! получилось даже проще, чем у Olya13254
Вот подправил чуток, гляди:
Matlab M
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
clear, clc
% определяем функцию
f1 = @(x) 2*(2*x-1).*((0<=x)&(x<1)) + ...
    -2*(2*(x-1)-1).*((1<=x)&(x<2)) + ...
    -2*(sin(2*pi*(x-2))+1).*((2<=x)&(x<3));
% пределы интегрирования 
a = 0;
b = 3;
% определяем диапазон значений y
x0 = linspace(a,b,500);
y0 = f1(x0);
maxy =max(y0); % максимальное значение ф-ций
miny = min(y0); % минимальное значение ф-ций
S = (b-a)*(maxy-miny); % площадь прямойгольной области
 
% Метод Монте-Карло
N = 5000; % число точек
x = a + (b-a)*rand(1,N);
y = miny + (maxy-miny)*rand(1,N);
L1 = (y<=f1(x)); % логический вектор: если точка ниже перв. кривой, то 1
m = sum( L1 ); % кол-во точек под кривой
I = m/N*S; % значение интеграла
% заполняем точками
x1 = x(L1);
y1 = y(L1);
plot(x,y,'.y',x1,y1,'.r',x0,y0,'b','linewidth',2); 
 
% А теперь расчет по длинам
for i = 1:14
    N = 2^i;
    x = a + (b-a)*rand(1,N);
    y = miny + (maxy-miny)*rand(1,N);
    L1 = (y<=f1(x)); % логический вектор: если точка ниже перв. кривой, то 1
    m = sum( L1 ); % кол-во точек под кривой
    F(i) = m/N*S; % значение интеграла
end
F'


Первая часть - рисование графика для 5000 экспериментов, а вторая - расчет интеграла, для "N=2^i экспериментов, где i=0,...,14"
2
1 / 1 / 0
Регистрация: 27.02.2013
Сообщений: 16
28.02.2013, 20:18
ааааааа))) спасибо огромное))))))0 просто чудо)))

Спасибо, спасибо, спасибо)))
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
28.02.2013, 20:33
От ты чудо! на здоровьечко!
1
0 / 0 / 0
Регистрация: 06.09.2018
Сообщений: 1
16.04.2019, 19:52
Добрый вечер. Скажите как модифицировать представленный выше код, чтобы взять неберущийся тройной интеграл?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.04.2019, 19:52
Помогаю со студенческими работами здесь

Метод Монте Карло - Азиатские опционы
На Матлабе: надо с помощью метода Монте Карло найти цену Азиатского опциона (предполагается, что рассматриваем на примере модели...

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

Написать программу, которая реализует метод проб и ошибок Монте-Карло
Доброго времени суток, прошу помочь с написанием программы ,которая реализует метод проб и ошибок Монте-Карло, в которой плюс ко всему...

Вычисление интеграла методом Монте-Карло
Вычислить интеграл методом Монте-Карло: U menia jescio odna problema :) Posledniaja :) Vizu vy problem s anglijskim ne imejete :) cto...

Расчет объема методом Монте-Карло
Шаг за шагом :) Не пойму, почему вчера матлаб не принимал выражение, потому что сейчас не ругается даже на точки. Ну да ладно. У меня...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru