Как избежать ошибки в нуле

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