根据提示,在右侧编辑器补充代码,完善有墙的二维随机游走,使得“游走者”不能走出矩形区域 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-01 21:13:40 浏览: 6
随机游走matlab代码-RandomWalker:在二维中模拟随机游走者
```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
# 初始化粒子位置
positions = np.zeros((np, 2))
# 开始随机游走
for i in range(ns):
# 随机产生方向
direction = np.random.randint(1, 5, size=np)
# 在x轴上移动
positions[:, 0] += np.where(direction == WEST, -1, 0)
positions[:, 0] += np.where(direction == EAST, 1, 0)
# 判断是否越界,如果越界则设置为边界值
positions[:, 0] = np.where(positions[:, 0] < xL, xL, positions[:, 0])
positions[:, 0] = np.where(positions[:, 0] > xH, xH, positions[:, 0])
# 在y轴上移动
positions[:, 1] += np.where(direction == NORTH, 1, 0)
positions[:, 1] += np.where(direction == SOUTH, -1, 0)
# 判断是否越界,如果越界则设置为边界值
positions[:, 1] = np.where(positions[:, 1] < yL, yL, positions[:, 1])
positions[:, 1] = np.where(positions[:, 1] > yH, yH, positions[:, 1])
# 返回平均位置
return np.mean(positions, axis=0)
```
阅读全文