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

合集下载

高性能计算实验报告

高性能计算实验报告

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

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

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

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

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

实验步骤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,/。

python 使用蒙特卡洛方法计算圆周率近似值

python 使用蒙特卡洛方法计算圆周率近似值

python 使用蒙特卡洛方法计算圆周率近似值(实用版3篇)目录(篇1)一、引言二、蒙特卡洛方法的原理1.随机抽样2.概率统计三、python 代码示例1.导入所需库2.定义计算圆周率的函数3.模拟实验过程4.计算并输出结果四、结论五、参考资料正文(篇1)一、引言圆周率(π)是一个无理数,它表示圆的周长与直径之比。

自古以来,数学家们一直在探索如何精确地计算圆周率。

蒙特卡洛方法是一种通过随机抽样和概率统计来估计未知量的数值方法,可以用来估计圆周率的近似值。

本文将介绍如何使用 Python 编程语言和蒙特卡洛方法来计算圆周率的近似值。

二、蒙特卡洛方法的原理1.随机抽样蒙特卡洛方法的基本思想是通过大量随机抽样来估计一个未知量。

在计算圆周率近似值时,我们可以在正方形内随机撒点,然后计算落在圆内的点的数量。

2.概率统计根据几何概率,落在圆内的点的概率为圆的面积与正方形面积之比。

因此,我们可以通过统计落在圆内的点的数量,并除以总点数,得到圆周率的近似值。

三、python 代码示例以下是一个使用 Python 和蒙特卡洛方法计算圆周率近似值的示例代码:```pythonimport randomimport mathdef monte_carlo_pi(n):inside_circle = 0total_points = 0for _ in range(n):x = random.random()y = random.random()distance = math.sqrt(x ** 2 + y ** 2)if distance <= 1:inside_circle += 1total_points += 1return 4 * (inside_circle / total_points)= int(input("请输入掷飞镖次数:"))pi_approximation = monte_carlo_pi(n)print("圆周率的近似值为:", pi_approximation)```四、结论蒙特卡洛方法是一种有效的数值计算方法,可以用来估计圆周率的近似值。

用蒙特卡罗方法计算圆周率的近似值

用蒙特卡罗方法计算圆周率的近似值

图2
由分析知[3] “, 针与直线相交”这一事件可以用 图 2 中的阴影部分表示. 其中 x 表示针落下后针的 中点到最近一条平行线的距离 , <表示针与平行线所
成的夹角
, 阴影部分的点满足
:
x
≤1 2
sin <.
于是可得
到概率 p = 2 l/πd , p 的近似值可用 m / n 得到 , 进而
第 23 卷第 4 期 No . 4 Vol . 23
用蒙特卡罗方法计算圆周率的近似值
何 光 3
(四川省高等学校数值仿真重点实验室/ / 内江师范学院 数学系 , 四川 内江 641112)
摘 要 :利用随机数的思想 ,讨论了蒙特卡罗方法在具体问题中的应用 ,介绍了三种计算圆周率的近似值的方
投点 数 为 5 000 , 运 行 3 次 的 结 果 分 别 为 :
31 13556 ,31 14348 ,31 14376 ; 投点数 为 10 000 , 运 行 3 次 的 结 果 分 别 为 :
31 14042 ,31 13318 ,31 13904. 观察发现 ,随着次数的增加会改善结果的精度 ,
[ Real ,{0 ,Pi} ] ; If [ y < = 015Sin[ x ] ,m + + ] ,{k ,1 ,n} ] ;Append To
[p ,N[ n/ m ] ] ,{t ,1 ,20} ] ;
Print [p ] ;
Sum[p [ [ t ] ] ,{t ,1 ,20} ]/ 20 注 :以上语句的执行流程是 :每投 1 000 个点得到 一个π的近似值 , 将其存放在数组 p 中 , 同样操作重 复 20 次得到 20 个近似值 ,最后用 Print 语句显示全部 近似值 ,并求出 20 个近似值的平均值. 注意程序中采 用随机数的思想 ,故而结果不唯一. 运行 3 次程序 , 结果分别为 :31 13825 , 31 13193 , 31 11488. 然后通过增加投点数 ,来观察精度的变化. 投点 数 为 5 000 , 运 行 3 次 的 结 果 分 别 为 :

