【发布时间】:2019-09-03 08:11:59
【问题描述】:
在我的代码中做了for循环后,出现了一行错误:
RuntimeWarning: divide by zero encountered in double_scalars
另外一行有两个错误:
RuntimeWarning: divide by zero encountered in double_scalars
RuntimeWarning: invalid value encountered in arcsin
我发现浮点值可能有问题,但我不确定,我在这里输入它以寻求您的帮助。 :)
代码如下:
T_max = 0.5 * v_PM(Me) * RTOD
DT = (90 - T_max) - np.fix(90 - T_max)
n = int(T_max * 2)
P = np.zeros((n+1))
T = np.zeros((n+1))
M = np.zeros((n+1))
RR = np.zeros((n+1))
LR = np.zeros((n+1))
SL = np.zeros((n+1))
for m in range(n+1):
T[m] = (DT + m) * DTOR
func = lambda x: T[m] - v_PM(x)
M[m] = brentq(func, 1, Me+1)
M[0] = 0
P[m] = TR * np.tan(T[m]) #X-AXIS POINTS
P[0] = 0
RR[m] = -TR / P[m]
RR[0] = 0
LR[m] = (np.tan(T[m] + np.arcsin(1 / M[m])))
LR[0] = 0
SL[m] = -RR[m]
SL[0] = 0
我之前定义过(循环前)v_PM,它是相等的
v_PM = lambda x : (A * np.arctan(np.sqrt(B * (x ** 2 - 1))) - np.arctan(np.sqrt(x ** 2 - 1)))
正如我提到的,错误
RuntimeWarning: divide by zero encountered in double_scalars
参考RR[m] = -TR / P[m]
还有两个错误
RuntimeWarning: divide by zero encountered in double_scalars
和
RuntimeWarning: invalid value encountered in arcsin指的是:
LR[m] = (np.tan(T[m] + np.arcsin(1 / M[m])))
我还放在那里 P[0] = 0 和 M[0] = 0 等,因为我希望第一个元素为 0。
我不知道我是否可以忘记这个错误并继续我的代码,或者它是否是一个严重的问题。感谢您的帮助。
【问题讨论】:
-
首先你应该找出是哪一行导致了警告。这通常显示在 Traceback 中。
-
试试
if abs(P[m]) <1E-6: print(m, P[m]。就在划分之前找出导致问题的值。您可以对 T[m] 和 M[m] 执行类似的操作。了解这些值可能有助于您了解正在发生的事情。
标签: python python-3.x numpy for-loop math