2

我正在看这篇文章,因为我想创建一个数组,其中每一列是一个x向量aranged bydx和对应的dx,分别。希望这是有道理的。

import numpy as np
L = 80.0
N = 2 ** np.arange(-4, 10, dtype = np.float64)
dx = L / N

使用我的原始代码,我正在查看一个dx现在我有一组dx值的地方。当我只使用 onedx时,我将 x 向量设置如下:

x = np.arange(-L / 2., L / 2. - dx, dx)

但是,我需要一个xfor eachdx但我不确定如何执行此操作。我查看了我在开头提到的帖子,我认为它提供了一些见解。不过,我似乎无法根据自己的需要定制它——也许它甚至不是正确的方法。

也许我需要一个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 Kutta 4 积分运行伪谱方法来数值确定u非线性 KdV 方程。我想在不同的dx值上运行代码,这样我就可以找到错误并绘制1/dx与错误在1/dxx 轴上的位置。

我希望这对我想要完成的事情有所帮助。


既然我想找到错误,我需要相同的步长吗?exp(-c * dx)我知道错误将以wherec是任意常数的形式绘制。我知道这一点,因为伪光谱方法有错误,exp(-c / dx)但我将针对1 / dx.

4

1 回答 1

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/2which is结束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]])
于 2013-09-25T14:16:37.827 回答