蒙特卡洛(Monte—Carlo)方法求圆周率π

蒙特卡洛(Monte—Carlo)方法求圆周率π

蒙特卡洛(Monte —Carlo )方法求圆周率π蒙特卡罗(Monte Carlo )方法,或称计算机随机模拟方法,是一种基于“随机数”的计算方法。

设X 表示针的中点到最近的一条平行线的距离,Y 表示针与平行线的夹角(如图1所示),如果sin 2X l Y <,或sin 2l X Y <时,针与一条直线相交。

图1蒙特卡洛法求π示意图由于向桌面投针是随机的,所以用来确定针在桌面上位置的(,)X Y 是二维随机向量。

并且X 在0,2a ⎛⎫ ⎪⎝⎭上服从均匀分布,Y 在0,2π⎛⎫ ⎪⎝⎭上服从均匀分布, X 与Y 相互独立。

由此可以写出(,)X Y 的联合概率密度函数:40,02,2()0a x f x y y a ππ⎧<<<=<⎪⎨⎪⎩,,其它于是,所求概率为:sin 2200sin 242sin (,)2l y l x y l l P X Y f x y dxdy dxdy a a πππ<⎧⎫<===⎨⎬⎩⎭⎰⎰⎰⎰ 由于最后的结果与π有关,因此有些人想利用它来计算π的值。

其方法是向桌面投针n 次,若针与直线相交k 次,则针与直线相交的频率为k n ,以频率代替概率,则有2k l n a π=,所以2nl akπ=。

namespace 是指标识符的各种可见范围srand 函数是随机数发生器的初始化函数。

原型:void srand(unsigned seed);用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。

如: srand(1); 直接使用1来初始化种子。

不过为了防止随机数每次重复常常使用系统时间来初始化,即使用 time 函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t 型数据转化为(unsigned)型再传给srand 函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t 型t 变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t 数据。

派的计算实验报告

派的计算实验报告

一、实验目的1. 了解π的定义及其重要性。

2. 掌握使用不同方法计算π的原理和步骤。

3. 比较不同方法计算π的精度和效率。

二、实验原理π(派)是一个数学常数,表示圆的周长与直径的比值。

在数学、物理、工程等领域中,π具有广泛的应用。

π的近似值通常取3.14159,但实际上π是一个无理数,其小数位数无限不循环。

本实验通过以下几种方法计算π的近似值:1. 牛顿迭代法2. 阿基米德法3. 蒙特卡洛法三、实验步骤1. 牛顿迭代法(1)选择初始值x0,通常取x0=3。

(2)根据牛顿迭代公式x1 = x0 - f(x0)/f'(x0)计算下一个近似值。

(3)重复步骤(2),直到满足精度要求。

2. 阿基米德法(1)在坐标轴上画一个半径为1的圆。

(2)画一个内接正六边形,计算其面积S1。

(3)画一个外切正六边形,计算其面积S2。

(4)计算π的近似值:π ≈ 6(S2 - S1)。

3. 蒙特卡洛法(1)在坐标轴上画一个半径为1的圆。

(2)随机生成N个点,计算其中落在圆内的点的数量M。

(3)计算π的近似值:π ≈ 4M/N。

四、实验结果与分析1. 牛顿迭代法选择初始值x0=3,精度要求为10^-6。

经过迭代,计算得到π的近似值为3.1415926535。

2. 阿基米德法选取内接正六边形的边长为1,外切正六边形的边长为2。

计算得到π的近似值为3.1415926535。

3. 蒙特卡洛法选取N=10000,计算得到π的近似值为3.1415926535。

三种方法计算得到的π近似值相差不大,但牛顿迭代法和阿基米德法在计算过程中具有较高的精度。

蒙特卡洛法虽然精度较低,但计算简单,适合大规模计算。

五、实验结论1. 本实验通过三种方法计算π的近似值,结果表明,牛顿迭代法和阿基米德法具有较高的精度。

2. 蒙特卡洛法虽然精度较低,但计算简单,适用于大规模计算。

3. π在数学、物理、工程等领域具有广泛的应用,掌握计算π的方法具有重要意义。

Python圆周率π的计算实验报告

Python圆周率π的计算实验报告

