matlab蒙特卡洛计算圆周率并且绘制随n值增加的误差图
时间: 2024-05-07 22:18:55 浏览: 61
实现蒙特卡洛方法计算圆周率,可以通过在正方形内随机生成点,并计算落入圆内的点数,从而估计圆周率。具体实现如下:
```matlab
n = 10000; % 生成点的个数
x = rand(n,1)*2-1; % 在正方形内随机生成x坐标
y = rand(n,1)*2-1; % 在正方形内随机生成y坐标
d = x.^2 + y.^2; % 计算每个点到原点的距离的平方
count = sum(d<=1); % 统计落在圆内的点的个数
pi_est = 4*count/n; % 估计圆周率
```
为了绘制随n值增加的误差图,我们可以将上述代码封装成一个函数,并在主函数中循环调用该函数,同时记录每次估计的圆周率和误差值。具体实现如下:
```matlab
function [pi_est, err] = monte_carlo_pi(n)
x = rand(n,1)*2-1;
y = rand(n,1)*2-1;
d = x.^2 + y.^2;
count = sum(d<=1);
pi_est = 4*count/n;
err = abs(pi_est - pi);
end
n_list = [10, 100, 1000, 10000, 100000]; % 生成点的个数列表
pi_list = zeros(size(n_list)); % 估计的圆周率列表
err_list = zeros(size(n_list)); % 误差列表
for i = 1:length(n_list)
[pi_list(i), err_list(i)] = monte_carlo_pi(n_list(i));
end
figure;
plot(n_list, err_list);
xlabel('n');
ylabel('error');
title('Monte Carlo Estimation of Pi');
```
运行该脚本,即可得到随n值增加的误差图。其中,横轴为生成点的个数n,纵轴为估计值与真实值之间的误差。可以看出,随着n值的增加,误差逐渐减小,符合蒙特卡洛方法的收敛性质。
注:上述代码中的pi为MATLAB内置的圆周率常数。
阅读全文