蒙特卡罗方法计算圆周率C语言,用蒙特卡罗方法计算圆周率
(1)巴福昂投针:投针总次数n分别取1000、5000和10000
#include
#include
#include
#include
int main ()
{
int i;
float m=0,x,y;
srand(time(NULL));
for (i=1;i<=1000;i++)
{
x=rand()%10001/10000.0;
y=rand()%10001/10000.0;
if (sqrt(x*x+y*y)<=1)
m=m+1;
}
printf("pi=%f",(m/(i-1))*4);
}
运行结果
1000次时多次运行后找一个中位数
5000次时多次运行后找一个中位数
10000次时多次运行后找一个中位数
(2)布丰投针:投针总次数n分别取1000、5000和10000
#include
#include
#include
#include
int main()
{
float i,m=0;
double x,y;
srand(time(NULL));
for (i=1;i<=1000;i++)
{
x=rand()%10001/5000.0;
y=rand()%31416/10000.0;
if (x<=sin(y))
m=m+1;
}
printf("%lf %lf",i,m);
printf("pi=%lf",(i-1)/m);
}
注:xy取随机数时位数相同才能接近真实pi值
否则随机数取的概率和真实不符,数据差异极大
运行结果
1000次时多次运行后找一个中位数
5000次时多次运行后找一个中位数
10000次时多次运行后找一个中位数
(3)随机整数互素:N取2^16-1次数n分别取1000、5000和10000
#include
#include
#include
#include
int maxcom (int x,int y)
{
int t;
t=x;
if(y
if (t==0)
{
printf("输入有误");
return t;
}
for(t;t>=1;t--)
{if(x%t==0&&y%t==0)return t;
}
}
int main()
{
int i;
int m=0,a,b,N=pow(2,16)-1;
srand(time(NULL));
for(i=1;i<=1000;i++)
{
a=rand()%N+1;
b=rand()%N+1;
if (maxcom(a,b)==1)m+=1;
}
printf("pi=%lf",sqrt(6*(double)i/m));
}
运行结果
1000次时多次运行后找一个中位数
5000次时多次运行后找一个中位数
10000次时多次运行后找一个中位数
![图片描述](https://dn-
simplecloud.shiyanlou.com/uid/314777/1479459867902.png-wm)
方法 1000次 5000次 10000次
巴福昂投针 3.33 3.27 3.26
布丰投针 2.86 2.84 2.82
随机整数互素法 3.17 3.14 3.13
算法效率及解的精度分析 第三种方法计算出的pi值最接近真实值
另两种误差都极大
关键技术 算法的设计
启发与心得 通过取大量随机数,利用概率,有时是解决不确定性算法的好途径。
蒙特卡罗方法计算圆周率C语言,用蒙特卡罗方法计算圆周率相关推荐
- 科学计算与matlab语言期末答案,科学计算与MATLAB语言期末答案
科学计算与MATLAB语言期末答案 更多相关问题 "来而不往非礼也"符合人机交往的( )原则 若MD20中存放数据为-100.5,执行程序段"L MD20/RUD+/T ...
- c语言调用labview方法,LabVIEW与C语言接口的方法
摘要介绍了一种LabVIEW与C 语言接口的方法,由实例证明,该方法高效.易行,是增强LabVIEW整体功能的一条有效的途径. 关键词虚拟仪器LabVIEW 动态链接库 LabVIEW是一种方便灵活的 ...
- r计算百分位数_R语言:用R计算各种统计值
目录:求极差(range) 做频数分布表和频数分布图(graph of frequency distribution) 算术平均数(mean) 几何均数(geometric mean) 中位数与百分位 ...
- 条件表达式计算个人所得税c语言,个税的计算C语言实现,结果为什么是负的?...
个税的计算C语言实现,结果为什么是负的?0 /*运算结果: please input your profit every month 9876 the tax of 9876 is -479.80 请 ...
- 科学计算与matlab语言期末答案,科学计算与MATLAB语言答案
[单选题]用于定义按钮被单击的响应的属性是( ). [判断题]调用fplot3函数绘制空间曲线时,需要先计算曲线上各点的坐标. [单选题]当实验或测试所获得的样本数据有误差时,适合用来估算数据的方法是 ...
- 利用雅可比方法求线性方程组C语言_优化方法(一)
1. 梯度下降法(Gradient Descent) 针对无约束最优化问题,梯度下降法是常用的最优化方法之一,其法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解. 梯度下降法的优化思想是用当前 ...
- c语言程序 存款利息的计算,【c语言】存款利息的计算
// 存款利息的计算.有1000元,想存5年,可按以下5种办法存: // 1.一次存5年期. // 2.先存2年期,到期后将本息再存3年期. // 3.先存3年期,到期后将本息再存2年期. // 4. ...
- JNI基础 c语言调用java方法
利用c语言调用java无参的方法 java方法 com.example.jniparsedata.ParseData类中的方法 //打印 public void sayHelloFro ...
- matlab历史模拟法计算var,历史模拟法、蒙特卡罗模拟法计算VaR和ES值
一.知识点介绍 1.1 历史模拟法 我们在之前有用到Delta-Normal的GARCH和RiskMetrics方法来计算VaR和ES,假设的是残差满足正态分布,对残差进行二次相关序列的建模并拟合残差 ...
- python圆周率后100位_Python实现计算圆周率π的值到任意位的方法示例
这篇文章主要介绍了Python实现计算圆周率π的值到任意位的方法,简单分析了圆周率的计算原理,并结合实例形式分析了Python计算圆周率的相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python ...
最新文章
- 硬币(计算n分有几种表示法)
- java编写socket使用bufferedReader.readLine()问题研究
- Open Street Map维基世界地图初探--概念、开发
- android import找不到文件夹,android 音乐播放器找不到源文件
- 男性加入防晒大军 购买遮阳伞比例同比增长23.54%
- Java-线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
- 学习笔记之什么是持久化和对象关系映射ORM技术
- 实践解决跨域问题的三种方式剖析
- 51单片机基础教学(keil)
- SVN分支合并冲突解决
- opencv convertTo函数详解
- 云开发魔都团长头像制作微信小程序源码/带流量主
- R语言可视化——画脸谱图
- 【华为OJ】【042-矩阵乘法】
- RAID——独立冗余磁盘阵列
- DSF view Model
- 华擎主板设置来电开机_华擎主板BIOS文字说明
- 【干货长文】诺亚财富解读市场信息心理学
- 星光不问赶路人,时光不负有心人。
- stop slave mysql_mysql执行stop slave一直卡在Killing slave的状态