Python圆周率π的计算实验报告1、实验目的和要求实验目的:1.理解随机数的概念;2.掌握random库;3.利用random库生成随机数,并具备应用随机数的能力实验要求:1.安装使用random库;2.利用random库生成随机数;3.计算圆周率。

2、实验原理(算法思想、实验内容及方法等)3、实验设备(硬件和软件环境)计算机、python的IDLE、PyCharm或其他python开发环境。

二、实验过程(源程序及注释或操作步骤)蒙特卡罗方法求解π的基本步骤:①随机向单位正方形和圆结构,抛洒大量“飞镖”点。

②计算每个点到圆心的距离从而判断该点在圆内或者圆外。

③用圆内的点数除以总点数就是π/4值。

随机点数量越大,越充分覆盖整个图形,计算得到的π值越精确。

实际上,这个方法的思想是利用离散点值表示图形的面积,通过面积比例来求解π值。

from random import randomfrom math import sqrtfrom time import clockDARTS = 1000000hits = 0.0clock()for i in range(1, DARTS+1):x, y = random(), random()dist = sqrt(x ** 2 + y ** 2)if dist <= 1.0:hits = hits + 1pi = 4 * (hits/DARTS)print("Pi值是{}.".format(pi))print("运行时间是: {:5.5}s".format(clock()))三、实验结果与分析(对程序输出或实验结果进行分析:与预期输出结果不同时,分析原因。

)教师评阅意见(1)实验预习 (30分)成绩:□预习认真、熟练掌握方法与步骤(30~28) □有预习、基本掌握方法与步骤(27~22)□有预习、但未能掌握方法与步骤(21~18) □没有预习,不能完成实验(17~0)(2)操作过程 (40分)成绩:□遵规守纪、操作熟练、团结协作 (40~37) □遵规守纪、操作正确、有协作 (36~29) □遵规守纪、操作基本正确、无协作 (28~24) □不能遵规守纪、操作不正确、无协作(23~0) (3)结果分析 (30分)成绩:□结果详实、结论清晰、讨论合理(30~28) □结果正确、讨论适当(27~22)□结果正确、没有分析讨论(21~18) □结果不正确、没有分析讨论(17~0)其它意见:教师签名:年月日。

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

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

用蒙特卡罗方法计算π值实验报告蒙特卡罗方法是一种通过随机过程来解决数学、物理和工程问题的数值方法。

在本实验中,我们将利用蒙特卡罗方法计算圆周率π的的值。

以下是实验报告。

1.实验目的本实验的主要目的是利用蒙特卡罗方法计算圆周率π的值,并分析蒙特卡罗方法的可靠性和准确性。

2.实验原理蒙特卡罗方法的基本原理是通过随机采样来估计未知参数的值。

对于圆周率π的计算,我们可以利用正方形和内切圆的关系来实现。

具体步骤如下:(1)在一个给定的单位正方形中,以原点为中心,半径为1的圆。

(2)在正方形中随机生成大量的点,然后计算这些点在圆内的个数。

(3)根据圆的面积与正方形的面积的关系,可以利用这个比例来估计圆周率π的值。

3.实验过程(1)创建一个给定边长的正方形,圆的半径为正方形边长的一半。

(2)随机生成大量坐标点,并计算这些点距离原点的距离。

(3)统计在圆内的点的个数。

(4)根据统计结果计算圆周率π的估计值。

4.实验结果我们进行了多次实验,每次实验生成了100万个点。

然后我们计算每次实验中在圆内的点的个数,并利用这些数据计算圆周率π的估计值。

实验结果如下:实验次数点个数估计π值通过这些实验数据,我们可以计算出平均圆周率π的估计值为3.14085.实验分析通过对多次实验数据的统计分析,我们可以看到蒙特卡罗方法在估计圆周率π的值上具有较高的准确性和可靠性。

实验结果的稳定性较好,不同实验的结果都接近真实值π,而且相对误差较小。

然而,虽然得到的结果接近真实值,但是实验结果的准确性仍然受到概率分布的随机性的限制。

如果我们增加实验次数,可以提高结果的准确性,但是计算的时间也会相应增加。

此外,在计算π的过程中,我们使用了随机生成的数据,因此需要进行大量的计算。

若在实际应用中需要计算更复杂的问题,计算资源和时间消耗将会更大。

