如何在带有scipy的Python中使用很小的数字?

时间:2019-05-17 21:23:49

标签: python scipy physics

我正在尝试模拟涉及计算非常小的数字的物理情况。如果数字太小,则这些值会变成垃圾和/或四舍五入为零,这对我没有帮助。我还将scipy常量模块用于某些常量。我正在尝试使用欧拉方法来计算位置,并使用动量来计算速度。物理并不是这个问题的重要部分。

我尝试使用十进制模块,但是当同时使用十进制和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 :(得分:0)

首先,我将从使用自然单位开始,其中hbar = c = m = 1。然后重新评估下溢是否仍然存在。