这是一个基于 Python 实现的有限元方程求解程序,旨在通过有限元方法解决非齐次两点边值问题。它用于近似求解在给定域内的微分方程解。该项目主要利用numpy和scipy库,将域离散化为较小的单元,并使用适当的基函数构建 Ritz-Galerkin 方程。最后分别通过应用高斯消去法和雅可比迭代等数值技术,求解生成的线性方程组。
【免费】Python实现的有限元方程求解程序源码课设项目.zip资源-CSDN文库
问题描述
根据已知下列非齐次两点边值问题(1.2.28)
与下列变分问题等价:求𝑢 ∈ 𝐻^1, 𝑢(𝑎) = 𝛼,使
任务1
划分求解域
分析并构建Ritz-Galerkin方程
- 编程构建Ritz-Galerkin方程并求解,核心代码:
femsolver.py
有限元解的函数图像
-
高斯消去法求解结果
- Uh-gauss-0.2.png
- Uh-gauss-0.1.png
- Uh-gauss-0.05.png
- Uh-gauss-0.02.png
- Uh-gauss-0.01.png
-
雅可比迭代法求解结果
- Uh-jacobi-0.2.png
- Uh-jacobi-0.1.png
- Uh-jacobi-0.05.png
- Uh-jacobi-0.02.png
- Uh-jacobi-0.01.png
任务2:绘制误差函数图像
-
高斯消去法求解结果
- Error-gauss-0.2.png
- Error-gauss-0.1.png
- Error-gauss-0.05.png
- Error-gauss-0.02.png
- Error-gauss-0.01.png
-
雅可比迭代法求解结果
- Error-jacobi-0.2.png
- Error-jacobi-0.1.png
- Error-jacobi-0.05.png
- Error-jacobi-0.02.png
- Error-jacobi-0.01.png
结果分析
- 从高斯消去法求解的结果来看,$u_h$函数近似估计精确解的效果很好,节点处的数值解与精确解的值几乎是重合的,而且随着h的减小误差也不断减少,当h=0.01时,误差的尺度为1e-5至1e-4,基本可以忽略不计。
- 从雅可比迭代法求解的结果来看,$u_h$函数近似估计精确解的效果不太好,节点处的数值解与精确解的值之间误差较大,而且随着h的减少,误差下降到一定程度(1e-2至1e-1)后不再下降。经过程序检验发现造成雅可比迭代不收敛的原因在于对有限元方程构建的总刚度矩阵是一个非对角占优矩阵,即不满足雅可比迭代的收敛要求,所以通过雅可比迭代法求解线性方程组 KU=F 无法得到收敛的数值解。