SciPy中有一個專門用于解決偏微分方程(PDEs)的模塊,稱為scipy.integrate
。其中包含了solve_ivp
函數,可以用來求解PDEs的初值問題。下面是一個簡單的示例,演示如何使用SciPy解決一個一維熱傳導方程:
import numpy as np
from scipy.integrate import solve_ivp
# 定義熱傳導方程
def heat_eqn(t, u, k, dx):
dudt = np.zeros_like(u)
dudt[0] = 0 # 邊界條件
dudt[-1] = 0 # 邊界條件
for i in range(1, len(u)-1):
dudt[i] = k * (u[i-1] - 2*u[i] + u[i+1]) / dx**2
return dudt
# 設置參數和初始條件
k = 0.1 # 熱傳導系數
L = 1 # 區域長度
N = 100 # 離散點數
dx = L / (N-1) # 離散步長
x = np.linspace(0, L, N) # 區域網格點
u0 = np.sin(np.pi*x) # 初始條件
# 求解熱傳導方程
sol = solve_ivp(heat_eqn, (0, 1), u0, args=(k, dx), t_eval=np.linspace(0, 1, 100))
# 可視化結果
import matplotlib.pyplot as plt
plt.plot(x, sol.y[:, 0])
plt.xlabel('x')
plt.ylabel('Temperature')
plt.title('Heat Equation Solution')
plt.show()
在這個示例中,我們定義了一個一維熱傳導方程heat_eqn
,設置了熱傳導系數k
、區域長度L
和離散點數N
,并解出了方程的數值解并可視化了結果。您可以根據您的具體問題修改此示例以適應不同的PDEs和邊界條件。