You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 23:47:38