Python 中箭袋的奇怪情节

问题描述 投票:0回答:1

我有一个形状为 (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 值,如您所见

enter image description here

代码:

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方向

python matplotlib
1个回答
0
投票

更改 meshgrid() 命令以添加选项

 indexing=‘ij’ 

如果您希望绘图数组具有您在 bx[] 和 bz[] 中假定的顺序。

© www.soinside.com 2019 - 2024. All rights reserved.