计算通过高斯立方体的电通量

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

我正在尝试编写一个简单的
Python
脚本,该脚本使用黎曼积分(我是意识到在这样做的过程中,我重新创建了许多内置于 
1 statocoulumb
2
 的实用程序。
为此,我定义了函数 
Python

(返回两个

NumPy

 数组/向量的点积)、
dot(vec0, vec1)
(返回微分面积向量)和 
NumPy
(返回电由于原点处的点电荷而在某一点的场矢量)。然后我用简单的黎曼积分在立方体的一个面上(顶面,面积矢量指向
da(x,y,z,dx,dy,dz)
方向)“积分”,期望找到
Evector(x,y,z)
的通量(来自高斯定律)。相反,我发现
+z
。不幸的是,我不清楚为什么(请注意,这不会随着黎曼分区数量的增加或减少而改善(即
(1/6) 4π
)。
我哪里做错了?

~0.006

这里有几个小错误:
python numpy math physics
1个回答
0
投票

    xstepmax, ystepmax, zstepmax
  • 的分子应该是

    import numpy as np q=1 # 1 statocoulomb def dot(vec0, vec1): return vec0 @ vec1 def da(x, y, z, dx, dy, dz): return np.array([x*dy*dz, y*dx*dz, z*dx*dy]) def Evector(x, y, z): r2 = x**2 + y**2 + z**2 return np.array([x, y, z]) * (q / r2) # Define bounds of integration for x, y, and z xmin = -1 xmax = 1 ymin = -1 ymax = 1 zmin = -1 zmax = 1 # Define number of steps for x, y, and z xstepmax = 101 ystepmax = 101 zstepmax = 101 # Define step size for x, y, and z dx = (xmax-xmin)/xstepmax dy = (ymax-ymin)/ystepmax dz = (zmax-zmin)/zstepmax # Initial value of flux flux = 0 for xsteps in range(0,xstepmax): x = xmin + (dx * xsteps) # Current x value, starting at xmin and increasing by dx with each iteration for ysteps in range(0,ystepmax): y = ymin + (dy * ysteps) # Current y value, starting at ymin and increasing by dy with each iteration flux += dot(Evector(x,y,1), da(x,y,1,dx,dy,0)) * dx * dy # dot(E,da) * dx * dy print(flux)

     而不是 
    Evector
    ,因为您必须归一化方向向量(在这种情况下也是电荷的位移):
    r^3

    同面积元向量
  • r^2
  • def Evector(x, y, z):
        rv = np.array([x, y, z])
        r3 = np.dot(rv, rv) ** 1.5
        return rv * (q / r3)
    

    当您在顶面上积分时,法线应该是 
  • dA
  • 而不是

    def da(nx, ny, nz, dx, dy, dz): return np.array([nx*dy*dz, ny*dx*dz, nz*dx*dy]) \ / np.linalg.norm(np.array([nx, ny, nz]))

    。也不需要再次乘以
    (0,0,1)
    ,因为面积元素是
    (x,y,1)
    的大小:
    dx * dy

    结果:
da


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