Неверный индекс при добавлении максимальных значений из массивов в другой массив - PullRequest
0 голосов
/ 14 мая 2019

У меня проблема с выводом этого кода:

from math import *
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
a1=15.8
a2=18.3
a3=0.714
a4=23.2

def bindingenergy():
    maxvalues=[]
    for Z in range (1,106):
        values=[]
        for A in range (Z, 3*Z+1):
            if A%2==1:
                a5=0
            elif A%2==0 and Z%2==0:
                a5=12
            else:
                a5=-12
            B=a1*A-a2*A**(2/3)-a3*((Z**2)/A**(1/3))-a4*(((A-2*Z)**2)/A)+(a5/A**(1/2))
            C=B/A
            values.append(C)
            D=max(values)
            E=values.index(D) 
        maxvalues.append(D)    
        print ("the most stable nucleon for an atomic number",Z," has a nucleon number",E+Z,"and its binding energy per nucleon is",D,"mEv")
    F=max(maxvalues)
    G=maxvalues.index(F)
    print ("the most stable nucleon of them all has an atomic number",G,"and its binding energy per nucleon is",F,"mEv")

Как видите, эта функция выполняет вычисление за два цикла, прежде чем перейти к следующему числу Z, она сохраняет все результаты.для этого одного конкретного числа Z и нескольких A (диапазона (Z, 3 * Z + 1)) в массив, затем находит индекс максимального значения и печатает его для этого конкретного числа Z, здесь нет проблем.

Но я хотел найти число Z с наибольшим значением из всех.Поэтому я заставил его повторить процесс для максимумов для каждого числа Z.

Когда я запускаю функцию, она печатает все числа Z, ее самый стабильный изотоп (число E + Z) и соответствующую энергию связи akaмаксимальное значение вычислений для этого конкретного числа Z и чисел A в диапазоне (Z, 3 * Z + 1).В последней строке следует распечатать число Z, имеющее наибольшее значение из всех чисел Z. Программа говорит, что это число Z = 27.Однако, когда я смотрю на значения, напечатанные для всех чисел Z, я вижу, что ответ должен быть Z = 28.Почему не выводится правильное число Z в последней строке вывода?

...