用蒙特卡罗方法计算π值实验报告

合集下载

高性能计算实验报告

高性能计算实验报告

高性能计算实验报告引言高性能计算是计算机科学领域的一个重要研究领域,在许多科学和工程领域有着广泛的应用。

本实验旨在通过使用并行计算技术,在一个实际问题上展示高性能计算的能力和优势。

实验背景在本实验中,我们选择了一个经典的问题:计算圆周率(π)的近似值。

计算圆周率是计算机科学中的一个重要问题,也是高性能计算的一个经典案例。

我们将使用蒙特卡罗方法来近似计算圆周率。

实验步骤1.生成随机点:首先,我们需要生成大量的随机点。

我们选择使用伪随机数生成器来生成这些点。

在本实验中,我们将使用Python的random库来生成均匀分布的随机点。

2.判断点的位置:对于生成的每个随机点,我们需要判断它是否在一个圆内。

为了做到这一点,我们可以计算点到圆心的距离,并检查是否小于等于圆的半径。

如果是,则该点在圆内。

3.统计在圆内的点数:我们需要记录下在圆内的点的数量,以便进行进一步的计算。

在本实验中,我们使用一个计数器来实现这一功能。

4.计算圆周率的近似值:通过统计在圆内的点的数量和总生成的点数,我们可以计算圆周率的近似值。

根据蒙特卡罗方法的原理,圆的面积与正方形的面积的比例等于在圆内的点的数量与总生成的点数的比例。

根据圆的面积公式,我们可以得到一个近似的圆周率值。

5.重复实验:为了提高准确性,我们需要进行多次实验。

每次实验,我们都会使用不同的随机种子来生成随机点。

通过取多次实验的平均值,我们可以得到更接近真实圆周率的近似值。

实验结果与分析我们进行了10次实验,每次实验生成了1000000个随机点。

下表显示了每次实验的圆周率近似值:实验次数圆周率近似值1 3.1418742 3.1424813 3.1416224 3.1417865 3.1420406 3.1420127 3.1413368 3.1418329 3.14184410 3.141643通过计算上述结果的平均值,我们得到圆周率的近似值为3.141772。

结论本实验通过使用蒙特卡罗方法来计算圆周率的近似值,展示了高性能计算的能力。

蒙特卡洛方法求解圆周率

蒙特卡洛方法求解圆周率

蒙特卡洛方法求解圆周率一、引言圆周率是数学中非常重要的一个常数,其精确值无法被表示为有限小数或分数。

因此,计算圆周率一直是数学家和计算机科学家的研究方向之一。

本文将介绍蒙特卡洛方法求解圆周率的具体步骤。

二、蒙特卡洛方法简介蒙特卡洛方法是一种基于随机抽样的统计模拟方法,其名称来源于摩纳哥著名度假胜地蒙特卡洛。

该方法可以用于估计各种复杂问题的解,如概率、积分、微分方程等。

在本文中,我们将使用蒙特卡洛方法来估计圆周率。

三、实现步骤1. 确定正方形和圆的关系首先,我们需要确定一个正方形和一个内切于该正方形的圆之间的关系。

这可以通过以下公式来实现:x^2+y^2<=1,其中x和y是在正方形内随机生成的点。

2. 生成随机点接下来,我们需要在正方形内生成大量随机点。

通过生成大量随机点并统计落在内切圆内部的点数,我们可以估算出圆的面积。

根据圆的面积和半径的关系,我们可以计算出圆周率的近似值。

3. 统计落在内切圆内部的点数对于在正方形内生成的每个随机点,我们都需要计算它是否落在内切圆内部。

如果一个点满足x^2+y^2<=1,则该点被认为是落在内切圆内部。

我们需要统计所有落在内切圆内部的点数。

4. 计算估算值通过统计落在内切圆内部的点数和总随机点数,我们可以得到一个估算值。

该估算值等于(落在圆中的点数/总随机点数)* 4。

