我解决了金属棒的热方程,其中一端保持在100°C,另一端保持在0°C。
import numpy as np
import matplotlib.pyplot as plt
dt = 0.0005
dy = 0.0005
k = 10**(-4)
y_max = 0.04
t_max = 1
T0 = 100
def FTCS(dt,dy,t_max,y_max,k,T0):
s = k*dt/dy**2
y = np.arange(0,y_max+dy,dy)
t = np.arange(0,t_max+dt,dt)
r = len(t)
c = len(y)
T = np.zeros([r,c])
T[:,0] = T0
for n in range(0,r-1):
for j in range(1,c-1):
T[n+1,j] = T[n,j] + s*(T[n,j-1] - 2*T[n,j] + T[n,j+1])
return y,T,r,s
y,T,r,s = FTCS(dt,dy,t_max,y_max,k,T0)
plot_times = np.arange(0.01,1.0,0.01)
for t in plot_times:
plt.plot(y,T[t/dt,:])
如果将纽曼边界条件更改为一端绝缘(非通量),
那么,计算术语如何处理
T[n+1,j] = T[n,j] + s*(T[n,j-1] - 2*T[n,j] + T[n,j+1])
应该被修改吗?
0
。这不是一个真正的python
或实现问题,因为在尝试编码之前,您还没有弄清楚FD离散化(或者至少没有在问题中显示更改的BC的离散化)。 - dROOOzescipy.integrate
教程中的示例,它展示了具有Neumann(“无流量”)边界条件的PDE系统的空间离散化。(时间演化使用scipy.integrate.odeint
解决;该教程是“线性方法”的一个示例。) - Warren Weckesser