Я пытаюсь смоделировать физическую ситуацию, которая включает вычисление очень маленьких чисел.Когда числа становятся слишком маленькими, значения становятся мусором и / или округляются до нуля, что мне не помогает.Я также использую модуль констант scipy для определенных констант.Я пытаюсь вычислить позицию, используя метод Эйлера и вычисляя скорость, используя импульс.Физика не является важной частью этой проблемы.
Я пытался использовать десятичный модуль, но думаю, что сталкиваюсь с проблемами при использовании десятичных и скиповых констант вместе.Кроме того, при использовании десятичной системы, нужно ли преобразовывать каждую переменную в десятичную перед вычислением?
В приведенном ниже цикле он может вычислить только около 3 значений до возникновения ошибки.
# Create the arrays for velocity and position
vx = sp.zeros(n+1)
vy = sp.zeros(n+1)
x = sp.zeros(n+1)
y = sp.zeros(n+1)
time = sp.zeros(n+1)
# Initialize our values
vx[0] = vx0
vy[0] = vy0
x[0] = x0
y[0] = y0
time[0] = 0
i = 0
while y[i] > 0:
step = math.sqrt(x[i]**2 + y[i]**2) / cs.c
vx[i + 1] = vx[i] + (((cs.hbar * cs.c) / (2*cs.electron_mass)) * (x[i] / (x[i]**2 + y[i]**2)))
vy[i + 1] = vy[i] + (((cs.hbar * cs.c) / (2*cs.electron_mass)) * (y[i] / (x[i]**2 + y[i]**2)))
x[i + 1] = x[i] + (vx[i] * step)
y[i + 1] = y[i] + (vy[i] * step)
i += 1
RuntimeWarning: invalid value encountered in double_scalars