我正在尝试模拟涉及计算非常小的数字的物理情况。如果数字太小,则这些值会变成垃圾和/或四舍五入为零,这对我没有帮助。我还将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
答案 0 :(得分:0)
首先,我将从使用自然单位开始,其中hbar = c = m = 1。然后重新评估下溢是否仍然存在。