1D有限元素 形状函数模拟器 返回
有限元素法

1D有限元素 形状函数模拟器

有限元素法的核心「形状函数」的直观学习工具。在线性2节点要素和二次3节点要素之间切换,改变自然坐标 ξ 和节点值,要素内的插值场 u(ξ)·单位分割 ΣN=1·场的梯度 du/dξ 可以实时分析。

参数设置
元素类型
线性为2节点,二次为加上中间节点的3节点
自然坐标 ξ
要素内的评估点(−1〜+1的无量纲坐标)
节点1的值 u₁
ξ=−1 处节点给定的物理量
节点2的值 u₂
ξ=+1 处节点给定的物理量
节点3的值 u₃
中间节点 ξ=0 处的值(仅限二次元素使用)
计算结果
形状函数 N₁(ξ)
形状函数 N₂(ξ)
形状函数 N₃(ξ)
插值值 u(ξ)
ΣN(单位分割)
场的梯度 du/dξ
形状函数的可视化 — N_i(ξ) 和评估点

各色曲线是形状函数 N_i(ξ)。垂直线是当前的评估点 ξ,各曲线与该线的交点显示各自的值。节点位置为 ξ=−1, 0, +1。

形状函数 N_i(ξ)
插值的场 u(ξ)
理论·主要公式

$$u(\xi)=\sum_i N_i(\xi)\,u_i,\qquad \sum_i N_i(\xi)=1$$

要素内的场 u(ξ) 是形状函数 N_i(ξ) 和节点值 u_i 的线性组合。形状函数的和始终为1(单位分割)。

$$N_1=\frac{1-\xi}{2},\quad N_2=\frac{1+\xi}{2}$$

线性2节点元素的形状函数。ξ 的1次式,所以要素内的场是直线。

$$N_1=\frac{\xi(\xi-1)}{2},\ N_2=1-\xi^2,\ N_3=\frac{\xi(\xi+1)}{2}$$

二次3节点元素的形状函数。ξ 的2次式(抛物线),用中间节点 ξ=0 处的 N₃ 能表达弯曲的分布。

1D形状函数基础

🙋
我在读有限元素法的书时,「形状函数」这个术语出现了很多次。这到底是什么意思?
🎓
简单说就是「从节点的值来填充要素内部的插值工具」。连续体的温度或位移本来在任何地方都有值,是无限自由度的函数,但计算机无法处理。有限元素法只在要素的角(节点)处有值,节点之间用形状函数插值。要素内的场是 u(ξ) = ΣN_i·u_i,也就是「用形状函数这个权重把节点值混合在一起」。
🙋
我明白了,混合的比例。那这个权重是怎么确定的呢?当我在左边把元素改为「线性」并改变ξ时,N₁和N₂是交叉的直线。
🎓
很好的观察。线性元素的 N₁=(1−ξ)/2、N₂=(1+ξ)/2 是1次式。重要的是「在自己的节点处为1,在对方的节点处为0」。在 ξ=−1 处 N₁=1, N₂=0,在 ξ=+1 处反过来。这叫克罗内克delta性质。正是因为这个,输入节点1的值时,u(−1) 就能等于 u₁。形状函数「不会辜负」节点值。
🙋
结果卡片上有「ΣN」,改变ξ后始终是1.000。这是什么意思?
🎓
那是「单位分割(partition of unity)」,是形状函数最重要的性质之一。要素内任何地方的形状函数和都是1。有了这个,当所有节点都给定相同的值 c 时,u = c·ΣN = c,要素就能完美地再现常数值的场。物理上讲就是「刚体平移可以以零应变表示」。如果ΣN偏离了1,自制的要素在仅仅平移时就会产生虚假应变,解永远不会收敛。
🙋
把元素改为「二次」时,形状函数变成了抛物线。线性和二次怎么区别使用?
🎓
线性元素内部是直线,只能表示直线分布。二次元素在中点加了一个节点,变成2次式,能表达弯曲的分布和梯度的变化。比如梁的弯曲或应力集中部,用二次元素即使单元数少,精度也会高很多。实务中Ansys、Abaqus等商业FEM软件,应力计算的解析都是用二次元素(Abaqus的c3d20等)作为标准。但节点和计算量会增加,不是什么都用二次就行。
🙋
最后再问一个。为什么不用实坐标 x,而要用 −1〜+1 的坐标 ξ ?
🎓
这就是「自然坐标」,是为了不管要素长度和位置如何,都能使用同一套公式的技巧。10mm的要素和100mm的要素在ξ世界里都是 −1〜+1。所以形状函数公式只需一套,用高斯求积做数值积分也能在ξ空间标准化。坐标 x 和场 u 都用相同的形状函数插值的想法叫「等参数要素」。现代FEM代码几乎都用这个方式。

常见问题

