python - 有限差分函数索引误差:
问题描述
下面是有限差分法的一个函数,它是一种非常标准的计算导数的方法,给定一些函数 f(x)、一个网格 (np.linspace),以及每个网格之间的均匀距离 (h )。
遇到的问题是当我从 0,10 跨网格尝试已知函数(比如 x**2)时;我收到一个特定的错误。在代码之后,我将发布遇到的错误。
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
。
如果你做一个for
循环range(1, 11)
,它会迭代1, 2, 3, ..., 10
。如果您随后尝试访问 index ,那么您将在到达i+1
时超出您的数组。i
10
另一方面,您遗漏了 index 0
。因此,您可能希望使用它for i in range(n-1)
来确保您从顶部开始并保持在限制范围内。
推荐阅读
- ubuntu - 升级过程中无法重启 Ubuntu 18.04 中的 Samba
- quarkus - 忽略quarkus中的persistence.xml
- javascript - 如何将样式应用于 Material-Table 上的特定单元格?
- java - JSON 对象不正确并导致 HttpException
- python - 如何使用 sel 更改 xarray.DataArray 中的各个条目?
- javascript - SweetAlert2 : 配置我的警报的一些困难
- arrays - 用于嵌套ifs /数组的excel vba long
- javascript - Vue中的动态最小长度和最大长度
- php - 删除具有重复值的数组记录
- php - 在 PHP 中通过 d-link GSM 调制解调器发送短信