Я пишу функцию, которая принимает ряд столкновений и две выборки скорости частиц: она должна взять пару частиц (по одной от каждого образца), вычислить кинетическую энергию каждой частицы, найти разницу междуэнергии (абсолютное значение), затем прибавьте половину разницы к частице с более низкой энергией и вычтите половину разницы от частицы с более высокой энергией, сделав их точно такими же, а затем рассчитав скорости столкнувшихся частиц, которые также должны быть одинаковыми.По какой-то причине при запуске программы с двумя столкновениями первая пара результирующих энергий не совпадает, а вторая пара - две.Я не понимаю почему!Любая помощь приветствуется !!
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))