- 积分
- 13
- 注册时间
- 2007-8-20
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2010-11-11 20:12:23
|
显示全部楼层
来自 浙江杭州
本帖最后由 pasuka 于 2010-11-11 20:37 编辑
- function varargout = compute_pi(varargin)
- % *************************************************************************
- % 使用蒙特卡洛方法计算圆周率
- % *************************************************************************
- % 程序输入输出说明:
- % 输入
- % -------------------------------------------------------------------------
- % 生成的单位方形区域内随机点的数量
- % 若没有输入,默认为1e4个随机点
- % -------------------------------------------------------------------------
- % 输出
- % 程序计算得到的圆周率
- % 计算结果和matlab内置圆周率的误差
- % -------------------------------------------------------------------------
- % 改进自baggio1987的代码
- % http://forum.simwe.com/thread-958188-1-1.html
- % by pasuka@simwe 11/11/2010
- % 判断输入的随机数的个数
- if isequal(nargin,1)
- num = varargin{1};
- else
- num = 1e4;
- end
- % 生成随机向量
- x1 = rand(num,1);
- x2 = rand(num,1);
- % 计算随机点到圆心的距离
- distance2 = (x1-0.5).^2+(x2-0.5).^2;
- % 找出单位圆内的点的个数
- % 增加一个无穷小量,预防出现在圆周上的情况
- count = length(find(distance2<=0.25 + eps));
- % 计算圆周率
- my_pi = 4*count/num;
- rectangle %画单位正方形
- rectangle('Curvature', [1 1]) %画单位圆
- axis equal %设置坐标轴等距
- hold on
- % 只绘制前1000个点,便于显示
- n2 = 1000;
- plot(x1(1:n2),x2(1:n2),'.');
- ss = ['\fontsize{16}蒙特卡洛方法计算得到的','{\fontsize{18}\color{red}','\pi}=' num2str(my_pi)];
- title(ss);
- % 输出结果与matlab内置圆周率的误差
- varargout = {my_pi,my_pi-pi};
- return
- end
复制代码 对lz的程序做了改进 |
评分
-
2
查看全部评分
-
|