Python基于Chebyshev节点实现插值多项式报IndexError如何解决
问题排查与解决方法
1 直接报错原因
你的cardinal函数的return语句缩进位置错误,被放在了for i in range(n)的循环内部,导致第一次循环仅完成i=0的计算后就直接返回了只有1个元素的l列表。而你的ydata长度为5(你传入了n+1=5个切比雪夫节点),当lagrange函数循环到i=1尝试访问l[1]时,自然触发数组越界错误。
2 修复方案
仅需要调整cardinal函数的return缩进,放到循环外部即可,顺便把数值比较的is not换成更规范的!=,修改后的代码如下:
# 基函数计算 def cardinal(xdata, x): n=len(xdata) l = [] for i in range(n): li = np.ones(len(x)) for j in range(n): if i != j: li = li*(x-xdata[j])/(xdata[i]-xdata[j]) l.append(li) return l # return调整到和for循环同缩进位置
3 可选优化调整
如果你需要严格使用4个切比雪夫节点,把xdata = chebyshev_nodes(a, b, n+1)改成xdata = chebyshev_nodes(a, b, n)即可。修改完成后运行代码就能正常输出插值结果和对比图像。
内容的提问来源于stack exchange,提问作者Lene Johaug Karlsen
相关产品推荐
相关产品推荐

