我有一个形状为 (x,y,z) 的矩阵,在每个矩阵元素中我存储一个 3D 数组,其中包含该点的磁场分量。但是当我尝试绘制 y=0 处的点时,箭袋表示很奇怪。 例如 z=7 处的 bx(在中间):
print(bx[:,7])
给出此输出 [0. 0.0.0.0.0.0.0.0.0.0.0.0.0.0.]
但是 z=0 处的颤动图给出了非零 x 值,如您所见
代码:
import numpy as np
from scipy import constants as cst
import matplotlib.pyplot as plt
#UDS SI
prefactor = cst.mu_0/4/np.pi
N=10#discretizacion de espira
I=-1#corriente
R=0.5#rad esp
def biotsav(i,dl,r):
return prefactor*i*np.cross(dl,r)/np.linalg.norm(r)**3
#espira en x,y discretizada
#por defecto en centro
def createSpiral(r,n_intervals,center = [0,0,0]):
theta = np.linspace(0,2*np.pi,n_intervals)
return np.array([center[0]+r*np.cos(theta),
center[1]+r*np.sin(theta),center[2]+np.zeros(n_intervals)]).T
def calculateDirVect(dl,dlant):
u=[]
for i in range(3):
u.append(dl[i]-dlant[i])
return u
def calculateRefPoint(dl,dlant):
ref = []
for i in range(3):
ref.append((dl[i]+dlant[i])/2)
return ref
def calculateDispVect(dl,p):
r=[]
for i in range((3)):
r.append(p[i]-dl[i])
return r
spiral= createSpiral(R,N,center=[1.5,1.5,1.5])
#Fijamos el punto z para el plano xy
totalB=0
zs=np.linspace(0,3,15)
xs=np.linspace(0,3,15)
ys=np.linspace(0,3,15)
b = np.empty((len(xs),len(ys),len(zs)),dtype=object)
for i in range(len(xs)):
for j in range(len(ys)):
for k in range(len(zs)):
totalB=np.array([0.,0.,0.])
dlant = spiral[-1]
p=[xs[i],ys[j],zs[k]]
for dl in spiral:
u = calculateDirVect(dl,dlant)
ref = calculateRefPoint(dl,dlant)
r = calculateDispVect(dl,p)
dlant=dl
totalB+=(biotsav(I,u,r))
b[i,j,k] = totalB
bx=np.zeros((len(xs),len(zs)),dtype='float')
bz=np.zeros((len(xs),len(zs)),dtype='float')
for i in range(len(xs)):
for k in range(len(zs)):
bx[i,k]=(b[i,0,k][0])
bz[i,k]=(b[i,0,k][2])
# Trazar los vectores del campo magnético con quiver
X, Z = np.meshgrid(xs, zs)
print(bx[:,7])
plt.quiver(X, Z, bx, bz)
plt.xlabel('x')
plt.ylabel('z')
plt.title('Campo Magnético')
plt.show()
我哪里错了,据我所知quiver中的第3个和第4个属性是箭头的x和y方向
更改 meshgrid() 命令以添加选项
indexing=‘ij’
如果您希望绘图数组具有您在 bx[] 和 bz[] 中假定的顺序。