用蒙特卡罗方法求积分的多线程python代码
时间: 2023-10-27 12:24:14 浏览: 41
蒙特卡罗方法求积分是一种常见的数值积分方法,可以通过随机抽样来估计函数的积分值。以下是一个使用多线程的Python代码示例:
```python
import random
import threading
def monte_carlo_integration(f, a, b, n):
s = 0
for i in range(n):
x = random.uniform(a, b)
s += f(x)
return s * (b - a) / n
def parallel_monte_carlo_integration(f, a, b, n, num_threads):
threads = []
results = []
for i in range(num_threads):
t = threading.Thread(target=lambda: results.append(monte_carlo_integration(f, a, b, n // num_threads)))
threads.append(t)
t.start()
for t in threads:
t.join()
return sum(results) / num_threads
# 示例:估计 sin(x) 在 [0, pi/2] 区间的积分值
print(parallel_monte_carlo_integration(lambda x: math.sin(x), 0, math.pi / 2, 1000000, 4))
```
在上面的代码中,`monte_carlo_integration` 函数用于计算单个线程的积分值,`parallel_monte_carlo_integration` 函数用于启动多个线程并计算它们的平均值。其中,`f` 是被积函数,`a` 和 `b` 是积分区间,`n` 是抽样次数,`num_threads` 是线程数量。在示例中,使用了 4 个线程进行计算。