Как я могу использовать очень маленькие числа в Python с scipy? - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь смоделировать физическую ситуацию, которая включает вычисление очень маленьких чисел.Когда числа становятся слишком маленькими, значения становятся мусором и / или округляются до нуля, что мне не помогает.Я также использую модуль констант 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

1 Ответ

0 голосов
/ 19 мая 2019

Прежде всего, я бы начал с использования натуральных единиц, с hbar = c = m = 1.Затем повторно оцените, сохраняется ли недостаточный объем или нет.

...