import random def monte_carlo_pi(n): x_1st = [random.random() for in range(n)] y_1st = [random.random() for in range(n)] coordinate=zip(x_lst,y_lst) 1s = [1 for x, y in coordinate if x ** 2 + y** 2 <= 1] pi=4*1s.count(1)/n return'{:.6f}'.format (pi) if _name__=='_main_': num =1000 print(monte_carlo_pi(1000))
时间: 2024-01-01 21:05:24 浏览: 31
这段代码存在几个语法错误,修改后的代码如下:
```
import random
def monte_carlo_pi(n):
x_lst = [random.random() for _ in range(n)]
y_lst = [random.random() for _ in range(n)]
coordinate = zip(x_lst, y_lst)
hits = [1 for x, y in coordinate if x ** 2 + y ** 2 <= 1]
pi = 4 * sum(hits) / n
return '{:.6f}'.format(pi)
if __name__ == '__main__':
num = 1000
print(monte_carlo_pi(num))
```
这段代码使用蒙特卡罗方法来计算圆周率的值。首先生成 `n` 个随机点的横纵坐标,然后统计这些点中落在单位圆内的点的个数,最后用这个个数来估算圆的面积,从而得到圆周率的值。代码中使用了 `zip` 函数来将横纵坐标打包成坐标对,使用了列表推导式来统计落在圆内的点的个数,最后用 `sum` 函数来计算这些点的个数,从而得到圆的面积。最后将面积与单位圆的面积相除,再乘以 4,就得到了圆周率的值。
相关问题
import numpy as np import matplotlib.pyplot as plt import math def count(lis): lis = np.array(lis) key = np.unique(lis) x = [] y = [] for k in key: mask = (lis == k) list_new = lis[mask] v = list_new.size x.append(k) y.append(v) return x, y mu = [14, 23, 22] sigma = [2, 3, 4] tips = ['design', 'build', 'test'] figureIndex = 0 fig = plt.figure(figureIndex, figsize=(10, 8)) color = ['r', 'g', 'b'] ax = fig.add_subplot(111) for i in range(3): x = np.linspace(mu[i] - 3*sigma[i], mu[i] + 3*sigma[i], 100) y_sig = np.exp(-(x - mu[i])**2/(2*sigma[i]**2))/(math.sqrt(2*math.pi)) ax.plot = (x, y_sig, color[i] + '-') ax.legend(loc='best', frameon=False) ax.set_xlabel('# of days') ax.set_ylabel('probability') plt.show() plt.grid(True) size = 100000 samples = [np.random.normal(mu[i], sigma[i], size) for i in range(3)] data = np.zeros(len(samples[1])) for i in range(len(samples[1])): for j in range(3): data[i] += samples[j][i] data[i] = int(data[i]) a, b = count(data) pdf = [x/size for x in b] cdf = np.zeros(len(a)) for i in range(len(a)): if i > 0: cdf[i] += cdf[i - 1] cdf = cdf/size figureIndex += 1 fig = plt.figure(figureIndex, figsize=(10, 8)) ax = fig.add_subplot(211) ax.bar(a, height=pdf, color='blue', edgecolor='white', label='MC PDF') ax.plot(a, pdf) ax.legend(loc='best', frameon=False) ax.set_xlabel('# of days for project') ax.set_ylabel('probability') ax.set_title('Monte Carlo Simulation') ax = fig.add_subplot(212) ax.plot(a, cdf) ax.legend(loc='best', frameon=False) ax.set_xlabel('# of days for project') ax.set_ylabel('probability') ax.grid(True) plt.show()修改一下代码
import numpy as np
import matplotlib.pyplot as plt
import math
def count(lis):
lis = np.array(lis)
key = np.unique(lis)
x = []
y = []
for k in key:
mask = (lis == k)
list_new = lis[mask]
v = list_new.size
x.append(k)
y.append(v)
return x, y
mu = [14, 23, 22]
sigma = [2, 3, 4]
tips = ['design', 'build', 'test']
figureIndex = 0
fig = plt.figure(figureIndex, figsize=(10, 8))
color = ['r', 'g', 'b']
ax = fig.add_subplot(111)
for i in range(3):
x = np.linspace(mu[i] - 3*sigma[i], mu[i] + 3*sigma[i], 100)
y_sig = np.exp(-(x - mu[i])**2/(2*sigma[i]**2))/(math.sqrt(2*math.pi))
ax.plot(x, y_sig, color[i] + '-', label=tips[i])
ax.legend(loc='best', frameon=False)
ax.set_xlabel('# of days')
ax.set_ylabel('probability')
plt.grid(True)
plt.show()
size = 100000
samples = [np.random.normal(mu[i], sigma[i], size) for i in range(3)]
data = np.zeros(len(samples[1]))
for i in range(len(samples[1])):
for j in range(3):
data[i] += samples[j][i]
data[i] = int(data[i])
a, b = count(data)
pdf = [x/size for x in b]
cdf = np.zeros(len(a))
for i in range(len(a)):
if i > 0:
cdf[i] += cdf[i - 1]
cdf[i] = pdf[i] + cdf[i]
figureIndex += 1
fig = plt.figure(figureIndex, figsize=(10, 8))
ax = fig.add_subplot(211)
ax.bar(a, height=pdf, color='blue', edgecolor='white', label='MC PDF')
ax.plot(a, pdf)
ax.legend(loc='best', frameon=False)
ax.set_xlabel('# of days for project')
ax.set_ylabel('probability')
ax.set_title('Monte Carlo Simulation')
ax = fig.add_subplot(212)
ax.plot(a, cdf)
ax.legend(loc='best', frameon=False)
ax.set_xlabel('# of days for project')
ax.set_ylabel('probability')
ax.grid(True)
plt.show()
python 蒙特卡罗的方法求定积分sin(x) 输入:模拟点数n 输出:sin(x)的定积分值
以下是一个Python程序,使用蒙特卡罗方法来估算sin(x)的定积分值:
```python
import random
import math
def monte_carlo_integrate(n):
total = 0
for i in range(n):
x = random.uniform(0, math.pi)
total += math.sin(x)
return total * math.pi / n
n = int(input("请输入模拟点数n:"))
result = monte_carlo_integrate(n)
print("sin(x)的定积分值为:", result)
```
程序首先导入了Python中的random和math库,然后定义了一个函数monte_carlo_integrate,该函数接受一个参数n,表示需要模拟的点数。在函数中,程序使用循环来生成n个随机数x,并计算出这些x对应的sin(x)的和。最后,程序将这个和乘以π/n,就得到了sin(x)的定积分值的估计。
在主程序中,程序首先从用户那里获取模拟点数n,然后调用monte_carlo_integrate函数来计算sin(x)的定积分值的估计,并将计算结果输出到屏幕上。