蒙德卡罗方法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

相关文章

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数