You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用numpy计算点电荷电场梯度时绘图异常的问题排查

点电荷电场计算与绘图问题分析

你的代码存在两个核心问题,导致电场方向不符合正点电荷向外辐射的物理规律:

1. np.gradient的分量顺序搞反了

对于二维数组,np.gradient的返回顺序是行方向(对应y轴)的梯度在前、列方向(对应x轴)的梯度在后。也就是说:

  • e_field[0]是电势对y的偏导(dV/dy)
  • e_field[1]是电势对x的偏导(dV/dx)

而电场的定义是电势的负梯度:E = -∇V = -(dV/dx, dV/dy),你需要交换两个分量的顺序,才能得到正确的x、y方向电场分量。

2. plt.quiver的位置参数错误

plt.quiver需要传入二维网格坐标X, Y来定位箭头,而不是一维的x, y。用一维数组会导致箭头位置与网格点不匹配,进一步加剧方向混乱。


修正后的代码

import numpy as np
import matplotlib.pyplot as plt

q = [10, 10, 1]  # 点电荷的(x,y)坐标和电荷量
vmin, vmax = 0, 32
x = y = np.linspace(vmin, vmax, 100)

X, Y = np.meshgrid(x, y)
# 加入1e-6避免电荷位置处的数值无穷大
potential = q[2] / np.sqrt((X - q[0])**2 + (Y - q[1])**2 + 1e-6)
# 拆分梯度分量:dV/dy, dV/dx
dV_dy, dV_dx = np.gradient(potential)
# 计算正确的电场分量
E_x = -dV_dx
E_y = -dV_dy

# 计算合适的缩放比例
s = max(np.max(E_x), np.max(E_y)) * 0.1
# 使用二维网格坐标定位箭头,传入正确的电场分量
plt.quiver(X, Y, E_x, E_y, units='xy', pivot='tail', width=0.03, scale=s)
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(vmin, vmax)
plt.ylim(vmin, vmax)
plt.show()

内容的提问来源于stack exchange,提问作者Mikołaj Grymuza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 04:10:04