mac*_*oni 6 python math for-loop numpy python-3.x
在我的代码中执行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
Run Code Online (Sandbox Code Playgroud)
我之前定义过(循环之前)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。
我不知道我是否可以忘记这个错误并继续我的代码,或者这是否是一些严重的问题。感谢您的帮助。
小智 6
这些不是实际的错误,而是警告。它们在那里是因为您试图将某个值除以零。
也就是说,您要设置M[0] = 0然后除以M[0](在第一次迭代时,其中m = 0),并且对于 也是如此P[0]。
问题是,您希望第一个值是什么?
也许解决方案是根据您的意愿初始化零值(在循环之前)并使用 开始循环m=1(因此使用for m in range(1,n+1):)。那是你所需要的吗?
但是,如果在不同的迭代中,警告可能仍然存在P[m],或者M[m]为零。
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))
# initialize your values
M[0] = 0 # actually not needed
P[0] = 0 # actually not needed
RR[0] = 0 # actually not needed
LR[0] = 0 # actually not needed
SL[0] = 0 # actually not needed
T[m] = (DT) * DTOR
for m in range(1,n+1):
T[m] = (DT + m) * DTOR
#Mach from T[i] using T[i] = v_PM (FALSE POSITION)
func = lambda x: T[m] - v_PM(x)
M[m] = brentq(func, 1, Me+1)
P[m] = TR * np.tan(T[m]) #X-AXIS POINTS
#RR SLOPES
RR[m] = -TR / P[m]
#LR slopes
LR[m] = (np.tan(T[m] + np.arcsin(1 / M[m])))
SL[m] = -RR[m]
Run Code Online (Sandbox Code Playgroud)