2017-06-14 81 views
0

我正在写一个代码来查找参数k和l的不同值的多项式的根。除了当参数等于零时,此代码工作正常。避免在零的错误

我的做法是将零点偏移到一个小数字(如下所示),但这有缺点。

xlist = np.linspace(-n_steps*step_size,near_0,n_steps+1) 
xlist=np.append(xlist,np.linspace(step_size,n_steps*step_size,n_steps)) 
ylist = np.linspace(-n_steps*step_size,near_0,n_steps+1) 
ylist=np.append(ylist,np.linspace(step_size,n_steps*step_size,n_steps)) 

for k_i,k in enumerate(xlist): 
    for l_i,l in enumerate(ylist): 
     p=[1,-1j*w*k,l**2/(k**2+l**2)*(1-1/R),-l**2/(k**2+l**2)*w*1j*k] 
     roots=np.roots(p) 

参数为零时避免计算的不同方式有哪些优缺点?在k = 0或l = 0的答案并不重要。我想最好的办法是当k或l为0时不运行计算。

感谢您的任何帮助。

+1

希尔伯特被翻转在他的坟墓 –

+2

尝试 - 除了用'ZeroDivisionError'似乎是合理的,不是吗? –

+0

希尔伯特然后建议@touchmyboomboom – Chogg

回答

0

你可能只是做:

xlist = np.linspace(-n_steps*step_size,near_0,n_steps+1) 
xlist=np.append(xlist,np.linspace(step_size,n_steps*step_size,n_steps)) 
ylist = np.linspace(-n_steps*step_size,near_0,n_steps+1) 
ylist=np.append(ylist,np.linspace(step_size,n_steps*step_size,n_steps)) 

for k_i,k in enumerate(xlist): 
    for l_i,l in enumerate(ylist): 
     if k == 0 or l == 0: # Just continue! 
      continue 

     p=[1,-1j*w*k,l**2/(k**2+l**2)*(1-1/R),-l**2/(k**2+l**2)*w*1j*k] 
     roots=np.roots(p)