本关任务:编写一个程序,实现有墙的二维随机游走。 相关知识 为了完成本关任务,你需要掌握: 1.常见 Python 随机数函数; 2.随机游走(random walk)。 常见Python随机数函数 import numpy r = numpy.random.random(n) [0, 1) n个实数 r = numpy.random.uniform(a, b, n) [a, b) n个实数 i = numpy.random.randint(a, b+1, n) [a, b] 整数 i = numpy.random.random_integers(a, b, n) [a, b] 整数 随机游走(random walk) 也称随机漫步,是指基于过去的表现,无法预测将来的发展步骤和方向。其概念接近于布朗运动,是布朗运动的理想数学状态。醉汉行走的轨迹、布朗运动、股票的涨跌等行为都可用随机游走来模拟。 编程要求 根据提示,在右侧编辑器补充代码,完善有墙的二维随机游走,使得“游走者”不能走出矩形区域 A=[xL,xH][yL,yH]。设考虑 np 个粒子初始位置在原点,在有墙的二维随机游走 ns 步,我们设置 xL=yL=− ns ,xH=yH= ns (墙边界可以是浮点值)。 请你编写函数 random_walk2D_barrier(np, ns),返回 np 个粒子随机游走 ns 步后平均位置的估算值。 提示:首先执行一个方向上的移动。然后测试新位置是否在 A 外。如果在 A 外,则把其这个方向上的位置设置为矩形区域边界值。 要求:产生随机数时使用 numpy 中的函数 randint(1,5),且每次调用仅产生一个随机数,随机值与方向的对应关系如下:NORTH = 1; SOUTH = 2; WEST = 3; EAST = 4。
时间: 2024-02-15 20:05:13 浏览: 113
```python
import numpy as np
NORTH, SOUTH, WEST, EAST = 1, 2, 3, 4
def random_walk2D_barrier(np, ns):
xL, xH, yL, yH = -ns, ns, -ns, ns
x = np.zeros(np)
y = np.zeros(np)
for i in range(ns):
direction = np.random.randint(1, 5, np)
x += np.where(direction == EAST, 1, 0)
x -= np.where(direction == WEST, 1, 0)
y += np.where(direction == NORTH, 1, 0)
y -= np.where(direction == SOUTH, 1, 0)
x = np.where(x < xL, xL, x)
x = np.where(x > xH, xH, x)
y = np.where(y < yL, yL, y)
y = np.where(y > yH, yH, y)
return np.mean(x), np.mean(y)
```
解释如下:
- 首先定义了4个方向的常量。
- 然后定义函数 `random_walk2D_barrier(np, ns)`,其中 `np` 是粒子数,`ns` 是步数。
- 接下来定义矩形区域的边界,即 $xL=yL=-ns, xH=yH=ns$。
- 初始化所有粒子的位置为原点。
- 接下来开始进行 ns 步的随机游走,每步的方向使用 `numpy.random.randint(1, 5, np)` 产生。
- 对于每个粒子,根据其方向进行一步的移动,然后判断新位置是否在矩形区域 A 外,如果在则将其坐标调整至矩形区域 A 上。
- 最后返回所有粒子的平均位置坐标。
阅读全文