我正在查看this帖子,因为我想创建一个数组,其中每列为x
向量arange
d 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 = np.arange(-L / 2., L / 2. - dx, dx)
时,我按如下方式设置我的x向量:
x
但是,我需要dx
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
的情况下,我进行了以下设置:
u
然后,我使用Runge Kutta 4积分运行伪谱方法,以确定非线性KdV方程的数值dx
。我想在不同的1/dx
值上运行代码,以便找到错误并绘制1/dx
与错误,其中exp(-c * dx)
是x轴上的错误。
我希望这有助于我想要完成的任务。
由于我想找到错误,我需要相同的步长吗?我知道错误将以c
的形式绘制,其中exp(-c / dx)
是一个任意常量。我知道这是因为伪谱方法的误差为1 / dx
,但我将对{{1}}进行绘图。
答案 0 :(得分:2)
我不确定你是怎么想处理@Joel提出的问题,因为现在看来,
x = np.arange(-L / 2., L / 2. - dx, dx)
对于不同的dx
,将提供不同大小的数组,这些数组无法堆叠。您可以使用您建议的for循环创建此类数组的列表:
L = 10
dxs = np.array([1,2,3])
xs = [ np.arange(-L/2, L/2, dx) for dx in dxs ]
然后,xs
是:
[array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]),
array([-5, -3, -1, 1, 3]),
array([-5, -2, 1, 4])]
注意:我从上限(-dx
=> L/2 - dx
)中删除了L/2
因为arange
已经排除了最后一点,你可以请参阅,因为结果永远不会以L/2
5
结尾。功能
如果你想在保持相同边界的同时增加步长,这是不可避免的。
如果您可以更改边界并希望步长增加,但保持相同数量的元素,那么我建议使用以下内容,这样可以增加边界。
x = np.arange(-L/2, L/2)
x
#array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4])
x * dxs[...,None]
#array([[ -5, -4, -3, -2, -1, 0, 1, 2, 3, 4],
# [-10, -8, -6, -4, -2, 0, 2, 4, 6, 8],
# [-15, -12, -9, -6, -3, 0, 3, 6, 9, 12]])