如何筛选出计算符合条件停止距离的对应速度数组
解决方法
首先你现有代码存在两个关键问题:
- 第一个循环里每次迭代都会覆盖变量
s,最终s仅保留最后一个速度对应的距离值,并非完整的距离列表 - 第二个循环遍历
s的逻辑不成立,因为s不是可遍历的列表类型
要同时保留速度与对应停止距离的关联关系,你可以在计算阶段就把两者配对存储,后续筛选时同步提取符合条件的速度。修改后的代码如下:
# 初始化列表,分别存储速度和对应的停止距离 v_list = [] s_list = [] # 遍历速度列表,计算每个速度对应的散射力及停止距离 for current_v in v: delta = delta_omega + (k * current_v) # 计算激光失谐量 F = hbar * k * (L/2) * ((Rabi**2/2)/(delta**2 + (Rabi**2/2) + (L**2/4))) accn = F / m_Rb v_final = 0 current_s = abs((v_final**2 - current_v**2)/(2 * accn)) # 将当前速度与对应距离存入列表 v_list.append(current_v) s_list.append(current_s) # 筛选停止距离小于设定值的对应速度 v_stopping = [] s_stopping = [] for speed, dist in zip(v_list, s_list): if dist < length: v_stopping.append(speed) s_stopping.append(dist)
也可以用更简洁的写法,在计算过程中直接完成筛选:
# 直接生成符合条件的(速度, 距离)配对列表 filtered_pairs = [] for current_v in v: delta = delta_omega + (k * current_v) F = hbar * k * (L/2) * ((Rabi**2/2)/(delta**2 + (Rabi**2/2) + (L**2/4))) accn = F / m_Rb current_s = abs((0 - current_v**2)/(2 * accn)) if current_s < length: filtered_pairs.append( (current_v, current_s) ) # 拆分配对列表,得到目标速度列表和距离列表 v_stopping, s_stopping = zip(*filtered_pairs) if filtered_pairs else ([], [])
执行后v_stopping就是你需要的、对应停止距离小于5cm的速度数组。
内容的提问来源于stack exchange,提问作者Chris G
相关产品推荐
相关产品推荐

