You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选出计算符合条件停止距离的对应速度数组

解决方法

首先你现有代码存在两个关键问题:

  • 第一个循环里每次迭代都会覆盖变量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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 01:20:32