6.实验总结本实验使用蒙特卡罗方法计算了圆周率π的估计值。

通过多次实验的数据统计和分析,我们可以得出蒙特卡罗方法在计算π值上的准确性和可靠性较高。

圆周率蒙特卡洛程序

圆周率蒙特卡洛程序

实验名称:圆周率的计算第一部分割圆术第三部分蒙特卡洛方法第四部分级数方法第五部分蒙特卡洛方法的应用第六部分心得体会通过这次数学实验体会到了其中的一些乐趣,也重新学习了一些与matlab 有关的东西,同时也体会到了数值分析的重要性,利用数值计算,可以很好地计算一些积分的近似值,可以把复杂的问题简单化,在写某些算法的过程中遇到了好多小问题,但是在网络和同学的帮助下很好地解决了那些问题,最后都得到了令人满意的结果,所以也很喜欢这样的课程。

割圆术的算法:面积:function s=f(n)p=1;format long;for k=1:np=sqrt((1-sqrt(1-p^2/4))^2+p^2/4);endb=(1+1+p)/2;a=6*2^ns=a*sqrt(b*(b-1)^2*(b-p))周长:function c=f(n)p=1;format long;for k=1:np=sqrt((1-sqrt(1-p^2/4))^2+p^2/4);enda=6*2^nc=p*a/2矩形function s=juxing(n)y=@(x)1/(1+x^2);x=0:(1/n):1;s=0;y=1./(1+x.^2);digits(22)for k=1:length(x)-1s=s+((y(k)+y(k+1))/2)/n;endformat long4*svpa(s,20)复化辛普森function t=fx1 f=@(x)sqrt(1-x.^2); a=0; b=1; n=1;A=1;while(A>0.9*10^(-7)) h=(b-a)/(2*n); x=0;for i=1:2*(n+1) x(i)=a+(i-1)*h; endy=sqrt(1-x.^2); t=0; for i=1:nt=t+h/3*(y(2*i-1)+4*y(2*i)+y(2*i+1)); endtrue=pi/4; A=abs(t-true); n=n+1 end211x +的复化辛普森function t=fx1 f=@(x)1./(1+x.^2); a=0; b=1; n=1;A=1;while(A>0.5*10^(-9)) h=(b-a)/(2*n); x=0;for i=1:2*(n+1) x(i)=a+(i-1)*h; endy=1./(1+x.^2); t=0; for i=1:nt=t+h/3*(y(2*i-1)+4*y(2*i)+y(2*i+1)); endtrue=pi/4; A=abs(t-true); n=n+1 end211x +的复化梯形function t=fx f=@(x)1./(1+x.^2); a=0; b=1; n=1;A=1;while(A>0.5*10^(-7)) h=(b-a)/n; x=0;for i=1:n+1 x(i)=a+(i-1)*h; endy=1./(1+x.^2); t=0; for i=1:nt=t+h/2*(y(i)+y(i+1)); endtrue=pi/4; A=abs(t-true); n=n+1 end蒙特卡洛算法function [c]=meng(m) x=rand(1,m); y=rand(1,m); n=0; for i=1:mif (x(i).^2+y(i).^2<=1) n=n+1; end end n=n c=4*n/m;1116arctan 4arctan 5239-的算法function c=jishu(x,n)c=0; digits(22); for i=1:nc=c+(-1)^(i+1)*x^(2*i-1)/(2*i-1); end vpa(c,20)()[]⎰⎰∈+1,0,sin y x d y x σ的算法>> syms x y;c=int(int(sin(x+y),y,0,1),x,0,1) vpa(c,20) c =2*sin(1) - sin(2) ans =0.77364454279011131791function c=f(m) x=rand(1,m); y=rand(1,m); z=rand(1,m); n=0;for i=1:mif (z(i)<=sin(x(i)+y(i))) n=n+1; end endformat long n=n c=n/m。

实验5 蒙特卡罗法求PI及排序算法

实验5 蒙特卡罗法求PI及排序算法

浙江大学城市学院实验报告课程名称多核与并行程序设计实验项目名称实验五蒙特卡罗法求PI及排序算法学生姓名专业班级学号实验成绩指导老师(签名)日期【实验环境】硬件平台:联想4核,4GZ内存编译器:Microsoft Visual Studio C++ 6.0操作系统:Windows 2003 server sp2测试数据集合:由随机数函数产生的数据集合【实验1】一、问题描述蒙特卡洛算法可理解为通过大量实验,模拟实际行为,来收集统计数据。

