一维非定常热传导方程有限差分法使用BTCS格式
时间: 2023-10-05 14:09:35 浏览: 139
一维非定常热传导方程可以表示为:
$$\frac{\partial u}{\partial t} = \alpha \frac{\partial^2 u}{\partial x^2}$$
其中,$u(x,t)$是温度分布,$\alpha$是热扩散系数。
使用BTCS格式进行有限差分:
$$\frac{u_i^{n+1} - u_i^n}{\Delta t} = \alpha \frac{u_{i+1}^{n+1} - 2u_i^{n+1} + u_{i-1}^{n+1}}{(\Delta x)^2}$$
其中,$u_i^n$表示在位置$x_i$和时间$t_n$处的温度值,$\Delta x$和$\Delta t$分别为空间和时间步长。
整理得到:
$$-\frac{\alpha \Delta t}{(\Delta x)^2}u_{i-1}^{n+1} + \left(1 + \frac{2\alpha \Delta t}{(\Delta x)^2}\right)u_i^{n+1} -\frac{\alpha \Delta t}{(\Delta x)^2}u_{i+1}^{n+1} = u_i^n$$
可以看到,该方程是一个三对角矩阵方程,可以使用追赶法等方法求解。
相关问题
一维非定常热传导方程有限差分法使用BTCS格式python
以下是使用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)