在我的代码中执行for循环后,一行错误:

RuntimeWarning: divide by zero encountered in double_scalars

在另一行中出现两个错误:

RuntimeWarning: divide by zero encountered in double_scalars

RuntimeWarning: invalid value encountered in arcsin

我发现这可能与float值有关,但我对此不确定,并在此处输入内容以寻求帮助。 :)

这是代码:

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] = 0M[0] = 0等,因为我希望第一个元素为0。

我不知道我是否可以忘记此错误并继续执行我的代码,或者这是一个严重的问题。谢谢你的帮助。

最佳答案

这些不是实际的错误,而是警告。
它们在那里是因为您试图将某物除以零。

即,您要设置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]

09-15 20:28