本例中,算法随机产生一系列点,模拟这些点落在如下图所示的正方形区域内的情况。

其几何解释如下11图1如图1所示,正方形边长为1,左下顶点与原点重合,两边分别与x,y轴重合。

曲线为1/4圆弧,圆心位于原点,与正方形左下定点重合,半径为1。

正方形面积S1=1,圆弧内面积S2=ππ41412=r。

算法模拟大量点随机落在此正方形区域内,落在圆弧内的点的数量(n2)与点的总数(n1)的比例与面积成正比关系。

即π42121==S S n n (1) 由此可得124n n =π (2)因此,只要计算出落在圆弧内的点的数量在点总数中所占的比例,就能求出π的值。

由图1可知,所有点均落在正方形范围内,因此点的x 坐标满足10≤≤x 。

又,当点落在圆弧范围内,则点的二维坐标关系满足122≤+y x 。

检验每一个点是否满足此关系即可判定改点是否落在圆弧内。

二、串行算法描述本项目中使用了标准C 语言库中的产生随机数函数。

该函数原型为:int rand( void );此函数产生随机数列,每次调用时均返回0到RAND_MAX 之间的一个整数。

void srand( unsigned int seed );此函数为rand ()函数所生成的伪随机数序列设置起始点,使之产生不同的伪随机数。

算法:产生2n 个随机数据,范围[0,1],对每个数据点计算其坐标是否满足122≤+y x ,统计满足此关系的点的数量count ,则 n count4=π三、并行算法3.1 并行算法描述算法步骤:1、确定需要产生的点的个数n ,参与运行的处理器数m ;2、对每一个处理器,生成两个随机数x ,y ,范围[0,1];3、判断两个随机数x ,y 是否满足122≤+y x ;4、若满足,则变量COUNT i++;5、重复步骤2-4,直至每个处理器均生成n/m个随机点;6、收集COUNT i的值,并累加至变量COUNT中,此即为随机点落在圆弧内的数量;7、通过(2)式计算 的值。

蒙特卡洛方法求圆周率python

蒙特卡洛方法求圆周率python

蒙特卡洛方法求圆周率python一、介绍蒙特卡罗方法是一种随机抽样(Monte Carlo sampling)的计算方法,是指以随机的方式,从概率分布中取样,然后统计取样结果的统计量,从而估计整个概率分布的统计特性的方法。

常用于计算统计问题中概率不容易求解的或者是无法精确求解的情况,从而给出理论上的结果的近似。

蒙特卡罗方法可以用来求解圆周率。

如果把一个单位圆内的点数比作总体,那么圆上点个数就是一个抽样观察结果。

将求圆周率的问题看作是在单位圆上随机筛出点的过程,在统计上可以统计出有多少点在圆内,有多少点在圆外,这种统计结果乘以4,就可以得到圆周率π的近似值,而这也正是蒙特卡罗算法的原理。

二、Python实现首先,我们需要引入一些Python模块,这里我们使用的是NumPy (一个强大的Python数值计算模块)和matplotlib(图形模块)。

import numpy as npimport matplotlib.pyplot as plt然后,我们需要设置一个随机数种子,以便随机数可以重复,可以更容易调试。

np.random.seed(123)接下来,我们需要生成一堆随机点,它们全都在单位圆内,多少个随机点,就取决于实验中需要的精度。

n_samples = 1000000x = np.random.uniform(-1,1,n_samples)y = np.random.uniform(-1,1,n_samples)接下来,我们要找出那些符合圆公式(x+y≤1)的点,并计算它们的数量。

in_circle = np.where(x*x + y*y <= 1)circle_points = len(in_circle[0])最后,我们计算π:pi = 4 * circle_points / n_samplesprint (pi)3.14076为了得到更精确的结果,可以重复上述实验,并取高精度的随机点。

  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的收敛特性:
五、实验总结
模拟总计数率越低时,模拟出的π值的误差就越大,随着模拟总计数的增加,模拟值值逐渐趋近于π真实值。

蒙卡模拟的方法是收敛。

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

相关文档
最新文档