根据提示,在右侧编辑器补充代码,完善有墙的二维随机游走,使得“游走者”不能走出矩形区域 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。from numpy import * random.seed(10) # 2维随机游走(有限制) def random_walk2D_barrier(np, ns): #------------begin------------ #------------end------------ np = 1000 # 粒子数量 for ns in [100, 200]: # 步数 mx, my = random_walk2D_barrier(np, ns) # 打印结果 print('粒子随机游走%d步后平均位置: (%.5f, %.5f)' %(ns, mx, my))
时间: 2023-10-06 22:08:08 浏览: 92
from numpy import *
random.seed(10)
def random_walk2D_barrier(np, ns):
xL, xH, yL, yH = -ns, ns, -ns, ns # 设置矩形区域
mx, my = 0, 0 # 粒子平均位置的初始值
for i in range(np): # 对于每一个粒子
x, y = 0, 0 # 初始位置为原点
for j in range(ns): # 进行 ns 步的随机游走
direction = randint(1, 5) # 生成随机方向
if direction == 1: # 向北走
y += 1
elif direction == 2: # 向南走
y -= 1
elif direction == 3: # 向西走
x -= 1
else: # 向东走
x += 1
# 判断是否越界
if x < xL:
x = xL
elif x > xH:
x = xH
if y < yL:
y = yL
elif y > yH:
y = yH
# 累加粒子的位置
mx += x
my += y
# 计算粒子平均位置
mx /= np
my /= np
return mx, my
np = 1000
for ns in [100, 200]:
mx, my = random_walk2D_barrier(np, ns)
print('粒子随机游走%d步后平均位置: (%.5f, %.5f)' %(ns, mx, my))
阅读全文