【问题标题】:Avoiding an error at zero避免零错误
【发布时间】:2017-06-14 17:18:34
【问题描述】:

我正在编写一个代码来为参数 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 时不运行计算。

感谢您提供的任何帮助。

【问题讨论】:

  • 希尔伯特在坟墓里翻了个身
  • try-except with ZeroDivisionError 似乎是合理的,不是吗?
  • 希尔伯特会建议什么@touchmyboomboom

标签: python zero divide-by-zero


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-26
    • 2013-09-17
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多