Python: получение векторного поля от градиента скалярного поля - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь построить потенциальные значения как функцию от 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()

Разница в двух ситуациях заключается в том, что в моей ситуации у меня нет известной функции, которую можно использовать для вычисления градиента скалярного поля. В последнем случае функция известна, и, таким образом, можно рассчитать градиент. Я не уверен, что делать дальше из-за этой разницы.

Заранее благодарим за любые рекомендации и помощь, которую вы можете предоставить.

...