根据提示,在右侧编辑器补充代码,完善有墙的二维随机游走,使得“游走者”不能走出矩形区域 A=[xL,xH][yL,yH]。设考虑 np 个粒子初始位置在原点,在有墙的二维随机游走 ns 步,我们设置 xL=yL=−ns,xH=yH=ns (墙边界可以是浮点值)。 请你编写函数 random_walk2D_barrier(np, ns),返回 np 个粒子随机游走 ns 步后平均位置的估算值。产生随机数时使用 numpy 中的函数 randint(1,5),且每次调用仅产生一个随机数,随机值与方向的对应关系如下:NORTH = 1; SOUTH = 2; WEST = 3; EAST = 4。
时间: 2024-03-12 19:44:24 浏览: 14
以下是实现代码:
```python
import numpy as np
NORTH = 1
SOUTH = 2
WEST = 3
EAST = 4
def random_walk2D_barrier(np, ns):
xL = yL = -ns
xH = yH = ns
x = np.zeros(np)
y = np.zeros(np)
for i in range(np):
for j in range(ns):
direction = np.random.randint(1, 5)
if direction == NORTH:
y[i] += 1
elif direction == SOUTH:
y[i] -= 1
elif direction == WEST:
x[i] -= 1
else:
x[i] += 1
if x[i] < xL:
x[i] = xL
elif x[i] > xH:
x[i] = xH
if y[i] < yL:
y[i] = yL
elif y[i] > yH:
y[i] = yH
return np.mean(x), np.mean(y)
```
其中,np是粒子数,ns是步数。首先定义了墙的边界,即矩形区域A。然后使用numpy模块中的randint函数产生随机数,根据随机数的值来确定方向,若超出矩形区域A则将其调整至边界处。最后返回np个粒子随机游走ns步后平均位置的估算值。