Ошибка в matplotlib.pyplot Я строю тепловую диаграмму пластины. когда я положил аналогичные длины по осям X и Y, все в порядке. Однако, если я добавлю длину оси 150 быков и длину оси 1, то внутри будут белые пятна. печать Temp2d я вижу, что есть правильные значения внутри. для пластины я полагаю, что нижняя и левая стороны изолированы, а верхняя и правая стороны имеют температуру Tn и Te соответственно.
import time
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from scipy.linalg import solve
#info
Tn=None
Te=None
Lx=None
Ly=None
N=None
while Tn==None or Te==None or Lx==None or Ly==None or N==None:
try:
Tn=int(input('Temperature at north side='))
Te=int(input('Temperature at east side='))
Lx=int(input('Length of x axis='))
Ly=int(input('Length of y axis='))
N=int(input('Minimum nodes per side='))
except ValueError:
print("Not an integer value.")
start_time=time.time()
if Ly<Lx:
Ny=N
Ygrid=np.linspace(0,Ly,Ny)
dY=Ygrid[1]-Ygrid[0]
dX=dY
Nx=Lx/dX+1
Nx=int(Nx)
print('Nx=',Nx,'Ny=',Ny)
Xgrid=np.linspace(0,Lx,Nx)
dX=Xgrid[1]-Xgrid[0]
else:
Nx=N
Xgrid=np.linspace(0,Lx,Nx)
dX=Xgrid[1]-Xgrid[0]
dY=dX
Ny=Ly/dY+1
Ny=int(Ny)
print('Nx=',Nx,'Ny=',Ny)
Ygrid=np.linspace(0,Ly,Ny)
dY=Ygrid[1]-Ygrid[0]
print('dX=',dX,'dY=',dY)
Snodes=Nx*Ny
print('Total Nodes=',Snodes)
Xnodes=np.zeros((2,Snodes))
for j in range (0,Ny):
for i in range (0, Nx):
node=j*Nx+i
Xnodes[0,node]=i*dX
Xnodes[1,node]=j*dY
fig,ax=plt.subplots(1,1)
ax.plot(Xnodes[0],Xnodes[1],marker='.',ls='-')
plt.show(block=False)
A=np.zeros((Snodes,Snodes))
B=np.zeros(Snodes)
##External Nodes
#Adiabetic Walls
i=0 #node=j*Nx+i=j*Nx
for j in range (0,Ny-1):
node=j*Nx
nodep1=j*Nx+1
A[node,node]=1
A[node,nodep1]=-1
j=0 #node=j*Nx+i=i
for i in range (1,Nx-1):
node=i
nodep1=Nx+i
A[node,node]=1
A[node,nodep1]=-1
#Dirchlet
i=Nx-1
for j in range (0,Ny-1):
node=j*Nx+i
A[node,node]=1
B[node]=Te
j=Ny-1
for i in range (0,Nx-1):
node=j*Nx+i
A[node,node]=1
B[node]=Tn
#Node between Te and Tn side
A[Nx*Ny-1,Nx*Ny-1]=1
B[Nx*Ny-1]=(Te+Tn)/2
##Internal Nodes
for i in range (1,Nx-1):
for j in range (1,Ny-1):
node=j*Nx+i
nodeip1=j*Nx+i+1
nodeim1=j*Nx+i-1
nodejp1=(j+1)*Nx+i
nodejm1=(j-1)*Nx+i
A[node,node]+=-2/dX**2-2/dY**2
A[node,nodeip1]+=1/dX**2
A[node,nodeim1]+=1/dX**2
A[node,nodejp1]+=1/dY**2
A[node,nodejm1]+=1/dY**2
#Temperature
Temp= solve(A, B)
Temp2d=np.zeros((Ny,Nx))
for j in range (0,Ny):
for i in range (0,Nx):
node=j*Nx+i
Temp2d[j,i]=Temp[node]
colorinterpolation = 50
colourMap = plt.cm.jet
fig,ax=plt.subplots(1,1)
cp=ax.contourf(Xgrid,Ygrid,Temp2d,colorinterpolation, cmap=colourMap)
fig.colorbar(cp)
plt.title("Contour of Temperature")
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show(block=False)
end_time=time.time()-start_time
print('Total time:')
print(end_time)