2016-10-15 5 views
0

저는 오랫동안 Mathematica 사용자였으며 다양한 노트북을 Python (버전 3)으로 변환하는 과정에있었습니다. 플로팅에 대해서는 matplotlib를 사용했습니다. 나는 걸림돌에 빠졌고 무엇이 잘못 될지 잘 모르겠습니다. Matplotlib을 사용하여 Dipole의 Vector Field Plot을 만들려고 시도합니다.

나는 다음과 같은 티카 코드를 변환하려고 해요 :

(* simple electric dipole *) 
Ex[x_, y_] := (x + 1)/((x + 1)^2 + y^2) - (x - 1)/((x - 1)^2 + y^2) 
Ey[x_, y_] := y/((x + 1)^2 + y^2) - y/((x - 1)^2 + y^2) 
StreamPlot[{Ex[x, y], Ey[x, y]}, {x, -3.5, 3.5}, {y, -3.5, 3.5}] 

이 다음 그림을 생성합니다

Electric Dipole

내가이 사용하는 파이썬 코드를 재현하고 싶다.

from pylab import * 
X,Y = meshgrid(arange(-4,4,.2),arange(-4,4,.2)) 
Ex = (X + 1)/((X+1)**2 + Y**2) - (X - 1)/((X-1)**2 + Y**2) 
Ey = Y/((X+1)**2 + Y**2) - Y/((X-1)**2 + Y**2) 
figure() 
Q = quiver(Ex, Ey) 
l,r,b,t = axis() 
dx, dy = r-l, t-b 
axis([l-0.05*dx, r+0.05*dx, b-0.05*dy, t+0.05*dy]) 
show() 

는 다음 그림 생성합니다 :

FUBAR

난 여전히 파이썬에서 플롯하는 방법을 배우고, 그리고 I는 벡터 필드 플롯을 만드는 방법 좀 확실 해요. 모든 통찰력은 인정 될 것이다.

답변

0

이 문제는 노드에서 필드의 강도가 매우 높기 때문에 떨림이 잘못 조정 된 것입니다. 우리가 pyplot에 또한 streamplot 기능을 사용하는 경우 우리는 다음을 얻을 수있다, 그러나

enter image description here

: 우리가 인수 scale=50과 화살통 확장 할 경우 우리는 음모를 얻을

enter image description here

네가 나에게 묻는다면 훨씬 좋은 음모가 될거야.

다음은 참조 용 코드입니다.

import numpy as np 
import matplotlib.pyplot as plt 

#%% Plot the fields 
X,Y = np.meshgrid(np.arange(-4,4,.2), np.arange(-4,4,.2)) 
Ex = (X + 1)/((X+1)**2 + Y**2) - (X - 1)/((X-1)**2 + Y**2) 
Ey = Y/((X+1)**2 + Y**2) - Y/((X-1)**2 + Y**2) 

plt.figure() 
plt.streamplot(X,Y,Ex,Ey) 
plt.title('streamplot') 

plt.figure() 
plt.quiver(X,Y,Ex,Ey,scale=50) 
plt.title('quiver')