如何修复“ RuntimeWarning:除以double_scalars中的零”

时间:2019-04-12 14:18:05

标签: python python-3.x numpy for-loop math

在我的代码中执行 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
    #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) 
    M[0] = 0
    P[m] = TR * np.tan(T[m]) #X-AXIS POINTS
    P[0] = 0
    #RR SLOPES
    RR[m] = -TR / P[m]
    RR[0] = 0
    #LR slopes
    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。

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

1 个答案:

答案 0 :(得分:0)

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

也就是说,您要设置use lambda_http::{lambda, IntoResponse, Request}; use lambda_runtime::{error::HandlerError, Context}; use log::{self, info}; use simple_logger; use std::error::Error; fn main() -> Result<(), Box<dyn Error>> { simple_logger::init_with_level(log::Level::Debug)?; info!("Starting up..."); lambda!(handler); return Ok(()); } fn handler(req: Request, ctx: Context) -> Result<impl IntoResponse, HandlerError> { Ok(format!("{}", req.headers()).into_response()) } ,然后除以req.headers()(在第一次迭代中,其中M[0] = 0),对M[0]进行同样的设置。

问题是,您希望第一个值是什么?

也许一个解决方案是根据需要(在循环之前)初始化零值,并以m = 0开始循环(因此使用P[0])。那是您需要的吗?

但是,如果m=1for m in range(1,n+1):的迭代次数为零,则警告可能仍然存在。

P[m]