我正在尝试修改旧代码以解决新问题,但我遇到了一些问题。 我有这个代码,使用松弛方法解决区域中任何一点的潜力。
from matplotlib.pylab import *
nx=100
V=zeros((nx,nx))
V[nx-1,:]=1
err=1.0
while (err > 1e-3):
Vold=V.copy()
V[1:-1,1:-1]=0.25*(V[:-2,1:-1]+V[2:,1:-1]+V[1:-1,:-2]+V[1:-1,2:])
u = (V - Vold)
err = sqrt(sum(u*u))
imshow(V, extent=[0,1,0,1])
title('Electrostatic Potential')
colorbar()
show()
我正在努力解决长度为2b的接地立方体体积内的电位,该立方体的电荷Q均匀分布在较大立方体中心的另一个立方体(边= 2a)的体积上。其中Q = 1.5 * 10 ^ -7℃,b = 3m,a = 1m N = 40个分度,每个分区的长度为3/20 m。由于Q均匀分布在中心立方体上,因此当a = 1 m时,较小立方体内的任何地方的p(电荷密度)都是Q / Vol = Q / 8 C / m ^ 3的恒定值。令p为3d阵列给出p = Q / 8在x,y,z =(N / 2-(1/3)N,N / 2 +(1/3)N)和p = 0之间的其他地方。 我到目前为止的代码是
from matplotlib.pylab import *
N=40
b=3.0
a=1.0
e=1.256*10**-6
h=(2.0*b)/N
q=1.5*10**-7
Vol=8*a**3
V=zeros((N,N,N))
p=zeros((N,N,N))
V[:,:,:]=0
p[(N/2-(a*N)/b):(N/2+(a*N)/b),(N/2-(a*N)/b):(N/2+(a*N)/b),(N/2-(a*N)/b):(N/2+(a*N/b)]=q/Vol
err=1.0
while (err > 1e-3):
Vold=V.copy()
V[1:-1,1:-1,1:-1]=(V[:-2,1:-1,1:-1]+V[2:,1:-1,1:-1]+V[1:-1,:-2,1:-1]+V[1:-1,2:,1:-1]+V[1:-1,1:-1,:-2]+V[1:-1,1:-1,2:])/6+p[1:-1,1:-1,1:-1]*h**2/(6*e)
u = (V - Vold)
err = sqrt(sum(u*u))
print V[N/2,N/2,N/2]
但是我没有得到V(中心)〜= 1166伏特的预期值。而是得到V(中心)〜= 0.02伏特。程序是否正确,我的期望值是否正确或计算中是否存在错误?