2017-06-14 2 views
0

J'écris un code pour trouver les racines d'un polynôme pour différentes valeurs d'un paramètre k et l. Ce code fonctionne bien à part quand le paramètre est égal à zéro.Éviter une erreur à zéro

Mon approche a été de décaler le zéro à un petit nombre (comme indiqué ci-dessous), mais cela présente des inconvénients.

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) 

Quels sont les avantages et les inconvénients de différentes façons d'éviter de calculer lorsque les paramètres sont nuls? La réponse à k = 0 ou l = 0 n'est pas importante. Je suppose que le meilleur moyen serait de ne pas exécuter le calcul lorsque k ou l est 0.

Merci pour toute aide que vous pouvez donner.

+1

Hilbert roule dans sa tombe –

+2

try-except avec 'ZeroDivisionError' semble raisonnable, non? –

+0

Que suggérerait alors Hilbert @touchmyboomboom – Chogg

Répondre

0

Vous pouvez faire tout:

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)