Моя функция должна возвращать совпадающие пары значений, но возвращает одну совпадающую пару и одну несопоставленную пару - PullRequest
0 голосов
/ 03 декабря 2018

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

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))

1 Ответ

0 голосов
/ 03 декабря 2018

Полагаю, это то, что вы ищете.Измените следующую часть с:

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-м номере столбца по сравнению с предыдущимитерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...