热方程与波动方程
讲课内容
一、热方程的求解
热方程描述了物体内热量的分布随时间变化的过程,广泛应用于热传导问题。热方程的标准形式为:
∂u∂t=α∇2u
\frac{\partial u}{\partial t} = \alpha \nabla^2 u
∂t∂u=α∇2u
其中,u(x,t)u(x, t)u(x,t) 是温度分布,α\alphaα 是热扩散系数,∇2\nabla^2∇2 是拉普拉斯算子。
1.1 一维热方程
一维热方程的标准形式为:
∂u∂t=α∂2u∂x2
\frac{\partial u}{\partial t} = \alpha \frac{\partial^2 u}{\partial x^2}
∂t∂u=α∂x2∂2u
解决这个方程的方法通常是分离变量法,假设解可以写成空间部分与时间部分的乘积,即 u(x,t)=X(x)T(t)u(x, t) = X(x) T(t)u(x,t)=X(x)T(t)。
代入热方程后,可以得到两个独立的常微分方程:
T′(t)T(t)=αX′′(x)X(x)=−λ
\frac{T'(t)}{T(t)} = \alpha \frac{X''(x)}{X(x)} = -\lambda
T(t)T′(t)=αX(x)X′′(x)=−λ
这是一个分离常数的标准形式。
例子: 求解以下一维热方程:
∂u∂t=α∂2u∂x2
\frac{\partial u}{\partial t} = \alpha \frac{\partial^2 u}{\partial x^2}
∂t∂u=α∂x2∂2u
初始条件:u(x,0)=sin(πx)u(x, 0) = \sin(\pi x)u(x,0)=sin(πx),边界条件:u(0,t)=0u(0, t) = 0u(0,t)=0,u(1,t)=0u(1, t) = 0u(1,t)=0。
- 使用分离变量法,假设解为 u(x,t)=X(x)T(t)u(x, t) = X(x) T(t)u(x,t)=X(x)T(t)。
- 代入热方程,得到两个独立的常微分方程:
X′′(x)+λX(x)=0,T′(t)=−αλT(t) X''(x) + \lambda X(x) = 0, \quad T'(t) = -\alpha \lambda T(t) X′′(x)+λX(x)=0,T′(t)=−αλT(t) - 解得 X(x)=sin(nπx)X(x) = \sin(n\pi x)X(x)=sin(nπx),其中 λ=(nπ)2\lambda = (n\pi)^2λ=(nπ)2。
- 对时间部分,解得 T(t)=e−α(nπ)2tT(t) = e^{-\alpha (n\pi)^2 t}T(t)=e−α(nπ)2t。
- 总解为:
u(x,t)=∑n=1∞Bnsin(nπx)e−α(nπ)2t u(x, t) = \sum_{n=1}^{\infty} B_n \sin(n\pi x) e^{-\alpha (n\pi)^2 t} u(x,t)=n=1∑∞Bnsin(nπx)e−α(nπ)2t - 使用初始条件确定常数 BnB_nBn,最终得到解。
1.2 多维热方程
多维热方程是热方程的扩展,适用于描述二维或三维空间中温度的分布。它的标准形式为:
∂u∂t=α∇2u
\frac{\partial u}{\partial t} = \alpha \nabla^2 u
∂t∂u=α∇2u
其中 ∇2\nabla^2∇2 是拉普拉斯算子,在二维空间中为:
∇2u=∂2u∂x2+∂2u∂y2
\nabla^2 u = \frac{\partial^2 u}{\partial x^2} + \frac{\partial^2 u}{\partial y^2}
∇2u=∂x2∂2u+∂y2∂2u
求解过程与一维热方程类似,可以通过分离变量法进行解答。
二、波动方程的求解
波动方程描述了波的传播,广泛应用于声学、光学、机械振动等领域。波动方程的标准形式为:
∂2u∂t2=c2∇2u
\frac{\partial^2 u}{\partial t^2} = c^2 \nabla^2 u
∂t2∂2u=c2∇2u
其中,u(x,t)u(x, t)u(x,t) 是位移,ccc 是波速,∇2\nabla^2∇2 是拉普拉斯算子。
2.1 一维波动方程
一维波动方程的标准形式为:
∂2u∂t2=c2∂2u∂x2
\frac{\partial^2 u}{\partial t^2} = c^2 \frac{\partial^2 u}{\partial x^2}
∂t2∂2u=c2∂x2∂2u
我们也可以使用分离变量法来求解。
假设解为 u(x,t)=X(x)T(t)u(x, t) = X(x) T(t)u(x,t)=X(x)T(t),代入波动方程得到:
T′′(t)T(t)=c2X′′(x)X(x)=−λ
\frac{T''(t)}{T(t)} = c^2 \frac{X''(x)}{X(x)} = -\lambda
T(t)T′′(t)=c2X(x)X′′(x)=−λ
解得空间部分 X(x)=Asin(kx)+Bcos(kx)X(x) = A \sin(kx) + B \cos(kx)X(x)=Asin(kx)+Bcos(kx),时间部分 T(t)=Ccos(ωt)+Dsin(ωt)T(t) = C \cos(\omega t) + D \sin(\omega t)T(t)=Ccos(ωt)+Dsin(ωt),其中 ω=ck\omega = ckω=ck。
例子: 求解一维波动方程:
∂2u∂t2=c2∂2u∂x2
\frac{\partial^2 u}{\partial t^2} = c^2 \frac{\partial^2 u}{\partial x^2}
∂t2∂2u=c2∂x2∂2u
初始条件:u(x,0)=0u(x, 0) = 0u(x,0)=0,∂u∂t(x,0)=sin(πx)\frac{\partial u}{\partial t}(x, 0) = \sin(\pi x)∂t∂u(x,0)=sin(πx),边界条件:u(0,t)=0u(0, t) = 0u(0,t)=0,u(1,t)=0u(1, t) = 0u(1,t)=0。
- 假设解为 u(x,t)=X(x)T(t)u(x, t) = X(x) T(t)u(x,t)=X(x)T(t)。
- 代入波动方程,得到两个常微分方程。
- 解得空间部分 X(x)=sin(nπx)X(x) = \sin(n\pi x)X(x)=sin(nπx),时间部分 T(t)=sin(nπct)T(t) = \sin(n\pi ct)T(t)=sin(nπct)。
- 总解为:
u(x,t)=∑n=1∞Bnsin(nπx)sin(nπct) u(x, t) = \sum_{n=1}^{\infty} B_n \sin(n\pi x) \sin(n\pi ct) u(x,t)=n=1∑∞Bnsin(nπx)sin(nπct) - 使用初始条件确定常数 BnB_nBn,最终得到解。
三、初值问题与边值问题
初值问题和边值问题是偏微分方程求解中的两个重要组成部分。初值问题涉及时间或空间的初始状态,而边值问题涉及边界上的条件。
3.1 初值问题
初值问题是指给定初始时刻(通常是 t=0t = 0t=0)的状态,要求解方程在该时刻后的解。通常用于描述时间变化的问题,如热方程、波动方程等。
3.2 边值问题
边值问题是指给定某一时刻或空间上的边界条件,要求解方程在该边界条件下的解。边值问题通常出现在空间问题中,如拉普拉斯方程、静电场问题等。
3.3 经典的初值与边值问题
- 热方程: 给定初始温度分布和边界上的温度条件。
- 波动方程: 给定初始位移和初始速度,以及边界上的位移条件。
- 拉普拉斯方程: 给定静态场的边界条件。
课堂活动
活动 1:通过具体例子,计算热方程和波动方程的解,并讨论物理意义
任务:
- 使用分离变量法求解一维热方程和波动方程,比较解的形式和物理意义。
- 学生根据给定的初始条件和边界条件,计算并讨论解的变化。
例子:
- 热方程: 给定一个一维杆的初始温度分布和两端的边界条件,求解温度随时间的变化。
- 波动方程: 给定一个弦的初始位移和速度,求解其振动过程。
活动 2:让学生计算波动方程的解
任务:
- 给定初始位移 u(x,0)=sin(πx)u(x, 0) = \sin(\pi x)u(x,0)=sin(πx),初始速度 ∂u∂t(x,0)=0\frac{\partial u}{\partial t}(x, 0) = 0∂t∂u(x,0)=0,边界条件 u(0,t)=0u(0, t) = 0u(0,t)=0,u(1,t)=0u(1, t) = 0u(1,t)=0,让学生计算波动方程的解。
- 让学生用分离变量法求解,并绘制结果图。
Python 代码实现示例
1. 解一维热方程
import numpy as np
import matplotlib.pyplot as plt
# 定义参数
L = 1 # 长度
T = 1 # 时间
Nx = 50 # 空间分割数
Nt = 100 # 时间分割数
alpha = 0.01 # 扩散系数
dx = L / (Nx - 1) # 空间步长
dt = T / Nt # 时间步长
# 初始化温度分布
u = np.zeros((Nx, Nt))
x = np.linspace(0, L, Nx)
u[:, 0] = np.sin(np.pi * x / L) # 初始温度分布
# 使用显式差分法进行求解
for n in range(0, Nt - 1):
for i in range(1, Nx - 1):
u[i, n + 1] = u[i, n] + alpha * dt / dx**2 * (u[i + 1, n] - 2*u[i, n] + u[i - 1, n])
# 绘制结果
plt.imshow(u, extent=[0, T, 0, L], origin='lower', aspect='auto')
plt.colorbar(label='Temperature')
plt.xlabel('Time')
plt.ylabel('Position')
plt.title('Heat Equation Solution')
plt.show()
2. 解一维波动方程
# 波动方程的解
def wave_solution(x, t, L, c):
return np.sin(np.pi * x / L) * np.cos(np.pi * c * t / L)
# 时间和空间网格
T = 1 # 总时间
Nx = 50 # 空间分割点数
Nt = 100 # 时间分割点数
x = np.linspace(0, 1, Nx)
t = np.linspace(0, T, Nt)
X, T_grid = np.meshgrid(x, t)
# 计算波动方程解
c = 1
U = wave_solution(X, T_grid, 1, c)
# 绘制结果
plt.imshow(U, extent=[0, T, 0, 1], origin='lower', aspect='auto')
plt.colorbar(label='Displacement')
plt.xlabel('Time')
plt.ylabel('Position')
plt.title('Wave Equation Solution')
plt.show()
总结
- 热方程描述了温度分布随时间变化的过程,常通过分离变量法求解,适用于热传导等问题。
- 波动方程描述了波的传播,常用分离变量法求解,适用于振动、声波传播等问题。
- 通过编程练习可以更好地理解这些方程的物理意义,并熟悉如何用数值方法求解这些经典的偏微分方程。