使用numpy计算梯度

0 投票
1 回答
36 浏览
提问于 2025-04-14 16:33

我正在尝试计算并绘制一个点电荷的电场,这个电场是由点电荷的电势的负梯度给出的。我想用np.gradient来实现这个。

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt

q = [10, 10, 1]  # cooridnates (x,y) and value of charge of point charge
vmin, vmax = 0, 32
x = y = np.linspace(vmin, vmax, 100)

X, Y = np.meshgrid(x, y)
potential = q[2] / np.sqrt((X - q[0]) ** 2 + (Y - q[1]) ** 2)
e_field = np.gradient(potential)

s = max(np.max(e_field[0]), np.max(e_field[1])) * 0.1
plt.quiver(x, y, -e_field[0], -e_field[1], units='xy', pivot='tail', width=0.03, scale=s)
plt.xlabel('x')
plt.ylabel('y')
plt.show()

我试着用np.meshgrid和np.gradient来计算,但不知道为什么,当你查看绘图时,似乎点电荷在对角线上吸引其他正电荷,而在反对角线上又排斥它们。显然这不对,一个正电荷应该在所有方向上都排斥,箭头应该向外指向所有方向。我的代码哪里出问题了?

1 个回答

0

没关系,我解决这个问题的方法就是把plt.quiver里的e_field[0]和e_field[1]的顺序调换了一下。看来就只是这么简单。

撰写回答