from scipy import *import matplotlib.pyplot as pltdef plot_elines(x_grid, y_grid, potential, field): fig, ax = plt.subplots(figsize=(13, 13)) im_cs = ax.contour(x_grid, y_grid, potential, 18, cmap='inferno') plt.clabel(im_cs, inline=1, fontsize=7) ax.quiver(x_grid[::3, ::3], y_grid[::3, ::3], field[0, ::3, ::3], field[1, ::3, ::3],) ax.set_xlabel("$x$") ax.set_ylabel("$y$") plt.show()# define q configuration (x,y positions)charges = [ [1, 1],]xx, yy = meshgrid(linspace(-4, 4), linspace(-4, 4))# potential functione_pot = 0.for idx, q in enumerate(charges): dx, dy = xx-q[0], yy-q[1] rr = hypot(dx, dy) e_pot += 1/(4*pi) * 1./rre_field = gradient(-e_pot)e_field /= hypot(e_field[0], e_field[1]) * 5# why is this needed?e_field[0] = e_field[0].Te_field[1] = e_field[1].Tplot_elines(xx, yy, e_pot, e_field)我有一個關(guān)于使用gradientnumpy/scipy 函數(shù)的問題。我在這里繪制電場等勢線和單個正電荷的場向量。定義是E = -grad(V)根據(jù)定義,場向量(箭袋)和等勢線(輪廓)應(yīng)該在空間中的所有點(diǎn)都相互正交,并且由于電荷是正的,箭頭需要指向遠(yuǎn)離電荷本身。我是用scipy的gradient函數(shù)來計算E的,但是我發(fā)現(xiàn)如果不通過gradient函數(shù)轉(zhuǎn)置xy網(wǎng)格輸出,輸出是錯誤的。比較兩個輸出(有.T(正確)和沒有.T(錯誤)):對比為什么需要轉(zhuǎn)置?還是我在繪制錯誤的圖?謝謝。
添加回答
舉報
0/150
提交
取消