2017-06-14 6 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

ヒルベルトはトライを除い 'ZeroDivisionError'は、合理的なようだと、無 –

+2

彼の墓に寝返りされますか? –

+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) 
関連する問題