Полуэмпирическая формула массы - PullRequest
0 голосов
/ 19 июня 2020

в моем домашнем задании говорится следующее:

Exercise

До c) мой код работает, я пробовал с разными значениями Z. Вот мой код:

# This program calculates the mass number for which the binding energy per nucleon is max for a given atomic number. 
import math
from math import *
import numpy as np
from numpy import *
# First we define some variables
a_1 = 15.67
a_2 = 17.23
a_3 = 0.75
a_4 = 93.2
# We ask for input Z
Z = float(input("Enter the atomic number: "))
list_B = []
list_A = []
list_B_A = []
# We set up the loop
for A in arange(Z,3*Z+1): #we make A run from Z to 3Z
    list_A.append(A)
        if (A%2)==0:
            if ((A+Z)%2)==0:
                a_5 = 12.0
            else:
                a_5 = -12.0
        else:
            a_5 = 0
        B = a_1*A - a_2*(A**(2/3)) - a_3*(Z**2)/(A**(1/3)) - a_4*((A-2*Z)**2)/A + a_5/(A**(1/2))
        B_A = B/A #We print the resulting value of B
        list_B.append(B)
        list_B_A.append(B/A) #We make a list with this values


print("The Mass number for the maximum binding energy is: ",list_A[list_B_A.index(max(list_B_A))])

Теперь, когда я пытаюсь сделать d), он не работает и для значений больше z = 24 он всегда дает A max = 50, что не то, что дает первый код меня. Например, когда я запускаю код для c), Z = 28 дает мне A max = 58. Но когда я запускаю код для d), когда Z достигает 24, он всегда возвращает 50.

import math
from math import *
import numpy as np
from numpy import *
# First we define some variables
a_1 = 15.67
a_2 = 17.23
a_3 = 0.75
a_4 = 93.2
# We ask for input Z
list_B = []
list_A = []
list_B_A = []

for Z in arange(1,101,1):
    for A in arange(Z,3*Z+1): #we make A run from Z to 3Z
        list_A.append(A)
        if (A%2)==0:
            if ((A+Z)%2)==0:
                a_5 = 12.0
            else:
                a_5 = -12.0
        else:
            a_5 = 0
        B = a_1*A - a_2*(A**(2/3)) - a_3*(Z**2)/(A**(1/3)) - a_4*((A-2*Z)**2)/A + a_5/(A**(1/2))
        B_A = B/A #We print the resulting value of B
        list_B.append(B)
        list_B_A.append(B/A) #We make a list with this values
    print("The Mass number for the maximum binding energy is: ",list_A[list_B_A.index(max(list_B_A))], "given the atomic number :", Z)

1 Ответ

0 голосов
/ 19 июня 2020

Вам необходимо повторно инициализировать все списки перед повторением расчета с новым значением Z. В противном случае вы объединяете данные для этого Z со всеми предыдущими.

for Z in arange(1,101,1):
    list_B = []
    list_A = []
    list_B_A = []
    # rest of your code here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...