我正在研究thispost,因为我想创建一个数组,其中每个列分别是一个x
向量arange
,由dx
分别对应dx
。希望这有道理。在
import numpy as np
L = 80.0
N = 2 ** np.arange(-4, 10, dtype = np.float64)
dx = L / N
在我的原始代码中,我正在查看一个dx
,现在我有了一个dx
值的数组。
当我只使用一个dx
时,我将x向量设置如下:
但是,我需要为每个dx
分配一个x
,但我不确定如何做到这一点。我看了我在开头提到的那篇文章,我想,这篇文章提供了一些见解。不过,我似乎不能根据我的需要调整它——也许这甚至不是正确的方法。在
也许我需要一个for
循环?在
for i in len(dx):
x[i] = np.arange(-L / 2., L / 2. - dx, dx)
然后我可能需要嵌套另一个for
循环,为每个迭代选择一个dx
。在
我不确定什么是正确的方法或者最有效的方法。在
为了澄清混淆,在一dx
的情况下,我设置了以下设置:
x = np.arange(-L / 2.0, L / 2.0 - dx, dx)
k = np.hstack((np.arange(0, N / 2.0 - 1.0),
np.arange(-N / 2.0, 0))).T * 2.0 * np.pi / L
k1 = 1j * k
k3 = (1j * k) ** 3
u = 2 * (2 / (np.exp(x + 20.0) + np.exp(-x - 20.0))) ** 2
udata = u
tdata = 0.0
Integration here
然后,我用Runge-kutta4积分的伪谱方法来数值确定非线性KdV方程的{dx
值上运行代码,这样我就可以找到错误并绘制1/dx
与错误的对比,其中1/dx
是x轴上的。在
我希望这有助于实现我的目标。在
既然我想找出错误,我需要相同的步长吗?我知道错误将以exp(-c * dx)
的形式绘制,其中c
是任意常数。我知道这一点是因为伪谱方法的误差是exp(-c / dx)
,但我将根据{
我不知道你想如何处理@Joel提出的问题,因为就目前的情况来看
对于不同的
^{pr2}$dx
将给出不同大小的数组,这些数组无法堆叠。您可以使用建议的for循环创建此类阵列的列表:那么,
^{3}$xs
是:N.B.:我从上限(
L/2 - dx
=>;L/2
)中删除了-dx
,因为arange
已经排除了最后一个点,这是因为结果永远不会以L/2
结尾,即5
。如果希望在保持相同边界的同时增加步长,这是不可避免的。在
如果您可以更改边界并希望增加步长,但保持相同的元素数量,那么我建议使用如下方法,允许边界增加。在
相关问题 更多 >
编程相关推荐