Я создал функцию с двойным циклом для вычисления суммы по различным массивам. Почему моя функция всегда возвращает 0? - PullRequest
0 голосов
/ 10 ноября 2019

Формула суммирования SCD

Мне дали формулу двойного суммирования для кодирования в python. В основном мне дали 30 различных массивов с различным расположением значений e и k, которые соответствуют отрицательному заряду или положительному заряду. Эти суммы qm и qn в сумме, поэтому qm = -1 и qn = 1. Относительные позиции e обозначены как m, а для k они обозначены как n. Это m и n в сумме. Массивы именуются как s1, s2, s3, s4 и т. Д. Вплоть до s30. Я включу образец массива здесь для s3 и s4, чтобы вы знали, о чем я говорю.

s3 задается s3 = np.array( ['k','e','k','k','k','e','k','k','e','e','k','k','e','e','k','e','k','e','k','e','k','e','e','k','k','k','e','e','k','e','k','e','k','e','k','k','k','e','e','k','e','k','e','e','k','k','e','e','e','e'])

s4 задается s4 = np.array( ['k','e','k','e','k','k','e','e','k','e','k','k','e','e','e','k','k','e','k','e','k','e','k','k','k','e','e','k','k','k','e','e','k','e','e','k','k','e','e','k','k','k','e','e','k','e','e','e','k','e'])

Итак, теперь я определил нахождение позиции как n_value для 'k' и m_value для 'е». Эти функции следующие:

для m_value

def m_value(position_num, array_name):
"""
same as for the n_value, except for 'e' instead of 'k'
"""
    cnt = 0
    for i in range(len(array_name)):
        if array_name[i]=='e':
            cnt+=1
        if cnt==position_num:
            return i+1
    return 0

Для n_value

def n_value(position_num, array_name):
"""
this is a function to get all of the positions of 
'k' in the array entered.
    position_num = what number 'k' value you want (1st, 2nd, etc...)
    array_name = what scd row (s1, s2, etc...)
define the specific element of the array 
returns value of where the 'k' is in the given sequence
"""
    cnt = 0
    for i in range(len(array_name)):
        if array_name[i]=='k':
            cnt+=1
        if cnt==position_num:
            return i+1
    return 0

Затем я определил заряды как e, так и k соответственно

charge_values = {'e' : -1, 'k' : 1}

e_charge = charge_values ​​['e'] k_charge = charge_values ​​['k']

и определили значение N для подсчета до

N = 50

Наконец, я написал определениедля суммирования функции в соответствии с заданной мной формулой суммирования, определенной как «SCD». Вот оно

def SCD(array_name):
"""
this should sum all of the elements in accordance with the
SCD summation formula. see notes to see full layout of 
formula and elements
"""
    summ = 0.0
    nposition_num=0
    mposition_num=0
    for m in range(2, N):
        summ = 0.0
        mposition_num = m_value(m, array_name)
        qm = mposition_num*e_charge
        for n in range (0, m-1):
            nposition_num= n_value(n, array_name)
            qn = nposition_num*k_charge
            summ += qm*qn*np.sqrt(m-n)
        summ += summ
    summ = (summ/float(N))     
    return summ

Теперь возникает серьезная проблема. Независимо от того, какой это массив, возвращаемое значение для SCD всегда равно 0.0. Я знаю, что это неточно, поэтому мне было интересно, какие логические ошибки или ошибки кодирования я допускал, чтобы вывод всегда приводил к нулю. Я новичок в Python, поэтому любые советы или идеи будут оценены.

...