一维非定常热传导方程有限差分法使用BTCS格式python
时间: 2023-10-05 10:12:15 浏览: 88
以下是使用BTCS格式求解一维非定常热传导方程的Python代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 设置模拟参数
L = 1.0 # 杆的长度
T = 1.0 # 总时间
alpha = 1.0 # 热扩散系数
dx = 0.01 # 空间步长
dt = 0.001 # 时间步长
# 设置初始条件
x = np.arange(0, L+dx, dx)
T0 = np.sin(np.pi*x)
T = T0.copy()
# 设置边界条件
T[0] = T[-1] = 0
# 设置离散化系数
r = alpha*dt/dx**2
# 构建系数矩阵
A = np.zeros((len(x)-2, len(x)-2))
A[0, 0] = 1 + 2*r
A[0, 1] = -r
for i in range(1, len(x)-3):
A[i, i-1] = -r
A[i, i] = 1 + 2*r
A[i, i+1] = -r
A[-1, -2] = -r
A[-1, -1] = 1 + 2*r
# 迭代求解
for n in range(int(T/dt)):
b = T[1:-1]
b[0] += r*T[0]
b[-1] += r*T[-1]
T[1:-1] = np.linalg.solve(A, b)
# 绘图
plt.plot(x, T0, label='Initial T')
plt.plot(x, T, label='Final T')
plt.xlabel('x')
plt.ylabel('T')
plt.legend()
plt.show()
```
其中,系数矩阵A和右侧向量b的构建采用了稀疏矩阵的方法,可以提高求解效率。在每个时间步长内,先将边界条件用一阶差分格式更新,再使用线性方程组求解器求解离散化的方程组。最终得到的结果如下图所示:
![BTCS](https://i.imgur.com/1zJZcF8.png)