鱼C论坛

 找回密码
 立即注册
查看: 1775|回复: 6

利用蒙特卡洛模拟估算pi

[复制链接]
发表于 2020-12-19 11:11:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
原理解释:如下图所示

                               
登录/注册后可看大图

在正方形中随机生成点(个数为N),单位圆中橙色点个数为M,通过计算M/N即可近似得出pi的值
给定一个非负整数,表示一行中来自标准输入(stdin)的试验次数,将利用蒙特卡洛模拟估算的近似值输出到标准输出(stdout)。
当输入为0时,结束程序。
下面为输入输出示例

                               
登录/注册后可看大图

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-19 11:15:42 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>//调用头文件 
//利用蒙特卡罗算法计算pi的值 
int main()//主函数 
{
        float x,y,pi;//定义单精度浮点型变量x,y,pi 
        long long C=0,D=0;
        srand((unsigned)time(NULL));
        for(long long i=0;i<100000000;i++)
        {
                C++;//总次数 
                x=(float)rand()/RAND_MAX;//随机横坐标 
                y=(float)rand()/RAND_MAX;//随机纵坐标 
                if(sqrt(x*x+y*y)<=1)//落入单位圆的条件 
                D++;//满足条件的次数 
        }
        pi=4.0f*(float)D/C;//利用单位圆的面积求pi的值 
        printf("pi=%f\n",pi);//输出pi的值 
        return 0;
 } 
之前学校作业
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-19 11:45:49 | 显示全部楼层

。。。为什么全是报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-19 11:47:30 | 显示全部楼层

我问的是python啊 不是c++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-19 18:24:59 | 显示全部楼层
help
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-19 21:01:36 | 显示全部楼层
import random
while True:
    n=eval(input('请输入数字:'))
    if n==0:
        print('程序结束!')
        break
    M=N=0#M为分子,N为分母
    for i in range(n):
        a=random.random()
        b=random.random()
        s=a**2+b**2
        if s<=1:
            M+=1
        N+=1
    pi=M/N*4
    print('估计的pi值为: {}'.format(pi))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-19 22:54:59 | 显示全部楼层

可以修改一下允许输入输出跟第二个图一样吗?另外输入为100000000时计算时间过长,有办法解决吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-6 20:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表