Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
索引400超出大小为400的轴0的界限-Python中的有限差分法_Python_Arrays_Numpy_Differential Equations_Finite Difference - Fatal编程技术网

索引400超出大小为400的轴0的界限-Python中的有限差分法

索引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

我理解为什么会发生这种错误。我使用有限差分法来寻找大小为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) + 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).