傅里叶普方法求解一维热方程的python代码
时间: 2023-12-15 10:12:32 浏览: 96
一维二维热扩散方程的数值解法.zip
下面是使用傅里叶谱方法求解一维热方程的Python代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义常数
L = 1.0 # 空间范围
T = 0.1 # 时间范围
N = 100 # 空间网格数
M = 5000 # 时间步数
α = 0.1 # 热扩散系数
# 空间网格步长
dx = L / N
# 时间步长
dt = T / M
# 定义空间网格和时间网格
x = np.linspace(0, L, N+1)
t = np.linspace(0, T, M+1)
# 初始条件
u = np.exp(-(x-0.5)**2 / (2*0.02))
# 傅里叶谱方法求解
for k in range(1, M+1):
u_hat = np.fft.fft(u)
λ = np.array([j*np.pi/L for j in range(N//2+1)] + [-j*np.pi/L for j in range(1, N//2)])
u_hat = u_hat * np.exp(-α*dt*λ**2)
u = np.real(np.fft.ifft(u_hat))
# 画图
plt.plot(x, u)
plt.xlabel('x')
plt.ylabel('u')
plt.show()
```
在这个例子中,我们使用了傅里叶谱方法来求解一维热方程。具体来说,我们将初始条件视为一个函数 $u(x)$,然后使用傅里叶变换将其转换为频域,然后在频域中进行时间步进。在每个时间步长 $dt$ 中,我们将 $u$ 的频域表示乘以一个衰减因子 $\exp(-\alpha dt \lambda^2)$,其中 $\lambda$ 是频率。然后我们使用傅里叶逆变换将其转换回空间域,并重复该过程直到达到所需的时间步数。最终,我们得到了热方程的解 $u(x,t)$。
阅读全文