Python:从标量场的渐变中获取矢量场

时间:2018-04-28 19:39:07

标签: python numpy matplotlib physics calculus

我试图将潜在值绘制为x和y的函数,并使用此函数将电场绘制为矢量场。我没有成功绘制矢量字段,因为为了使用numpy.gradient,我需要知道我的数据函数,或者以其他形式获取我的数据。目前我的数据格式为:

x = [3,3,3...9]
y = [1,2,3...9]
# v is potential as a function of the corresponding x and y values.
v = [0.436744, 0.411724...3.626803] 

到目前为止,我的代码只是从文件中提取数据,然后使用matplotlib绘制轮廓和轮廓图,如下所示。

import numpy as np
from matplotlib import cm
import matplotlib.pyplot as plt

contours=plt.tricontour(x, y, v, colors='k',linewidths=2,linestyles='solid')
plt.tricontourf(x, y, v, cmap=cm.hsv)
plt.clabel(contours, inline=1, fontsize=14)
plt.colorbar()
plt.show()

似乎我应该使用np.gradient加上plt.quiver(x, y, E),其中E是电场 - 使用E=-Grad(V)的事实。

以下是我当前输出的示例:current output 我试图让它看起来像这样:this 请注意叠加的矢量场。 这里使用了以下代码:

# Contour plot for regular grid
dx = 0.1
dy = 0.1
xr = np.arange(-1, 1, dx)
yr = np.arange(-1, 1, dy)

# Create grid corresponding to xr and yr arrays
xx, yy = np.meshgrid (xr, yr, indexing = 'ij')
zz = xx + yy*yy

gradx, grady = np.gradient (zz, dx, dy)

n = 20
#l = np.array([0.0, 0.5, 1.0, 1.5, 2.0])

plt.contourf(xx, yy, zz, n)
plt.contour(xx, yy, zz, levels = l, colors = 'k', linewidths = 1, linestyles = 'solid')
plt.quiver(xx, yy, gradx , grady)
plt.show()

这两种情况的不同之处在于,在我的情况下,我没有一个已知的函数可以用来计算标量场的梯度。在后一种情况下,函数是已知的,因此可以计算梯度。由于这种差异,我不确定如何从这里开始。

提前感谢您提供的任何指导和帮助。

0 个答案:

没有答案