如何解决Python的2D导热
the output of the study //////我刚刚开始学习Python,所以我是python的新手。我已经编写了一个二维热传导的简单代码。我不知道我的代码有什么问题。结果太奇怪了,我认为温度分布显示不正确。我已经搜索了很多,但是不幸的是我找不到任何答案。谁能帮我? 谢谢
# Library
import numpy
from matplotlib import pyplot
# Grid Generation
nx = 200
ny = 200
dx = 2 / (nx-1)
dy = 2 / (ny-1)
# Time Step
nt = 50
alpha = 1
dt = 0.001
# Initial Condition (I.C) and Boundry Condition (B.C)
T = numpy.ones((nx,ny)) # I.C (U = VeLocity)
x = numpy.linspace(0,2,nx) # B.C
y = numpy.linspace(0,ny) # B.C
Tn = numpy.empty_like(T) #initialize a temporary array
X,Y = numpy.meshgrid(x,y)
T[0,:] = 20 # B.C
T[-1,:] = -100 # B.C
T[:,0] = 150 # B.C
T[:,-1] = 100 # B.C
# Solver
###Run through nt timesteps
for n in range(nt + 1):
Tn = T.copy()
T[1:-1,1:-1] = (Tn[1:-1,1:-1] +
((alpha * dt / dx**2) *
(Tn[1:-1,2:] - 2 * Tn[1:-1,1:-1] + Tn[1:-1,0:-2])) +
((alpha * dt / dy**2) *
(Tn[2:,1: -1] - 2 * Tn[1:-1,1:-1] + Tn[0:-2,1:-1])))
T[0,:] = 20 # From B.C
T[-1,:] = -100 # From B.C
T[:,0] = 150 # From B.C
T[:,-1] = 100 # From B.C
fig = pyplot.figure(figsize=(11,7),dpi=100)
pyplot.contourf(X,Y,T)
pyplot.colorbar()
pyplot.contour(X,T)
pyplot.xlabel('X')
pyplot.ylabel('Y');
解决方法
您正在使用Forward Time Centered Space离散化方案来求解热方程,当且仅当alpha*dt/dx**2 + alpha*dt/dy**2 < 0.5
时,该方程稳定。使用dt
,dx
,dy
和alpha
的值,您将得到
alpha*dt/dx**2 + alpha*dt/dy**2 = 19.8 > 0.5
这意味着您的数值解决方案将非常迅速地发散。要解决此问题,您需要缩小dt
和/或缩小dx
和dy
。例如,对于dt=2.5e-5
,其余部分与获得alpha*dt/dx**2 + alpha*dt/dy**2 = 0.495
之前一样,经过1000次迭代后,解决方案如下所示:
另外,您可以使用不同的离散化方案,例如用于API scheme,它是无条件稳定的,但是很难实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。