我在写一个函数,这个函数需要很多碰撞和两个粒子速度的样本:它应该取一对粒子(每个样本一个),计算每个粒子的动能,找出能量之间的差异(绝对值),然后把一半的差加到低能粒子上,把一半的差从高能粒子上减去,使它们完全相同,然后计算出碰撞粒子的速度,也应该是相同的。出于某种原因,在两次碰撞的情况下运行程序,第一对产生的能量不匹配,而第二对产生的能量不匹配。我不明白为什么!感谢您的帮助
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))
我想这就是你要找的。将以下部分从:
收件人:
上面的例子中缺少for循环,这意味着i位于上一次迭代的第n列
相关问题 更多 >
编程相关推荐