形状函数 N_i(ξ) 是从节点值出发对要素内任意点的物理量进行插值的权重函数。要素内的场为 u(ξ) = ΣN_i(ξ)·u_i。形状函数具有「在自己的节点处为1,在其他节点处为0」的克罗内克delta性质,因此 u_i 就是节点 i 处的值。有限元素法使用这种形状函数,用有限个节点值来表示连续体的未知函数。
要素内任意点的形状函数和始终为1的性质称为「单位分割(partition of unity)」。这保证了要素能够正确再现常数值的场(刚体平移)。如果所有节点值都是同一常数 c,那么 u = c·ΣN_i = c,要素可以以零应变的方式表示该常数。如果单位分割被破坏,形状函数会在刚体运动中产生虚假应变,导致解不收敛。本工具可以确认在任何 ξ 处 ΣN 都恒为 1.000。
线性2节点元素仅使用2个端点节点,形状函数是ξ的1次式,所以要素内的场是直线。二次3节点元素在中点处增加一个节点,形状函数是ξ的2次式(抛物线)。二次元素即使在相同的单元数下,也能更好地捕捉弯曲的分布和梯度变化,因此在应力集中区和弯曲问题中更有优势。另一方面,计算成本会增加,节点自由度也会增加。本工具中切换元素后,可以看到形状函数从直线变为抛物线。
自然坐标(无量纲坐标)ξ 是一种基准坐标,不管要素的形状和大小如何,总是定义在 −1 到 +1 的范围内。通过用 ξ 而不是实坐标 x 来写形状函数,不同长度的要素可以使用相同的公式。这是等参数要素的基本思想,其中坐标 x 和场 u 都用相同的形状函数来插值。数值积分(高斯求积)也在 ξ 空间中进行,大大简化了实现。

实际应用

结构分析求解器的核心:Ansys、Abaqus、Nastran等所有商用FEM代码都用形状函数来组装单元刚度矩阵。单元刚度由 K = ∫Bᵀ D B dV 计算,其中应变-位移矩阵 B 正是形状函数的导数。也就是说「选择什么样的形状函数」直接决定了要素的精度、收敛性和适用范围。理解形状函数是使求解器不再是黑盒的第一步。

网格质量和单元次数的选择:实务中经常要判断「用线性要素细分还是用二次要素粗分」。在需要看应力的分析中,二次要素能更准确地捕捉弯曲和应力梯度,即使节点数相同精度也更高。另一方面,接触分析和陆式法碰撞分析倾向用线性要素。亲身体会形状函数次数的差异,会对这些选择有更直观的理解。

等参数要素和雅可比矩阵:用自然坐标 ξ 写的形状函数也用于坐标映射 x(ξ)=ΣN_i·x_i。实坐标中的导数通过 du/dx = (du/dξ)/(dx/dξ) 这样用雅可比 dx/dξ 进行变换计算。本工具显示的 du/dξ 是这个变换的前段。歪斜单元的雅可比变成负数或零时单元会破坏,所以网格质量检查的理论基础也来自这里。

有限元素法外的扩展:「用权重函数从节点值插值」的想法,在等几何分析(IGA)的NURBS基函数、无网格法的MLS近似、CFD的不连续伽辽金法等现代数值解析的许多手法中继承下来了。单位分割这个性质是这些手法共通的设计原理。用简单的1维形状函数掌握原理的话,对更高阶的手法理解会大幅加速。

常见误解和注意事项

首先常见的误解是,「形状函数是插值式,不是解本身」这一点的忽视。形状函数仅仅是「节点值确定后如何填充要素内部」的规则,节点值 u_i 是通过解联立方程 Ku=f 才能获得的。形状函数的选择影响解的精度,但仅凭形状函数看不出物理答案。本工具是手动给定节点值,只看插值行为的,要注意实际FEM分析中节点值是未知数。

其次,「提高次数就必然提高精度」的思维定式。二次要素虽然能表达弯曲分布,但节点值有剧烈振荡或荷载局部化时,高次形状函数反而会产生振荡(超调)。而且二次要素因为有中间节点,对网格不整齐和中间节点偏位很敏感。有时候细化网格比提高次数效果更稳定,所以要素次数和网格密度要一起考虑。

最后,「ΣN=1 或 ξ∈[−1,1] 是理所当然的」轻视。自制的形状函数如果单位分割不成立,刚体平移就会产生虚假应变,解永远不会收敛。自然坐标也必须始终在 −1〜+1 范围内,坐标映射破坏时ξ出范围,形状函数的意义就丧失了。歪斜单元中雅可比变成负数的问题,正是「ξ 空间和实空间的对应破坏」的状态。形状函数的朴素性质支撑着有限元素法的可靠性。

使用指南

  1. 在xiRange范围内设置自然坐标ξ(-1~+1),用xiNum来离散化
  2. 选择线性元素(2节点)或二次元素(3节点),输入各节点的位移值u₁、u₂、u₃
  3. 模拟器计算形状函数N₁(ξ)、N₂(ξ)、N₃(ξ),实时显示插值值u(ξ)=N₁u₁+N₂u₂+N₃u₃
  4. 场的梯度du/dξ通过自动微分获得,可用于要素内应力分布预测

具体计算例

对长度100mm的铝制部材应用线性要素,两端位移为u₁=0mm、u₂=0.5mm时,ξ=0.0(要素中央)处的插值值为u(0)=0.25mm。对二次要素给定u₁=0、u₂=0.6、u₃=0.5mm时,形成抛物线状的插值场,中央部的梯度为du/dξ≈0.1/mm,能更精细地追踪钢制梁的弯曲变形。

实务中的注意点