2017-06-14 79 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)