索引400超出大小为400的轴0的界限-Python中的有限差分法
我理解为什么会发生这种错误。我使用有限差分法来寻找大小为n=400的numpy数组的解,并且所讨论的项产生了一个项I+2,它索引400超出大小为400的轴0的界限-Python中的有限差分法,python,arrays,numpy,differential-equations,finite-difference,Python,Arrays,Numpy,Differential Equations,Finite Difference,我理解为什么会发生这种错误。我使用有限差分法来寻找大小为n=400的numpy数组的解,并且所讨论的项产生了一个项I+2,它对于范围(1,n-1)内的I转到n+1。然而,我正在努力寻找解决办法 代码: 我选择使用更高精度(2表示正向和反向,4表示中心)的有限差分系数(),因为当我为s=3运行此代码时,由于(很可能)1/r项,标准有限差分算法存在溢出问题 正如预期的那样,错误发生在 fDerR[i] = 2 * (tempf[i+1] - tempf[i-1]) / (3 * dr) + temp
对于范围(1,n-1)内的I
转到n+1。然而,我正在努力寻找解决办法
代码:
我选择使用更高精度(2表示正向和反向,4表示中心)的有限差分系数(),因为当我为s=3运行此代码时,由于(很可能)1/r项,标准有限差分算法存在溢出问题
正如预期的那样,错误发生在
fDerR[i] = 2 * (tempf[i+1] - tempf[i-1]) / (3 * dr) + tempf[i - 2] / 12 * dr - \
tempf[i + 2] / 12 * dr.
我的第一个解决方案是对tempf[i+2]
术语使用np.append(),但是这产生了一个错误ValueError:在同一行上设置一个序列为的数组元素。我可能没有正确地实现它,因为我使用了:
np.append(tempf, tempf[i + 2] / 12 * dr).
我目前的想法是定义一个大小为401的新数组,添加上一个数组中剩余的400个项,然后添加第(i+2)个项,尽管我不确定如何实现它。使用类似于的东西,用于范围(1,n-1)中的i:fDerR[i]=2*(tempf[i+1]-tempf[i-1])/(3*dr tempf+tempf[i-2]/12*dr np.append(fDerR[i] ,-tempf[i+2]/12*dr)
收益率索引400超出尺寸为400的轴0的范围最大的i
是n-2
,因此i+2
是n
,而长度n
数组的最大索引是n-1,因为0
是最小的。注意i=1
的环绕变换是i-2
进入索引n-1
。哦,这是一个简单的错误枚举的例子?例如,术语应该比我输入的少一个?所以I-2
应该是I-1
?公式中的索引偏移量应该保持不变,否则在数学上不正确。但是循环的范围必须更改为范围(2,n-2)
,必须适当填充边界元素。
np.append(tempf, tempf[i + 2] / 12 * dr).