Разделить на ноль ошибок времени выполнения при использовании цикла - PullRequest
0 голосов
/ 18 февраля 2020

Я получил ошибку деления на ноль во время выполнения при использовании al oop, и я не знаю почему. Не волнуйтесь, код еще не закончен. Я пытаюсь преобразовать массив с помощью функции ulj, если вы можете помочь. Вот код:

import numpy as np
def ulj(x,epsilon = 4*(10**-4),sigma=6):
"""Compute Lennard-Jones potential as a function of inter-atomic distance"""
return epsilon*((((sigma)/(x))**12)-((((sigma)/(x))**6)))




 positions=np.array([0., 7.0,5,6,2,6,2,2,4,3]) # Initial position of the two objects (in atomic            units)

i = 0

x1 = []
x2 = []
while i <(len(positions)):
    x1.append(ulj(positions[i]))

print(x1)

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Хотя Мохит Шарма верен, вы должны увеличивать i внутри l oop (чтобы избежать бесконечного l oop), ответ на вопрос, почему происходит ошибка деления на ноль, следующий.

Когда i == 0, positions[i] == 0.

Следовательно, ulj(positions[i]) равно ulj(0).

Это означает, что внутри вашей функции x == 0 и sigma/x будет повышать деление на ноль исключений.

0 голосов
/ 18 февраля 2020

Изменить пока l oop с приведенным ниже фрагментом кода

while i <(len(positions)):
    print(positions[i])
    x1.append(ulj(positions[i]))
    i = i+1
...