蒙德卡罗方法python ---小白的整理

2024-01-20 06:18

本文主要是介绍蒙德卡罗方法python ---小白的整理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                      **蒙特卡罗方法python**

蒙德卡罗方法是一种通过概率来得到近似解的方法

一 .蒙德卡罗方法来计算圆周率

1.算法思路解释如下:

  1. 圆形面积和正方形面积比例*4即等于圆周率
  2. 假设有一块边长为2的正方形木板,上面画一个单位圆,随意往木板上扔飞镖,落点(x,y)必定在木板上。
  3. 在扔得足够多的情况下,落在单位圆和落在木板上飞镖的次数的比例就等于单位圆和木板的面积之比。综上我们很容易理解随着投掷次数的增加,这个数值*4会无线接近于圆周率。

根据算法原理,我们使用pycharm编写程序利用蒙德卡罗方法来计算圆周率
参考代码块如下

from random import randomtimes =int(input('请输入投掷飞镖次数:'))
hits = 0
for i in range(times):x = random()y = random()if x*x + y*y<= 1:hits += 1
print(4.0 *hits/times)

由于我是新手,下面便是我对代码块的逐条解析

  • from random import random从random库中引入random模块,random模块时python自带的模块,用于生成随机数
  • times =int(input('请输入投掷飞镖次数:'))int()函数用于将一个字符串或数字转换成整型

#默认返回0,如果没有参数传递
int()
0
#如果转换的是float函数,那么转换的结果是向0的方向靠近,而不是四舍五入
int(3.6)
3
#负数取大
int(-3.6)
-3
#如果指定了base参数,那么第一个参数必须是字符类型
int(‘11’,base=2)
3 base=2为 二进制
#如果不指定,则认为字符是十进制数据
int(‘101’)
101

2我们进一步使用matplotlib画图

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle# 投点次数
n = int(input('请输入投点次数:'))
# 在正方形区域内随机投点,均匀分布
x = np.random.uniform(-1, 1, n)
y = np.random.uniform(-1, 1, n)
# 计算 点到圆心的距离
d = np.sqrt(x**2 + y**2)
# 统计 落在圆内的点的数目
hits = sum(np.where(d < 1, 1, 0))
# 计算 pi 的近似值(蒙特卡罗方法:用概率统计值去近似真实值)
pi = 4 * hits / n
print('圆周率: ', pi)"""
画图
"""
#变量fig表示整张图片,ax表示图片中的各个图表
#创建自定义图像
fig = plt.figure()
# 其中,参数111的意思是:将画布分割成1行1列,图像画在从左到右从上到下的第1块
ax = fig.add_subplot(111)
ax.plot(x, y,'ro',markersize = 1)
plt.axis('equal') # 防止图像变形
circle = Circle(xy=(0,0), radius=1, alpha=0.5)
ax.add_patch(circle)
plt.show()

在这里插入图片描述
在这里插入图片描述

二.使用蒙特卡罗计算定积分

  • 求函数 y=x^2 在[0,1]内的定积分
import numpy as np
import matplotlib.pyplot as pltdef f(x):return x**2
# 投点次数
n = int(input('任意输入投点次数:'))
# 在矩形区域内随机投点
x = np.random.uniform(0, 1, n)
y = np.random.uniform(0, 1, n)
# 统计落在函数 y=x^2图像下方的点的数目
hits = sum(np.where(y < f(x), 1, 0))
# 计算定积分的近似值(蒙特卡罗方法:用统计的概率比值去近似真实值)
integral = hits / n
print('x^2在[0,1]的定积分: ', integral)
"""
画图
"""
fig = plt.figure()
axes = fig.add_subplot(111)
axes.plot(x, y,'ro',markersize = 1)
# 防止图像变形
plt.axis('equal')
axes.plot(np.linspace(0, 1, 10), f(np.linspace(0, 1, 10)), 'b-')
plt.show()

在这里插入图片描述
在这里插入图片描述

这篇关于蒙德卡罗方法python ---小白的整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/625051

相关文章

基于Python编写一个git自动上传的脚本(打包成exe)

《基于Python编写一个git自动上传的脚本(打包成exe)》这篇文章主要为大家详细介绍了如何基于Python编写一个git自动上传的脚本并打包成exe,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录前言效果如下源码实现利用pyinstaller打包成exe利用ResourceHacker修改e

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

Python中Tkinter GUI编程详细教程

《Python中TkinterGUI编程详细教程》Tkinter作为Python编程语言中构建GUI的一个重要组件,其教程对于任何希望将Python应用到实际编程中的开发者来说都是宝贵的资源,这篇文... 目录前言1. Tkinter 简介2. 第一个 Tkinter 程序3. 窗口和基础组件3.1 创建窗

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

Python字符串处理方法超全攻略

《Python字符串处理方法超全攻略》字符串可以看作多个字符的按照先后顺序组合,相当于就是序列结构,意味着可以对它进行遍历、切片,:本文主要介绍Python字符串处理方法的相关资料,文中通过代码介... 目录一、基础知识:字符串的“不可变”特性与创建方式二、常用操作:80%场景的“万能工具箱”三、格式化方法

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

基于SpringBoot实现分布式锁的三种方法

《基于SpringBoot实现分布式锁的三种方法》这篇文章主要为大家详细介绍了基于SpringBoot实现分布式锁的三种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、基于Redis原生命令实现分布式锁1. 基础版Redis分布式锁2. 可重入锁实现二、使用Redisso

浅析python如何去掉字符串中最后一个字符

《浅析python如何去掉字符串中最后一个字符》在Python中,字符串是不可变对象,因此无法直接修改原字符串,但可以通过生成新字符串的方式去掉最后一个字符,本文整理了三种高效方法,希望对大家有所帮助... 目录方法1:切片操作(最推荐)方法2:长度计算索引方法3:拼接剩余字符(不推荐,仅作演示)关键注意事

自定义注解SpringBoot防重复提交AOP方法详解

《自定义注解SpringBoot防重复提交AOP方法详解》该文章描述了一个防止重复提交的流程,通过HttpServletRequest对象获取请求信息,生成唯一标识,使用Redis分布式锁判断请求是否... 目录防重复提交流程引入依赖properties配置自定义注解切面Redis工具类controller

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh