使用quiver绘制矢量场

3

我正在尝试复制一个带有分量的二维向量地图

 v = 100/a * exp(-1/a^2 * ((x+0.55)^2+y^2))(-y,x) - 100/a * exp(-1/a^2 * ((x-0.55)^2+y^2))(-y,x)

这是我的代码。它没有生成我想要的地图(请参见附带的向量地图)。有人可以帮我吗?

import numpy as np
import matplotlib.pyplot as plt
import math

grid_resolution = 25
grid_size = 2*grid_resolution+1
a = 0.2
x = np.linspace(-1,1,grid_size)
y = np.linspace(-1,1,grid_size)
X,Y = np.meshgrid(x, y)

vx = np.zeros((grid_size,grid_size))
vy = np.zeros((grid_size,grid_size))

for i in range(0,grid_size):
    for j in range(0,grid_size):
        x0 = x[j]
        y0 = y[i]
        xx = (x0 + 0.55) ** 2 + y0 ** 2
        yy = (x0 - 0.55) ** 2 + y0 ** 2
        expf1 = math.exp(-xx / (a ** 2))
        expf2 = math.exp(-yy / (a ** 2))
        vx[i,j] = 100 / a * (-expf1 + expf2) * y0
        vy[i,j] = 100 / a * (expf1 - expf2) * x0

fig, ax = plt.subplots()
ax.quiver(X, Y, vx, vy)
ax.set_aspect('equal')

plt.show()

1
vxvy未被定义。 - Michael Szczesny
抱歉,我已经修改了它...谢谢! - Saturnvoyager
1个回答

3
在上一个段落中,当你计算vx[i,j]vy[i,j]时,你是在计算(x0, y0)处的向量场分量,而你应该在当前点(x0 ± 0.55, y0)处计算它。此外,你还应该改变vxvy的符号,以绘制与你链接的向量场类似的向量场。
import numpy as np
import matplotlib.pyplot as plt
import math

grid_resolution = 25
grid_size = 2*grid_resolution + 1
a = 0.2
x = np.linspace(-1, 1, grid_size)
y = np.linspace(-1, 1, grid_size)
X, Y = np.meshgrid(x, y)

vx = np.zeros((grid_size, grid_size))
vy = np.zeros((grid_size, grid_size))

for i in range(0, grid_size):
    for j in range(0, grid_size):
        x0 = x[j]
        y0 = y[i]
        xx = (x0 + 0.55)**2 + y0**2
        yy = (x0 - 0.55)**2 + y0**2
        expf1 = math.exp(-xx/(a**2))
        expf2 = math.exp(-yy/(a**2))
        vx[i, j] = -100/a*(-expf1 + expf2)*y0
        if x0 > 0:
            vy[i, j] = -100/a*(expf1 - expf2)*(x0 - 0.55)
        else:
            vy[i, j] = -100/a*(expf1 - expf2)*(x0 + 0.55)

fig, ax = plt.subplots()
ax.quiver(X,Y,vx,vy)
ax.set_aspect('equal')

plt.show()

enter image description here


非常感谢您的帮助!我想知道为什么我们要在 x0+0.55, y0x0-0.55, y0 进行计算。 - Saturnvoyager
领域公式是相对于原点 (0, 0) 而不是相对于 场地中心 (0.55, 0)(-0.55, 0) 表达的,因此在评估当前点的场时必须考虑到这一点:当前点必须相对于 场地中心 (0.55, 0)(-0.55, 0) 进行评估,而不是相对于原点,因此必须将当前点的 x 坐标加上或减去 0.55 - Zephyr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接