蒙特卡洛方法(Monte Carlo,MC)

目录

[1 序言](#1 序言)

[2 Monte Carlo法计算积分](#2 Monte Carlo法计算积分)

[3 最优化计算Monte Carlo法](#3 最优化计算Monte Carlo法)


1 序言

蒙特卡罗方法(Monte Carlo)是由冯诺依曼和乌拉姆等人发明的,"蒙特卡罗"这个名字是出自摩纳哥的蒙特卡罗赌场,这个方法是一类基于概率的方法的统称。是一种应用随机数来进行计算机模拟的方法,此方法随研究的系统进行随机观察抽样,通过对样本值的观察统计,求得所研究系统的某些参数。

2 Monte Carlo法计算积分

考虑二重积分

根据其几何意义,它是以f(x,y)为曲面顶,A为底的柱体C的体积。用下列简单思路求的近似值:假设C被包在几何体D的内部,D的体积已知,若在D内产生1个均分布的随机数,那么

P (随机数落在C 内)C 的体积/D的体积

现用Monte Carlo法计算:

Matlab 复制代码
% Monte Carlo Integration for f(x, y) = sqrt(1 - x^2) over x^2 + y^2 <= 1
clc; clear;

% Number of random points
N = 1e6; % You can increase this for better accuracy

% Initialize sum of function values
f_sum = 0;

% Loop to generate random points and calculate contributions
for i = 1:N
    % Generate random (x, y) within the bounding box [-1, 1] x [-1, 1]
    x = -1 + 2*rand(); % Random x in [-1, 1]
    y = -1 + 2*rand(); % Random y in [-1, 1]
    
    % Check if the point is inside the circle
    if x^2 + y^2 <= 1
        f_sum = f_sum + sqrt(1 - x^2); % Accumulate the function value
    end
end

% Calculate area of the bounding box
A_box = 4; % The bounding box [-1, 1] x [-1, 1]

% Calculate the integral estimate
integral_value = A_box * f_sum / N;

% Display result
fprintf('Estimated value of the integral: %.6f\n', integral_value);

2.1 代码解释:

1)随机点生成:

  • 在 [−1,1]×[−1,1] 内均匀生成随机点。
  • 使用条件筛选落在单位圆内的点。

2)函数值累加:

  • 对满足条件的点,计算 并累加到 f_sum

3)积分估计公式:

  • 估计积分值为:

  • 这里的区域面积 Abox=4 是整个采样的矩形面积。

4)效率:

  • N越大,估计值越准确。
  • 通过筛选 ,只在实际目标区域内计算函数值。

2.2 运算结果

|---------------------------------|---------------------------------|
| | |
| N = 1e2 | 2.655043 |
| N = 1e4 | 2.685272 |
| N = 1e6 | 2.666568 |
| N = 1e8 | 2.666756 |

3 最优化计算Monte Carlo法

求下列函数的最大值:

为了方便理解,先绘制这个函数:

Matlab 复制代码
% Define the function f(x)
f = @(x) (1 - x.^3) .* sin(3 * x);

% Define the range for x
x = linspace(-2*pi, 2*pi, 1000); % Generate 1000 points in the range [-2*pi, 2*pi]

% Compute the function values
y = f(x);

% Plot the function
figure;
plot(x, y, 'b-', 'LineWidth', 1.5);
grid on;

% Add labels and title
xlabel('x');
ylabel('f(x)');
title('Plot of f(x) = (1 - x^3)sin(3x)');
legend('f(x) = (1 - x^3)sin(3x)', 'Location', 'Best');

matlab运行结果如下:

在给出计算代码:

Matlab 复制代码
% Optimization using Monte Carlo for f(x) = (1 - x^3) * sin(3x)
clc; clear;

% Number of random samples
N = 1e6; % Increase this for higher accuracy

% Define the function
f = @(x) (1 - x.^3) .* sin(3 * x);

% Generate random samples in the range [-2*pi, 2*pi]
x_samples = -2*pi + (2*pi - (-2*pi)) * rand(N, 1);

% Evaluate the function for each sample
f_values = f(x_samples);

% Find the maximum function value
f_max = max(f_values);

% Find the corresponding x value(s) for the maximum
x_max = x_samples(f_values == f_max);

% Display results
fprintf('Maximum value of f(x): %.6f\n', f_max);
fprintf('At x = %.6f (one of the possible values)\n', x_max(1));

3.1 代码解释

1)随机采样:

  • 使用rand(N,1)生成N个均匀分布的随机数映射到区间[-2pi,2pi]中,作为函数的自变量x值。

2)函数评估:

  • 定义函数,计算每个采样点上的函数值

3)最大值搜索:

  • 使用max函数找到函数值中的最大值
  • 找到与最大值对应的x值。

4)输出结果:

  • 输出最大值及对应的一个可能的必值(可能有多个全局最大值点)

2.2 运算结果

|---------------------------------|---------------------------------------|---------------------------------|
| | | |
| N = 1e2 | 191.360411 | 5.858119 |
| N = 1e4 | 194.903941 | -5.814489 |
| N = 1e6 | 194.906195 | -5.816071 |
| N = 1e8 | 194.906195 | -5.816063 |


注:1)本篇内容均为对《MATLAB建模与仿真》(周品 赵新芬 编著,国防工业出版社)摘录与个人归纳总结,如需要更加详细了解,可阅读原书"第8章 随机模拟和统计分析"部分。

2)代码由chat gpt生成。

相关推荐
bylander12 小时前
【论文阅读】通义实验室,VACE: All-in-One Video Creation and Editing
论文阅读·人工智能·计算机视觉·音视频
nju_spy12 小时前
复杂结构数据挖掘(二)关联规则挖掘 Association rule mining
人工智能·数据挖掘·关联规则挖掘·apiriori·dhp·fp-growth·高频集
刀客Doc12 小时前
刀客doc:亚马逊广告再下一城,拿下微软DSP广告业务
大数据·人工智能·microsoft
掘金安东尼13 小时前
Google+禁用“一次性抓取100条搜索结果”,SEO迎来变革?
人工智能
FIN666813 小时前
射频技术领域的领航者,昂瑞微IPO即将上会审议
前端·人工智能·前端框架·信息与通信
小麦矩阵系统永久免费13 小时前
短视频矩阵系统哪个好用?2025最新评测与推荐|小麦矩阵系统
大数据·人工智能·矩阵
Mr.Lee jack13 小时前
【vLLM】源码解读:高性能大语言模型推理引擎的工程设计与实现
人工智能·语言模型·自然语言处理
IT_陈寒13 小时前
Java性能优化:这5个Spring Boot隐藏技巧让你的应用提速40%
前端·人工智能·后端
聪明的笨猪猪13 小时前
Java Spring “MVC ”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
MicroTech202514 小时前
微算法科技(NASDAQ:MLGO)开发延迟和隐私感知卷积神经网络分布式推理,助力可靠人工智能系统技术
人工智能·科技·算法