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

相关文章

Java中的getBytes()方法使用详解

《Java中的getBytes()方法使用详解》:本文主要介绍Java中getBytes()方法使用的相关资料,getBytes()方法有多个重载形式,可以根据需要指定字符集来进行转换,文中通过代... 目录前言一、常见重载形式二、示例代码三、getBytes(Charset charset)和getByt

Python多重继承慎用的地方

《Python多重继承慎用的地方》多重继承也可能导致一些问题,本文主要介绍了Python多重继承慎用的地方,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录前言多重继承要慎用Mixin模式最后前言在python中,多重继承是一种强大的功能,它允许一个

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

Python中edge-tts实现便捷语音合成

《Python中edge-tts实现便捷语音合成》edge-tts是一个功能强大的Python库,支持多种语言和声音选项,本文主要介绍了Python中edge-tts实现便捷语音合成,具有一定的参考价... 目录安装与环境设置文本转语音查找音色更改语音参数生成音频与字幕总结edge-tts 是一个功能强大的

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

nginx负载均衡及详细配置方法

《nginx负载均衡及详细配置方法》Nginx作为一种高效的Web服务器和反向代理服务器,广泛应用于网站的负载均衡中,:本文主要介绍nginx负载均衡及详细配置,需要的朋友可以参考下... 目录一、 nginx负载均衡策略1.1 基本负载均衡策略1.2 第三方策略1.3 策略对比二、 nginx配置2.1

Java调用Python的四种方法小结

《Java调用Python的四种方法小结》在现代开发中,结合不同编程语言的优势往往能达到事半功倍的效果,本文将详细介绍四种在Java中调用Python的方法,并推荐一种最常用且实用的方法,希望对大家有... 目录一、在Java类中直接执行python语句二、在Java中直接调用Python脚本三、使用Run

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT