Python 用montecarlo方法绘制Pi

Python 用montecarlo方法绘制Pi,python,Python,我可以通过Python使用不同的数据点来计算pi的值。但对于每一次重复,我想绘制散点图,如下所示: 我使用monte carlo方法查找pi的python代码是: from random import * from math import sqrt inside=0 n=10**6 for i in range(0,n): x=random() y=random() if sqrt(x*x+y*y)<=1: inside+=1 pi=4*insid

我可以通过Python使用不同的数据点来计算pi的值。但对于每一次重复,我想绘制散点图,如下所示:

我使用monte carlo方法查找pi的python代码是:

from random import *
from math import sqrt
inside=0
n=10**6
for i in range(0,n):
    x=random()
    y=random()
    if sqrt(x*x+y*y)<=1:
        inside+=1
pi=4*inside/n
print (pi)
来自随机导入的
*
从数学导入sqrt
内部=0
n=10*6
对于范围(0,n)内的i:
x=随机()
y=随机()

如果sqrt(x*x+y*y)如果您得到有关后端的错误,请使用以下命令:

import matplotlib as mp
mp.use('Tkagg')
它将把后端设置为TkAgg,TkAgg使用Tkinter用户界面工具包

import numpy as np
import matplotlib.pyplot as plt

n=1e3
x = 1-2*np.random.random(int(n))
y = 1-2.*np.random.random(int(n))
insideX,  insideY  = x[(x*x+y*y)<=1],y[(x*x+y*y)<=1]
outsideX, outsideY = x[(x*x+y*y)>1],y[(x*x+y*y)>1]

fig, ax = plt.subplots(1)
ax.scatter(insideX, insideY, c='b', alpha=0.8, edgecolor=None)
ax.scatter(outsideX, outsideY, c='r', alpha=0.8, edgecolor=None)
ax.set_aspect('equal')
fig.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
n=1e3
x=1-2*np.随机.随机(int(n))
y=1-2.*np.随机.随机(int(n))
insideX,insideY=x[(x*x+y*y)1]
图,ax=plt子批次(1)
最大散射(内部X、内部Y、c='b',α=0.8,边缘颜色=None)
最大散射(外部X、外部Y、c='r',α=0.8,边缘颜色=None)
ax.set_方面(“相等”)
图2(图3)

如果后端出现错误,请使用以下方法:

import matplotlib as mp
mp.use('Tkagg')
它将把后端设置为TkAgg,TkAgg使用Tkinter用户界面工具包

import numpy as np
import matplotlib.pyplot as plt

n=1e3
x = 1-2*np.random.random(int(n))
y = 1-2.*np.random.random(int(n))
insideX,  insideY  = x[(x*x+y*y)<=1],y[(x*x+y*y)<=1]
outsideX, outsideY = x[(x*x+y*y)>1],y[(x*x+y*y)>1]

fig, ax = plt.subplots(1)
ax.scatter(insideX, insideY, c='b', alpha=0.8, edgecolor=None)
ax.scatter(outsideX, outsideY, c='r', alpha=0.8, edgecolor=None)
ax.set_aspect('equal')
fig.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
n=1e3
x=1-2*np.随机.随机(int(n))
y=1-2.*np.随机.随机(int(n))
insideX,insideY=x[(x*x+y*y)1]
图,ax=plt子批次(1)
最大散射(内部X、内部Y、c='b',α=0.8,边缘颜色=None)
最大散射(外部X、外部Y、c='r',α=0.8,边缘颜色=None)
ax.set_方面(“相等”)
图2(图3)

根据您的代码构建,这可能会让您开始:

import matplotlib.pyplot as plt

from random import random

inside = 0
n = 10**3

x_inside = []
y_inside = []
x_outside = []
y_outside = []

for _ in range(n):
    x = random()
    y = random()
    if x**2+y**2 <= 1:
        inside += 1
        x_inside.append(x)
        y_inside.append(y)
    else:
        x_outside.append(x)
        y_outside.append(y)

pi = 4*inside/n
print(pi)

fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.scatter(x_inside, y_inside, color='g', marker='s')
ax.scatter(x_outside, y_outside, color='r', marker='s')
fig.show()
导入matplotlib.pyplot作为plt
从随机导入随机
内部=0
n=10**3
x_inside=[]
y_inside=[]
x_外部=[]
y_外部=[]
对于范围内的u(n):
x=随机()
y=随机()

如果x**2+y**2根据您的代码构建,这可能会让您开始:

import matplotlib.pyplot as plt

from random import random

inside = 0
n = 10**3

x_inside = []
y_inside = []
x_outside = []
y_outside = []

for _ in range(n):
    x = random()
    y = random()
    if x**2+y**2 <= 1:
        inside += 1
        x_inside.append(x)
        y_inside.append(y)
    else:
        x_outside.append(x)
        y_outside.append(y)

pi = 4*inside/n
print(pi)

fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.scatter(x_inside, y_inside, color='g', marker='s')
ax.scatter(x_outside, y_outside, color='r', marker='s')
fig.show()
导入matplotlib.pyplot作为plt
从随机导入随机
内部=0
n=10**3
x_inside=[]
y_inside=[]
x_外部=[]
y_外部=[]
对于范围内的u(n):
x=随机()
y=随机()

