使用numpy与scipy稀疏矩阵求解简单ODE时有限差分结果异常
有限差分法求解常微分方程的问题
我在用有限差分法求解简单常微分方程时遇到了问题。实际需要求解的方程更为复杂,但即便针对正弦函数的简单情况,使用scipy.sparse和numpy.linalg得到的结果不仅彼此不同,且与解析解相差较大,即便设置20000个x值也未得到改善,恳请各位提供帮助!
import numpy as np import scipy as sp nx = 20000 xs = np.linspace(0,2*np.pi,nx) dx = 2*np.pi/nx # 求解 y'' = v = sin(x) v = np.sin(xs) sol_actual = -np.sin(xs) # 构建带周期性边界条件的二阶有限差分矩阵 diagonals = [1,-2,1] A = sp.sparse.diags_array(diagonals,offsets=[-1,0,1],shape=(nx,nx)) a_l = A.tolil() a_l[-1,0] = 1 a_l[0,-1] = 1 a_l = a_l/dx**2 A_sparse = a_l.tocsr() A_numpy = A_sparse.toarray() sol_sparse = sp.sparse.linalg.spsolve(A_sparse,v) sol_np = np.linalg.solve(A_numpy,v) from matplotlib import pyplot as plt plt.plot(xs,v,label='d2x/dx2') plt.plot(xs,sol_actual,label='analytical') plt.plot(xs,sol_sparse,label='scipy sparse') plt.plot(xs,sol_np,label='numpy') plt.legend()

内容的提问来源于stack exchange,提问作者TIF
相关产品推荐
相关产品推荐

