我的函数应该返回匹配的值对,但是返回一个匹配的值对和一个不匹配的值对

2024-09-27 01:28:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写一个函数,这个函数需要很多碰撞和两个粒子速度的样本:它应该取一对粒子(每个样本一个),计算每个粒子的动能,找出能量之间的差异(绝对值),然后把一半的差加到低能粒子上,把一半的差从高能粒子上减去,使它们完全相同,然后计算出碰撞粒子的速度,也应该是相同的。出于某种原因,在两次碰撞的情况下运行程序,第一对产生的能量不匹配,而第二对产生的能量不匹配。我不明白为什么!感谢您的帮助

samp1 = [1, 3, 5, 7, 9, 11, 13]
samp2 = [2, 4, 6, 8, 10, 12, 14]


def prac(ncoll, samp1, samp2):
    m = 4*pc.u
    sp1 = []
    sp2 = []
    for i in range(ncoll):
        a = random.choices(samp1)
        b = random.choices(samp2)
        sp1.append(a)
        sp2.append(b)
    np.concatenate(sp1)
    np.concatenate(sp2)
    en1 = 0.5*m*np.square(sp1)
    en2 = 0.5*m*np.square(sp2)
    diff = (en1-en2)
    absdiff = np.abs(diff)
    halfen = 0.5*absdiff
    if diff[i] >= 0:
        finalen1 = en1[i] - halfen
        finalen2 = en2[i] + halfen
    else:
        finalen1 = en1[i] + halfen
        finalen2 = en2[i] - halfen
    finalsp1 = np.sqrt((2*finalen1)/m)
    finalsp2 = np.sqrt((2*finalen2)/m)
    return finalsp1, finalsp2


print(prac(2, samp1, samp2))

Tags: 函数npdiff粒子速度能量sp2sp1
1条回答
网友
1楼 · 发布于 2024-09-27 01:28:31

我想这就是你要找的。将以下部分从:

if diff[i] >= 0:
    finalen1 = en1[i] - halfen
    finalen2 = en2[i] + halfen
else:
    finalen1 = en1[i] + halfen
    finalen2 = en2[i] - halfen
finalsp1 = np.sqrt((2*finalen1)/m)
finalsp2 = np.sqrt((2*finalen2)/m)
return finalsp1, finalsp2

收件人:

finalsp1, finalsp2 = [], []
for i in range(ncoll):
    if diff[i] >= 0:
        finalen1 = en1[i] - halfen[i]
        finalen2 = en2[i] + halfen[i]
    else:
        finalen1 = en1[i] + halfen[i]
        finalen2 = en2[i] - halfen[i]
    finalsp1.append(np.sqrt((2*finalen1)/m))
    finalsp2.append(np.sqrt((2*finalen2)/m))

return finalsp1, finalsp2

上面的例子中缺少for循环,这意味着i位于上一次迭代的第n列

相关问题 更多 >

    热门问题