下面是有限差分法的一个函数,它是一种非常标准的计算导数的方法,给出了一些函数f(x)、一个网格(np.linspace)以及网格(h)之间的均匀距离
遇到的问题是,当我尝试一个已知的函数(比如x**2)从0,10跨越一个网格时;我收到一个特定的错误。在代码之后,我将发布遇到的错误
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)
我使用的是:
f = x**3
x = np.linspace(0,10,11)
h = x[1] - x[0]
finitedifference(f,x,h,11)
我收到错误消息:
"IndexError: index 11 is out of bounds for axis 0 with size 11"
不幸的是,我不知道这意味着什么,所以也许需要澄清一下错误/补救措施?谢谢大家!
大小为11的数组(或列表)具有索引
0, 1, 2, ..., 10
如果在
range(1, 11)
上执行for
循环,它将在1, 2, 3, ..., 10
上迭代。如果您然后尝试访问索引i+1
,那么当i
到达10
时,您将结束在数组之外的状态另一方面,您遗漏了索引
0
。因此,您可能希望使用for i in range(n-1)
来确保从顶部开始并保持在限制范围内相关问题 更多 >
编程相关推荐