Как избежать ошибки в нуле
Я пишу код, чтобы найти корни многочлена для разных значений параметров 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 ответ
Вы могли бы просто сделать:
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)