5. 提高精度为了提高结果精度,我们需要增加随机点数量。

当增加随机点数量时,我们可以看到结果越来越接近真实值。

四、实现示例下面是使用Python编程语言实现蒙特卡洛方法求解圆周率的示例代码:```import randomdef estimate_pi(n):num_point_circle = 0num_point_total = 0for _ in range(n):x = random.uniform(0, 1)y = random.uniform(0, 1)distance = x**2 + y**2if distance <= 1:num_point_circle += 1num_point_total += 1return 4 * num_point_circle / num_point_totalprint(estimate_pi(100000))```该代码将生成100000个随机点,并统计落在内切圆内部的点数。

实验二 怎样计算Pi

实验二 怎样计算Pi

数学实验实验报告学院:数学与统计学院班级:数学与应用数学3班学号:0314姓名:康萍时间:实验二怎样计算一、实验目的分别用下列三种方法计算π的近似值,并比较三种方法的精确度: 数值积分法:通过使用编写梯形公式和辛普森公式的程序语言计算π。

泰勒级数法:利用反正切函数泰勒级数计算π。

蒙特卡罗(Monte Carlo )法:通过使用编写蒙特卡罗公式的程序语言来计算π。

二、实验环境基于Windows 环境下的软件。

三、实验的基本理论和方法1、数值积分法以单位圆的圆心为原点建立直角坐标系,则单位圆在第一象限内的部分G 是一个扇形,由曲线])1,0[(12∈-=x x y 及两条坐标轴围成,它的面积4π=S 。

算出了S 的近似值,它的4倍就是π的近似值。

而扇形面积S 实际上就是定积分4112π=-⎰dx x 。

与π有关的定积分有很多,比如211x +的定积分411102π=+⎰dx x 就比21x -的定积分更容易计算,更适合于用来计算π。

一般地,要计算定积分()dx x f ba ⎰,也就是计算曲线()x f y =与直线b x a x y ===,,0所围成的曲边梯形G 的面积S 。

为此,用一组平行于y 轴的直线()b x x x x x a n i x x n n i =<<<<<=-≤≤=-1210,11 将曲边梯形T 分成n 个小曲边梯形,总面积S 分成这些小曲边梯形的面积之和。

如果取n 很大,使每个小曲边梯形的宽度都很小,可以将它上方的边界()()i i x x x x f ≤≤-1近似的看作直线段,将每个小曲边梯形近似的看作梯形来求面积,就得到梯形公式。

如果更准确些,将每个小曲边梯形的上边界近似的看作抛物线段,就得到辛普森公式。

具体公式如下:梯形公式 设分点11,,-n x x 将积分区间],[b a 分成n 等份,即()n i n a b i a x i ≤≤-+=0,/。

Monte Carlo方法计算Pi

Monte Carlo方法计算Pi

实验Monte Carlo方法计算Pi实验要求:以OpenMP实现Monte Carlo计算Pi的并行程序实验分析:通过蒙特卡罗算法计算圆周率的主导思想是:统计学(概率)一个正方形有一个内切圆,向这个正方形内随机的画点,则点落在圆内的概论为P=圆面积/正方形面积。

1. 在一个平面直角坐标系下,在点(1,1)处画一个半径为R=1的圆,以这个圆画一个外接正方形,其边长为R=1(R=1时,圆面积即Pi)。

2. 随机取一点(X,Y)使得0<=X<=2R并且0<=Y<=2R,即随机点在正方形内。

3. 判断点是否在圆内,通过公式(X-R)(X-R)+(Y-R)(Y-R)<R*R计算。

4. 设所有点的个数为N,落在圆内的点的个数为M,则P=M/N=4*R*R/Pi*R*R=4/PiPi=4*N/M当实验次数越多(N越大),所计算出的Pi也越准确。

但计算机上的随机数毕竟是伪随机数,当取值超过一定值,也会出现不随机现象,因为伪随机数是周期函数。

如果想提高精度,最好能用真正的随机数生成器(需要更深的知识)。

运行结果采用并行采用串行代码:#include"stdafx.h"#include<stdio.h>#include<omp.h>#include<stdlib.h>#include<time.h>#define NUM_THREADS 4int main(){long long max=10000000;long long i,count=0;double x,y,bulk,starttime,endtime;time_t t;starttime=clock();// 产生以当前时间开始的随机种子srand((unsigned) time(&t));omp_set_num_threads(NUM_THREADS);#pragma omp parallel for reduction(+:count) private(x,y)for(i=0;i<max;i++){x=rand(); x=x/32767;y=rand(); y=y/32767;if((x*x+y*y)<=1)count++;}bulk=4*(double(count)/max);endtime= clock();printf("pi is %f \n", bulk);printf("Running time is %f \n", endtime-starttime);return 0;}加红色代码之前为串行代码,加上红色代码之后为并行代码。

21——matlab——用蒙特卡罗方法计算pi的值

21——matlab——用蒙特卡罗方法计算pi的值

用蒙特卡罗( Monte Carlo ) 投点法计算 的值程序:n=10000;m=0; a=2;for i=1:nx=rand(1)*a/2;y=rand(1)*a/2;if x^2+y^2<=(a/2)^2m=m+1;endendfprintf('蒙特卡罗投点法计算的pi为:%f\n',4*m/n)结果:蒙特卡罗投点法计算的pi为:3.117200蒙特卡罗投点法计算的pi为:3.132400蒙特卡罗投点法计算的pi为:3.165600蒙特卡罗投点法计算的pi为:3.135200蒙特卡罗投点法计算的pi为:3.146800蒙特卡罗投点法计算的pi为:3.140400蒙特卡罗投点法计算的pi为:3.114800蒙特卡罗投点法计算的pi为:3.117200 蒙特卡罗投点法计算的pi为:3.154800 蒙特卡罗投点法计算的pi为:3.140400 蒙特卡罗投点法计算的pi为:3.121200 蒙特卡罗投点法计算的pi为:3.134400 蒙特卡罗投点法计算的pi为:3.122800 蒙特卡罗投点法计算的pi为:3.127600 蒙特卡罗投点法计算的pi为:3.147200 蒙特卡罗投点法计算的pi为:3.145200 蒙特卡罗投点法计算的pi为:3.158400 蒙特卡罗投点法计算的pi为:3.147600 蒙特卡罗投点法计算的pi为:3.147600 蒙特卡罗投点法计算的pi为:3.146400 蒙特卡罗投点法计算的pi为:3.112000 蒙特卡罗投点法计算的pi为:3.180000 蒙特卡罗投点法计算的pi为:3.120000 蒙特卡罗投点法计算的pi为:3.153600 蒙特卡罗投点法计算的pi为:3.144000 蒙特卡罗投点法计算的pi为:3.148000 >>。

用蒙特卡罗方法计算π值实验报告

用蒙特卡罗方法计算π值实验报告

本科生实验报告实验课程蒙特卡罗模拟学院名称核技术与自动化工程学院专业名称核技术及应用学生姓名王明学生学号**********指导教师邮箱****************实验成绩二〇一七年九月二〇一八年一月实验一、选择一种编程语言模拟出π的值一、实验目的1、理解并掌握蒙特卡罗模拟的基本原理;2、运用蒙特卡洛思想解决实际问题;3、分析总结蒙特卡洛解决问题的优缺点。

二、实验原理用蒙特卡洛思想计算π的值分为如下几部:第一步构建几何原理:构建单位圆外切正方形的几何图形。

单位圆的面积为S0=π,正方形的面积S1=4;第二步产生随机数进行打把:这里用MATLAB产生均匀随机数。

分别生产均匀随机数(x,y)二维坐标。

X,y的范围为-1到1.总共生成N个坐标(x,y).统计随机生成的坐标(x,y)在单位圆内的个数M。

第三步打把结构处理:根据S0/S1=M/N计算出π的值。

因此π=4*M/N。

第四步改变N的值分析π的收敛性:总数1000开始打把,依次增长10倍到1百万个计数。

三、实验内容1、用matlab编写的实验代码,总计数率为1000。

zfx_x=[1,-1,-1,1,1];zfx_y=[1,1,-1,-1,1];plot(zfx_x,zfx_y)axis([-3 3 -3 3]);hold on;r=1; theta=0:pi/100:2*pi;x=r*cos(theta); y=r*sin(theta);rho=r*sin(theta);figure(1)plot(x,y,'-')N=1000;mcnp_x=zeros(1,N);mcnp_y=zeros(1,N);M=0;for i=1:Nx=2*(rand(1,1)-0.5);y=2*(rand(1,1)-0.5);if((x^2+y^2)<1)M=M+1;mcnp_x(i)=x;mcnp_y(i)=y;endendplot(mcnp_x,mcnp_y,'.')PI1=4*M/N;2、用matlab绘制的图形四、实验结果1.当模拟总计数为1000时,某次计算结果: PI=3.128。

蒙特卡洛方法求圆周率python

蒙特卡洛方法求圆周率python

蒙特卡洛方法求圆周率python以蒙特卡洛方法求圆周率蒙特卡洛方法是一种基于随机数的数值计算方法,通过生成大量随机数来模拟实际问题,从而得到问题的近似解。

在计算圆周率的问题中,蒙特卡洛方法可以被应用于估计圆周率的数值。

蒙特卡洛方法求圆周率的基本思想是,通过随机点的统计性质来估计圆的面积,并进而得到圆的半径和周长。

具体地说,我们可以在一个正方形内随机生成大量的点,然后计算这些点中落在圆内的比例。

根据几何关系,我们可以得到圆的面积与正方形的面积的比值等于圆内点的数量与总点的数量的比值。

由于我们已知正方形的边长,通过估计圆的面积,我们可以进一步估计圆的半径和周长。

我们需要生成大量的随机点。

在Python中,我们可以使用random模块来生成随机数。

假设我们要生成n个点,我们可以使用random.random()函数来生成0到1之间的随机数,然后将其映射到正方形的边界上。

具体代码如下:```pythonimport randomdef generate_points(n):points = []for _ in range(n):x = random.random()y = random.random()points.append((x, y))return points```接下来,我们需要统计落在圆内的点的数量。

根据几何关系,我们可以判断一个点是否落在圆内。

假设圆的半径为r,我们可以使用勾股定理来判断点的坐标与圆心的距离是否小于等于半径。

具体代码如下:```pythondef count_points(points, r):count = 0for point in points:x, y = pointif x**2 + y**2 <= r**2:count += 1return count```我们可以根据落在圆内的点的数量与总点的数量的比值来估计圆的面积。

假设正方形的边长为2r,那么正方形的面积为(2r)^2=4r^2,圆的面积为πr^2。

实验二怎样计算Pi资料

实验二怎样计算Pi资料

数学实验实验报告学院:数学与统计学院班级:数学与应用数学3班学号:201370010314姓名:康萍时间:2016.04.05实验二 怎样计算π一、实验目的分别用下列三种方法计算π的近似值,并比较三种方法的精确度: 数值积分法:通过使用Mathematica7.0编写梯形公式和辛普森公式的程序语言计算π。

泰勒级数法:利用反正切函数泰勒级数计算π。

蒙特卡罗(Monte Carlo )法:通过使用Mathematica7.0编写蒙特卡罗公式的程序语言来计算π。

二、实验环境基于Windows 环境下的Mathematica7.0软件。

三、实验的基本理论和方法1、数值积分法以单位圆的圆心为原点建立直角坐标系,则单位圆在第一象限内的部分G 是一个扇形,由曲线])1,0[(12∈-=x x y 及两条坐标轴围成,它的面积4π=S 。

算出了S 的近似值,它的4倍就是π的近似值。

而扇形面积S 实际上就是定积分4112π=-⎰dx x 。

与π有关的定积分有很多,比如211x +的定积分411102π=+⎰dx x 就比21x -的定积分更容易计算,更适合于用来计算π。

一般地,要计算定积分()dx x f ba ⎰,也就是计算曲线()x f y =与直线b x a x y ===,,0所围成的曲边梯形G 的面积S 。

为此,用一组平行于y 轴的直线()b x x x x x a n i x x n n i =<<<<<=-≤≤=-1210,11Λ将曲边梯形T 分成n 个小曲边梯形,总面积S 分成这些小曲边梯形的面积之和。

如果取n 很大,使每个小曲边梯形的宽度都很小,可以将它上方的边界()()i i x x x x f ≤≤-1近似的看作直线段,将每个小曲边梯形近似的看作梯形来求面积,就得到梯形公式。

如果更准确些,将每个小曲边梯形的上边界近似的看作抛物线段,就得到辛普森公式。

具体公式如下:梯形公式 设分点11,,-n x x Λ将积分区间],[b a 分成n 等份,即()n i n a b i a x i ≤≤-+=0,/。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科生实验报告
实验课程蒙特卡罗模拟
学院名称核技术与自动化工程学院专业名称核技术及应用
学生姓名王明
学生学号**********
指导教师
邮箱****************
实验成绩
二〇一七年九月二〇一八年一月
实验一、选择一种编程语言模拟出π的值
一、实验目的
1、理解并掌握蒙特卡罗模拟的基本原理;
2、运用蒙特卡洛思想解决实际问题;
3、分析总结蒙特卡洛解决问题的优缺点。

二、实验原理
用蒙特卡洛思想计算π的值分为如下几部:
第一步构建几何原理:构建单位圆外切正方形的几何图形。

单位圆的面积为S0=π,正方形的面积S1=4;
第二步产生随机数进行打把:这里用MATLAB产生均匀随机数。

分别生产均匀随机数(x,y)二维坐标。

X,y的范围为-1到1.总共生成N个坐标(x,y).统计随机生成的坐标(x,y)在单位圆内的个数M。

第三步打把结构处理:根据S0/S1=M/N计算出π的值。

因此π=4*M/N。

第四步改变N的值分析π的收敛性:总数1000开始打把,依次增长10倍到1百
万个计数。

三、实验内容
1、用matlab编写的实验代码,总计数率为1000。

zfx_x=[1,-1,-1,1,1];
zfx_y=[1,1,-1,-1,1];
plot(zfx_x,zfx_y)
axis([-3 3 -3 3]);
hold on;
r=1; theta=0:pi/100:2*pi;
x=r*cos(theta); y=r*sin(theta);
rho=r*sin(theta);
figure(1)
plot(x,y,'-')
N=1000;
mcnp_x=zeros(1,N);
mcnp_y=zeros(1,N);
M=0;
for i=1:N
x=2*(rand(1,1)-0.5);
y=2*(rand(1,1)-0.5);
if((x^2+y^2)<1)
M=M+1;
mcnp_x(i)=x;
mcnp_y(i)=y;
end
end
plot(mcnp_x,mcnp_y,'.')
PI1=4*M/N;
2、用matlab绘制的图形
四、实验结果
1.当模拟总计数为1000时,某次计算结果: PI=3.128。

2.改变实验总数绘制PI的收敛特性:
五、实验总结
模拟总计数率越低时,模拟出的π值的误差就越大,随着模拟总计数的增加,模拟值值逐渐趋近于π真实值。

蒙卡模拟的方法是收敛。

并且模拟的方法比较简单,可以把复杂的计算转换为简单的模拟计算;但是蒙卡模拟的收敛速度比较慢。

相关文档
最新文档