完善有墙的二维随机游走,使得“游走者”不能走出矩形区域 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。
时间: 2023-07-16 21:16:21 浏览: 89
下面是实现代码:
```python
import numpy as np
def random_walk2D_barrier(np, ns):
# 初始化位置
pos = np.zeros((np, 2))
# 初始化边界
xL, xH, yL, yH = -ns, ns, -ns, ns
for i in range(ns):
# 产生随机方向
direction = np.random.randint(1, 5, size=np)
# 根据方向移动
pos[:, 0] += np.where(direction == 3, -1, np.where(direction == 4, 1, 0))
pos[:, 1] += np.where(direction == 1, 1, np.where(direction == 2, -1, 0))
# 判断是否越界
pos[:, 0] = np.clip(pos[:, 0], xL, xH)
pos[:, 1] = np.clip(pos[:, 1], yL, yH)
# 返回平均位置
return np.mean(pos, axis=0)
```
函数中,首先初始化粒子的位置为原点,然后设置矩形区域的边界。在游走的循环中,每次产生一个随机方向,并根据方向在相应的轴上移动。然后判断是否越界,如果越界则将其位置设置为边界值。最后返回所有粒子的平均位置。
阅读全文