求解金属杆热传导方程:一端100℃一端0℃的数值实现
FTCS格式求解一维金属杆热传导问题
针对一端维持100℃、另一端维持0℃的金属杆热传导问题,我用FTCS(Forward-Time Centered-Space)显式格式实现了热传导方程的数值求解,下面是基于Python的完整代码,依赖numpy和matplotlib库:
完整实现代码
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): # 计算FTCS格式的稳定性参数s(傅里叶数) 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) # 初始化温度场数组,默认全0(对应右端初始0℃边界) T = np.zeros([r, c]) # 设置左端边界条件:所有时间步下温度恒定为T0 T[:, 0] = T0 # 时间迭代求解温度场 for n in range(0, r - 1): for j in range(1, c - 1): # FTCS格式的温度更新公式 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) # 可选:绘制不同时间点的温度分布曲线 plt.figure(figsize=(10,6)) # 选取几个关键时间点可视化 time_indices = [0, int(r/4), int(r/2), r-1] plot_colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728'] for idx, ti in enumerate(time_indices): plt.plot(y, T[ti], color=plot_colors[idx], label=f't = {round(ti*dt,3)}s') plt.xlabel('Position (m)') plt.ylabel('Temperature (℃)') plt.title('Temperature Distribution Along the Metal Rod') plt.legend() plt.grid(alpha=0.3) plt.show()
关键说明
- 稳定性校验:FTCS是显式格式,必须满足
s ≤ 0.5才能保证数值稳定,本次参数计算得到s = 0.2,符合稳定条件 - 边界条件:代码中左端固定为100℃,右端因初始数组全0且迭代中未修改,自动保持0℃,完全匹配问题要求
- 返回值解析:函数返回空间坐标数组
y、完整温度场数组T(行对应时间步,列对应空间节点)、总时间步数r以及稳定性参数s
内容的提问来源于stack exchange,提问作者Googlebot
相关产品推荐
相关产品推荐

