首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有限差分函数索引错误:

有限差分函数索引错误:
EN

Stack Overflow用户
提问于 2018-07-05 23:30:16
回答 1查看 43关注 0票数 0

下面是有限差分法的一个函数,这是一个非常标准的计算导数的方法,给定一些函数f(x),一个网格(np.linspace),以及网格的每一块之间的均匀距离(h)。

遇到的问题是当我尝试一个已知的函数(比如x**2)从0,10穿过网格时;我收到了一个特定的错误。在代码之后,我将发布遇到的错误。

代码语言:javascript
复制
def finitedifference(f,x,h,n):
"""f : function you are attempting to differentiate.
   x : grid/domain with with you will differentiate.
   h : distance between uniform mesh.
   n : required for loop?"""
    df = np.zeros_like(x)
    for i in range(1,n):
        df[i] = (f[i+1]-f[i-1])/(2*h)
        #end_points
        df[0] = (f[1]-f[0])/h
        df[-1] = (f[-1]-f[-2])/h
    return print(df) 

我使用的是:

代码语言:javascript
复制
f = x**3
x = np.linspace(0,10,11)
h = x[1] - x[0]
finitedifference(f,x,h,11)

我收到以下错误:

代码语言:javascript
复制
"IndexError: index 11 is out of bounds for axis 0 with size 11"

不幸的是,我不确定这意味着什么,所以也许可以澄清一下它的错误/补救措施?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-07-05 23:34:58

大小为11的数组(或列表)具有索引0, 1, 2, ..., 10

如果在range(1, 11)上执行for循环,它就会在1, 2, 3, ..., 10上迭代。如果您随后尝试访问索引i+1,那么当i到达10时,您将最终处于数组之外。

另一方面,您遗漏了索引0。因此,您可能希望使用for i in range(n-1)来确保从头开始并保持在一定的范围内。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51195124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档