如果x**2+y**2进一步阐述Robbie的代码:

import numpy as np
import matplotlib.pyplot as plt

n = 1000
xy = np.random.uniform(-1, 1, 2 * n).reshape((2, n))
in_marker = xy[0]**2 + xy[1]**2 <= 1
pi = np.sum(in_marker) / n * 4
in_xy = xy[:, in_marker]
out_xy = xy[:, ~in_marker]


fig, ax = plt.subplots(1)
ax.scatter(*in_xy,c='b')
ax.scatter(*out_xy,c='r')
ax.set_aspect('equal')
fig.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
n=1000
xy=np。随机。均匀(-1,1,2*n)。重塑((2,n))

在_marker=xy[0]**2+xy[1]**2中进一步阐述Robbie的代码:

import numpy as np
import matplotlib.pyplot as plt

n = 1000
xy = np.random.uniform(-1, 1, 2 * n).reshape((2, n))
in_marker = xy[0]**2 + xy[1]**2 <= 1
pi = np.sum(in_marker) / n * 4
in_xy = xy[:, in_marker]
out_xy = xy[:, ~in_marker]


fig, ax = plt.subplots(1)
ax.scatter(*in_xy,c='b')
ax.scatter(*out_xy,c='r')
ax.set_aspect('equal')
fig.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
n=1000
xy=np。随机。均匀(-1,1,2*n)。重塑((2,n))

在_marker=xy[0]**2+xy[1]**2中,这里是hiro主角代码的一个变体,使用random.uniform()允许-1.0和1.0之间的随机数,允许绘制所有点,而不仅仅是其中的1/4(不是最优雅的代码,但它是为了学习蒙特卡罗模拟的基础知识而编写的):

绘制圆内外的点:

fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.scatter(x_inside, y_inside, color='g', marker='s')
ax.scatter(x_outside, y_outside, color='r', marker='s')
fig.show()

这里是hiro Progator代码的一个变体,使用random.uniform()允许-1.0和1.0之间的随机数,允许绘制所有点,而不仅仅是其中的1/4(不是最优雅的代码,但它是为了学习蒙特卡罗模拟的基础知识而编写的):

绘制圆内外的点:

fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.scatter(x_inside, y_inside, color='g', marker='s')
ax.scatter(x_outside, y_outside, color='r', marker='s')
fig.show()

看一看
matplotlib.pyplot
。我已经看过了,我可以用matplotlib.pyplot绘制非常基本的散点图,但我不知道该如何表示。次要(加速)建议:不需要
sqrt
sqrt(x)看一看
matplotlib.pyplot
。我已经看过了,我可以用matplotlib.pyplot绘制非常基本的散点图,但我不知道该如何表示。次要(加速)建议:不需要
sqrt
<代码>sqrt(x)我使用ipython。每当我尝试运行您的代码时,它都会显示“UserWarning:matplotlib当前使用的是非GUI后端,因此无法显示“matplotlib当前使用的是非GUI后端”、“我使用的是ipython 3”。当我使用“import matplotlib as mp.use('Tkagg')时,它显示“UserWarning:对matplotlib.use()的调用无效,因为已经选择了后端;在第一次导入pylab、matplotlib.pyplot或matplotlib.backends之前必须调用matplotlib.use()。warning.warn(\u use\u error\u msg)”重新启动ipython并再次尝试使用ipython。每当我尝试运行您的代码时,它都会显示“UserWarning:matplotlib当前使用的是非GUI后端,因此无法显示“matplotlib当前使用的是非GUI后端”、“我使用的是ipython 3”。当我使用“import matplotlib as mp.use('Tkagg')时,它显示“UserWarning:对matplotlib.use()的调用无效,因为已经选择了后端;在第一次导入pylab、matplotlib.pyplot或matplotlib.backends之前必须调用matplotlib.use()。warning.warn(\u use\u error\u msg)”重新启动ipython并尝试使用代码(而不是绘图)获取pi的数值。它显示“位于0x11a73d278的matplotlib.collections.PathCollection”。我不明白。我正在使用Iphython@css_wp忘记添加
图show()
。很抱歉我用过这个。。。绘图自动显示在spyder中的
ipython
shell中。我是python的新用户。我再次尝试了您的代码,但它显示“UserWarning:matplotlib当前使用的是非GUI后端,因此无法显示“matplotlib当前使用的是非GUI后端”的图形,或者显示以下内容:;您是否运行了
%matplotlib
magic命令?我使用您的代码获取pi的数值,但不使用绘图。它显示“位于0x11a73d278的matplotlib.collections.PathCollection”。我不明白。我正在使用Iphython@css_wp忘记添加
图show()
。很抱歉我用过这个。。。绘图自动显示在spyder中的
ipython
shell中。我是python的新用户。我再次尝试了您的代码,但它显示“UserWarning:matplotlib当前使用的是非GUI后端,因此无法显示“matplotlib当前使用的是非GUI后端”的图形,或者显示以下内容:;你运行了
%matplotlib
magic命令了吗?哇!美好的怎么样