Python 有限元从零开始

许可证: GPL-3.0 · 更新于 2026-08-01

简介

学习有限元的最佳路径是自己动手实现一遍。本教程不依赖任何现成 FEM 框架,从三角单元出发,用纯 NumPy/SciPy 构建 2D 线弹性有限元求解器,覆盖从网格生成到后处理的完整流程。适合想深入理解 FEM 底层原理的工程师与学生。

学习路径

章节 1:三角单元与形状函数(2–3 天)

目标:理解 FEM 的核心——从弱形式到单元矩阵

实现

import numpy as np

# 三角单元形状函数 N1, N2, N3
# 面积坐标 (L1, L2, L3)
def shape_functions(xi, eta):
    return [1 - xi - eta, xi, eta]

# 形函数导数(Jacob 变换)
def dN_dXY(xi, eta, coords):
    # coords: 3x2 节点坐标
    J = np.array([[coords[1,0]-coords[0,0], coords[2,0]-coords[0,0]],
                  [coords[1,1]-coords[0,1], coords[2,1]-coords[0,1]]])
    detJ = np.linalg.det(J)
    # ... 组装 B 矩阵

章节 2:刚度矩阵组装(2–3 天)

目标:掌握全局刚度矩阵的组装逻辑

关键

  • 单元刚度矩阵 K_e = ∫ B^T D B dΩ
  • 高斯积分(2D 3点/7点积分)
  • 全局矩阵组装(稀疏矩阵 COO 格式)

章节 3:边界条件与求解(1–2 天)

目标:掌握 Dirichlet/Neumann 边界条件的处理

关键

  • 硬边界(直接置零)/ 惩罚法
  • SciPy 稀疏线性求解器
  • 结果回代与应力恢复

章节 4:网格生成与后处理(1–2 天)

目标:自己写 Delaunay 三角剖分 + 结果可视化

工具

  • scipy.spatial.Delaunay 做三角剖分
  • matplotlib 等值线 / 伪彩色图

适合人群

  • 机械/土木/航空航天专业学生,理解 FEM 公式推导但想动手验证
  • 有编程基础,想从第一性原理理解 FEM 而非仅会操作软件
  • 为学习 FEniCS / Abaqus 打基础(先自己实现再用框架会理解更深)
标签: 有限元FEMPython固体力学数值方法
相关条目
  • 物理仿真与机器学习融合路线图 · 从经典 PDE 数值方法到数据驱动物理 AI 的系统学习路线,覆盖有限元、有限体积、代理模型、PINN 等方法的演进逻辑与适用场景。
  • FNO(Fourier Neural Operator)入门教程 · 系统学习 Fourier Neural Operator(傅里叶神经算子)从理论到代码实现,适合希望将神经算子用于 PDE 代理模型的工程师与研究者。
  • DeepONet 深度算子网络入门 · 系统学习 DeepONet(深度算子网络)的理论原理与 DeepXDE 代码实现,适合需要处理多物理参数场景的 PINN 开发者。
  • 算子学习综述(Operator Learning Survey) · 系统梳理算子学习方法的综述论文,覆盖 DeepONet、FNO 及其变体的理论、架构与误差分析,是理解「学习无限维映射」最合适的入门与查阅材料。
  • Physics-Based Deep Learning 在线教材 · 由慕尼黑工业大学团队维护的免费在线教材,系统讲解「物理 + 深度学习」的融合范式,从可微物理、PINN 到神经算子与湍流建模,配套可运行代码。