资讯详情

资讯详情

瑞利-里茨法:从能量原理到有限元的“钥匙”

结构力学做到后面很多人会绕不开一个词能量。我最早接触瑞利-里茨法与能量原理不是在教材的公式堆里而是在一篇关于组合梁稳定性的文献里作者用几行试函数就估出了临界荷载精度还相当不错。当时我的第一反应是这东西到底凭什么能近似它和传统的平衡方程解法差在哪后来自己动手推导、手算、和有限元结果对照才真正理解这套方法为什么能活到今天以及它为什么是理解有限元的一把钥匙。这篇文章想把这套方法讲透一点能量原理为什么成立瑞利-里茨法的操作流程是什么怎么选试函数误差从哪来以及它和今天有限元软件的底层关系。如果你正在学结构力学、有限元基础或者在做概念设计时需要快速估算这篇文章应该能帮上忙。1. 能量原理到底在说什么从力的平衡到势能的驻值1.1 为什么能量法能替代平衡方程传统的结构分析思路是列平衡方程、几何方程、本构方程然后解微分方程或偏微分方程组。这个思路逻辑清楚但一旦遇到变截面梁、复杂边界、板壳或者带初始缺陷的结构解析解很快就消失。更麻烦的是即使方程能列出来边界条件的处理也非常敏感一个点没对齐解就完全跑偏。能量法换了一个角度不直接求哪一点满足平衡而是问整个结构的势能什么时候取驻值。在保守系统里真实的平衡状态对应总势能的驻值点稳定平衡时还是极小值。这样一来一个求微分方程的问题就转化成一个求标量泛函极小值的问题。标量函数比向量场好处理得多也更容易做近似。打个比方一个小球在山坡上滚动最终停在谷底。你用牛顿第二定律去追踪它每一时刻的运动轨迹当然可以但如果你只想找最终稳定位置直接看地形哪里最低就够了。能量法干的就是这件事——它不追踪每一点的力而是整体上看势能的地形找到那个谷底。1.2 虚功原理与势能驻值原理在连续体系里能量原理有两种常用讲法虚功原理和势能驻值原理。虚功原理说结构处于平衡状态时对任意满足位移边界条件的虚位移外力做的虚功等于内力做的虚应变能。这个表述很像受力平衡的能量版本很多教材从它出发推势能驻值。势能驻值原理更直接系统总势能定义成Π U − W其中 U 是应变能W 是外力势能通常写作外力做的功注意符号约定。真实的位移场让 Π 取驻值也就是 δΠ 0。如果系统稳定真实解还让 Π 取极小值。用一个单自由度弹簧系统解释最清楚弹簧刚度 k一端固定另一端受拉力 F位移为 δ。应变能 U kδ²/2外力势能 W Fδ总势能Π kδ²/2 − Fδ对这个一元函数求导数并令它等于零dΠ/dδ kδ − F 0解出 δ F/k。这没用什么高深数学但思路已经完整了把能量写成位移的函数求极值得到平衡条件。连续体的瑞利-里茨法本质上就是把弹簧位移 δ替换成含若干个待定系数的试函数。1.3 从变分到参数化里茨的聪明之处理论上真实位移让 Π 达到极小但 Π 是一个泛函它的自变量不是一个数而是一个函数。要找哪个函数让 Π 最小这是一个变分问题。变分问题的严格解法需要欧拉-拉格朗日方程解决之后又绕回微分方程——这不解决问题。里茨的想法很务实既然全域找精确函数难那就先在一批看起来合理的函数里找最好的那个。把真实位移 w(x) 用一个含若干待定系数的试函数近似w(x) ≈ a₁φ₁(x) a₂φ₂(x) ... aₙφₙ(x)这里 φᵢ(x) 是预先选好的基函数aᵢ 是待定系数。把试函数代进总势能 ΠΠ 就从函数的函数退化成关于 a₁...aₙ 的多元函数。于是变分问题变成多元函数求极值问题∂Π/∂aᵢ 0i 1, 2, ..., n这一招把无限维的搜索空间压缩成一个有限维子空间代价是牺牲了一点精度换来的是可以手算、可以用线性代数工具解决。后来的有限元本质上就是这一思路的分片版本。2. 瑞利-里茨法的完整操作流程一个可以直接套用的四步框架2.1 四步操作框架瑞利-里茨法不是一个只在理论上成立的花架子它有一个非常机械、适合复现的操作流程。我自己实践下来通常分四步走第一步根据位移边界条件选一组基函数 φᵢ(x)构造试函数 w(x) Σ aᵢφᵢ(x)。基函数必须满足几何边界条件这是硬性要求。第二步把试函数代进应变能和外力势能写出总势能 Π(a₁,...,aₙ)。这一步的核心是计算积分变截面问题里 EI、ρA 如果是位置的函数积分里带上就行。第三步对每个待定系数求偏导令偏导等于零。如果是线性弹性问题这一步最后会得到一个线性代数方程组通常写成 K a F 的形式。第四步解方程组得到系数 aᵢ代回试函数就得到近似位移场再对位移求导得到应变套本构关系得到应力。这套流程的妙处在于你不需要先解出精确解再去做近似而是直接在有限维空间里一次到位地找最优逼近。至于找得好不好取决于基函数合不合适。2.2 为什么对系数求偏导就是变分可能有同学会问变分不是 δΠ 0 吗怎么到了里茨法里就变成 ∂Π/∂aᵢ 0 了这两者确实是等价的前提是试函数空间是有限维的。真正的变分是在任意允许的虚位移 δw 上让 Π 的线性主部为零。当 w 被限制成有限个基函数的线性组合时允许的虚位移也只有 n 种独立变化方式δw Σ δaᵢ φᵢ(x)。于是 δΠ Σ (∂Π/∂aᵢ) δaᵢ。因为 δaᵢ 彼此独立要让这个和式恒等于零只能是每个偏导分别等于零。这就解释了为什么里茨法得到的是一个方程组而不是一个偏微分方程。从数学上看它把无限维变分问题投影到了有限维子空间里从力学上看它相当于只要求在试函数空间这个有限方向上满足虚功方程。这也意味着近似解一般不能精确满足所有点的平衡只能满足加权平均意义下的平衡权重就是基函数 φᵢ。2.3 这个流程里最容易忽视的细节基于我自己的经验有几点值得特别注意。第一总势能符号约定要统一。应变能 U 永远为正外力势能 W 采用外力功还是外力功的负值不同教材习惯不同。操作时固定一套约定别混着用。我这里统一用 Π U − WW ∫ q w dx。第二算积分时要耐心。像 ∫ φᵢ φⱼ dx 这种项如果基函数带三角函数或高次多项式手算容易出错。我习惯先用符号计算工具推一遍符号表达式再代入数据这样能避免低级的积分错误。第三基函数之间要线性无关。如果选了 sin x 和 2 sin x 这种线性相关的组合方程组就退化系数求不出来。后面我会细讲怎么避免。第四算出的近似位移是不是合理不能只看最终数字还要看它满不满足自然边界条件。比如悬臂梁自由端的弯矩应该为零但许多试函数并不满足这一点这往往是误差的主要来源。3. 两个手算算例从简支梁到悬臂梁看误差怎么收敛3.1 简支梁均布荷载单正弦形的神奇精度第一个算例是最经典的简支梁跨度 L抗弯刚度 EI受均布荷载 q。精确解跨中最大挠度是 5qL⁴/(384EI)约等于 0.01302qL⁴/EI。按里茨法我先取满足简支端位移条件 w(0)w(L)0 的基函数。正弦函数 sin(πx/L) 是最自然的选择因为它在两端都为 0。设w(x) a sin(πx/L)弯曲应变能U ∫₀ᴸ (EI/2)(w)² dx EI a²π⁴/(4L³)外力势能W ∫₀ᴸ q w dx 2qaL/π总势能Π EI a²π⁴/(4L³) − 2qaL/π对 a 求偏导并令其为零∂Π/∂a EI aπ⁴/(2L³) − 2qL/π 0解出a 4qL⁴/(π⁵EI)跨中挠度w(L/2) a 0.013071qL⁴/EI和精确解 0.0130208qL⁴/EI 相比误差只有约 0.38%。一个单参数试函数就能达到这个精度确实让人惊讶。原因在于简支梁均布荷载的真实挠曲线形状和半波正弦非常接近试函数恰好踩中了主模态的成分。3.2 悬臂梁均布荷载单参数踩坑双参数翻盘第二个算例是悬臂梁一端固定一端自由受均布荷载。精确解自由端挠度为 qL⁴/(8EI)。我先试最简单的满足固定端约束的二次多项式w(x) a x²固定端位移和转角都为零的条件自动满足。应变能U ∫₀ᴸ (EI/2)(2a)² dx 2EIa²L外力势能W ∫₀ᴸ q a x² dx qaL³/3对 a 求偏导∂Π/∂a 4EIaL − qL³/3 0a qL²/(12EI)自由端挠度w(L) qL⁴/(12EI) ≈ 0.0833qL⁴/EI精确值是 0.125qL⁴/EI相对误差高达 33.3%。这是典型的试函数太粗糙问题二次抛物线表示的真实挠曲线形状误差很大相当于给结构加了多余的约束让它变刚了。我接着增加一个三次项w(x) a x² b x³保证固定端 w(0)w(0)0 依然成立。这时应变能和外力势能分别变成U 2EIa²L 6EIabL² 6EIb²L³W qaL³/3 qbL⁴/4对 a 和 b 分别求偏导整理得到两个方程4a 6bL qL²/(3EI)6a 12bL qL²/(4EI)解这个二元方程组a 5qL²/(24EI)b −qL/(12EI)代回自由端挠度w(L) aL² bL³ qL⁴/(8EI)和精确解完全一致。这个算例特别能说明问题在二次多项式基础上补一个三次项恰好让试函数空间覆盖了真实解的形状于是里茨法直接抓住了精确解。你也可以理解为精确解的四次多项式形状在这组二、三次基函数的线性组合里刚好能表达出来。3.3 从算例看误差规律我把两个算例的误差整理成一张表看起来更清楚算例试函数自由端/跨中挠度对比精确解说明简支梁均布a sin(πx/L)0.013071 qL⁴/EI误差约 0.38%单参数精度很好简支梁均布a x(L−x)0.010417 qL⁴/EI误差约 20%抛物线形状偏差大悬臂梁均布a x²0.0833 qL⁴/EI误差约 33%试函数太刚悬臂梁均布a x² b x³0.125 qL⁴/EI精确基函数覆盖精确解两个结论值得记下来。第一试函数形状比项数更重要。简支梁单正弦的精度吊打悬臂梁单二次项的精度原因不是项数而是正弦函数的形状更接近真实挠曲线。第二里茨法偏刚、位移偏小这个说法要谨慎理解。在简支梁算例里单正弦求出的跨中挠度甚至比精确解略大 0.38%。严格的说法是里茨解是精确解在试函数空间上的能量投影应变能通常偏低但逐点位移并不一定偏小。把它简单说成算出来偏安全是不够准确的做实际工程时还是要和可靠解对照。4. 边界条件与形函数选择最容易踩坑的地方4.1 强制边界和自然边界的区别边界条件在里茨法里的地位和微分方程解法完全不同很多人一开始会搞混。力学里有两类边界条件。第一类是强制边界条件也叫几何边界条件比如固定端的位移和转角必须为零、简支端的位移必须为零。这类条件必须让试函数逐点精确满足否则近似解的几何变形就不是物理上允许的能量原理本身也不成立。第二类是自然边界条件也叫力边界条件比如自由端的弯矩、剪力条件。这类条件不需要预先满足而是会在势能取驻值的过程中自动实现。听起来很神奇但道理很简单如果试函数空间足够丰富能量极小化过程会倾向于选择让这些力边界条件近似满足的那个解空间不够时自然边界条件就只能近似满足甚至有明显误差。这也是悬臂梁单二次项误差大的原因之一它在 xL 处曲率 w 是一个常数而真实解的自由端弯矩要求为零两者差距很大所以近似解在自由端附近的内力分布明显失真。4.2 形函数选择的四条经验试函数怎么选是里茨法能不能用的关键。我总结了几条实战经验。一是先列位移边界条件再写试函数。把所有几何边界条件列出来比如 w(0)0、w(0)0、w(L)0 等试函数里的每个基函数都要各自满足这些条件而不是只有组合起来才满足。比如悬臂梁选 x、x²、x³ 这种x 的幂次就很自然因为每一项在 x0 处都为 0导数也为 0但如果混入常数项 1位移条件就破坏了。二是尽量保留完备的低阶项。对于多项式型基函数按 1、x、x²、x³... 逐个往上加不要跳阶。跳阶会导致中间某个重要的变形模式缺失收敛很慢。真实结构的最低频变形模式往往是简单平滑的低阶项通常贡献最大。三是善用对称性。结构对称、荷载对称时挠曲线也是对称的那么取偶函数基函数如 1、x²、x⁴即可奇函数项完全不用放。反过来反对称荷载就取奇函数。这样能显著减少待定系数个数计算量小得多。四是检查基函数是否线性无关。一个常见低级错误是在基函数里同时放了 x 和 2x或者同时放了 sin x 和 sin x1这会让方程组奇异、系数解不出来。取基函数前先扫一眼它们之间有没有线性关系。4.3 一道送命题悬臂梁基频的瑞利商静力学之外瑞利-里茨法在动力学里同样重要它对应的工具叫瑞利商。无阻尼自由振动中固有频率的平方可以写成ω² ∫ EI(φ)² dx / ∫ ρA φ² dx这个比值试函数 φ 越接近真实振型得到的频率越接近真实频率。而且一个非常好的性质是对于基频只要 φ 满足位移边界条件瑞利商给出的频率总是大于等于真实基频。换句话说你随便猜一个振型算出来的基频偏大但永远不会偏小。这个上界特性在工程估算里极其有用。我在悬臂梁上试过。用单参数 φ a x²分子 4EIa²L分母 ρAa²L⁵/5瑞利商结果ω² 20EI/(ρAL⁴)精确基频是 12.36EI/(ρAL⁴)偏高约 62%。这是因为二次抛物线对一阶振型的逼近还不够好。接着我试双参数 φ a x² b x³。令 b ka/L瑞利商变成ω² EI/(ρAL⁴) × (412k12k²)/(1/5 k/3 k²/7)对 k 求极值得到 k ≈ −0.384此时ω² ≈ 12.49EI/(ρAL⁴)和精确值的误差只有约 1%。两次尝试从 62% 的误差降到 1%这正是瑞利-里茨法在动力学里的爆发力。所以很多结构动力学教材至今仍保留里茨向量法不是没有道理的。5. 从瑞利-里茨到有限元分片试函数如何改变工程分析5.1 有限元就是分片的里茨法很多人学有限元时看到单元刚度矩阵、形函数、节点自由度这些概念总觉得它们和瑞利-里茨法没什么关系。实际上有限元的核心思想就是瑞利-里茨法只不过做了一次关键的升级把全域基函数换成了分片基函数。全域里茨法用一组覆盖整个结构的函数比如 sin(nπx/L) 或 x、x²、x³。问题是一旦结构几何复杂、材料分区多、边界不规则全域基函数很难构造一个函数同时满足所有边界几乎不现实。有限元工程师的解决办法是把结构拆成一个个单元在每个单元内部使用局部形函数形函数只在相邻单元间接力共同构成整体位移场。比如平面梁单元单元内位移用两端节点的位移和转角插值这就是分片三次多项式。这样一来待定系数 aᵢ变成了节点位移 dᵢ总势能对系数求偏导变成了总势能对节点位移求偏导。整理出来的方程就是大家熟悉的K d F所以你看有限元里的刚度矩阵 K 不是凭空造出来的它就是从能量表达式的二次型系数里来的。理解了里茨法再回头理解有限元很多位置都通亮了。5.2 满阵到稀疏紧支撑基函数的胜利全域里茨法的基函数有一个致命弱点任意两个基函数的乘积在全结构上都有交叉项最后形成的刚度矩阵是满阵而且当项数增多时矩阵的条件数会迅速恶化。这就是为什么里茨法在复杂问题上很难加到很多项。有限元的分片基函数解决了这个问题。每个基函数只在一个局部区域非零称为紧支撑。两个基函数的交叉项只在它们支撑区重叠的部分积分不为零大多数单元形函数根本没有重叠交叉项直接为零。最终总刚矩阵是稀疏、带状、对称的存储量和求解代价都大大下降。可以说从全域函数转向分片函数是瑞利-里茨思想能够走向大规模工程计算的临门一脚。5.3 里茨法思想在有限元里的位置有限元教材通常会提到线性有限元解是精确解在有限元空间上的最佳逼近这个结论直接源自里茨法的投影性质。收敛性和误差估计里能量范数的概念、插值误差的阶次、形函数对网格的约束这些理论根基都在瑞利-里茨框架内。所以我的看法是如果你只想会用软件不懂里茨法也能做大量模型计算但如果你想判断软件算得对不对理解里茨法能让你知道误差从哪来——位移解在能量意义下是近似最优的但应力解是通过位移求导得到的精度通常低一阶。这也是工程上常说位移结果比应力结果可信的原因之一。现实中我把里茨法当成和有限元对照的手算参考解来源。比如做变截面梁的快速方案比选全域里茨法取三四项几分钟就能估出挠度和低阶频率回头再看有限元结果是否落在合理的范围内心里就踏实很多。6. 这套老方法在今天还有哪些用武之地6.1 概念设计与参数扫查现在是有限元软件非常普及的时代但里茨法在结构概念设计里依然有不可替代的位置。做方案比选时经常要扫一大片参数区间比如梁高、跨度、荷载组合、刚度分布。如果每个工况都建一个完整有限元模型光建模和计算就要耗费很多时间。里茨法的优势是解析化和参数化。把挠度、频率、临界荷载写成含几何参数的显式表达式之后对参数求导、找极值、观察趋势都很方便。我见过有人用里茨法做变截面悬臂梁的优化取五六项多项式试函数快速得到最优截面参数范围再用有限元做最终校核效率比纯有限元扫参高一个量级。6.2 软件算例的对标工具商用软件的可靠性判断是工程师绕不开的话题。一个模型建完算出的最大位移是 3.2mm 还是 4.1mm你怎么判断如果手头有一个简化模型用里茨法两三项算出一个近似值至少能快速界定结果的合理区间。这里要格外提醒一件事里茨法算出的位移结果不一定总是偏小它依赖试函数空间和测点位置。所以在用它作为对标工具时不要想当然地认为里茨法偏刚所以真实值应该更大。更稳妥的做法是同时取两组不同基函数一个多项式、一个三角函数计算各自结果看看它们的差异有多大。如果差异很小基本可以认定近似解收敛了如果差异很大说明试函数空间还没足够丰富要再加项。6.3 个人体会与一个小技巧最后分享一点我的个人习惯。拿到一个新问题我不会一上来就取很多项而是先取两三项打底算出一个初步结果再逐步增加项数观察结果如何变化。这样做比直接取十项更有判断力如果增加项数后结果几乎没有变化说明前几项已经抓住了主要变形模式如果变化变大说明基函数选得不对需要调整方向。另外一个小技巧是对线性静力问题我建议同时算应变能和外力功。如果近似解足够接近精确解线性弹性结构应该满足 U W/2如果这个关系偏差明显就可以判断试函数空间还不够好。这个检查只需要在算出系数之后多做一步积分却能提前暴露很多问题。结构分析这条路上能量原理是一块绕不过去的基石。里茨法看似老派但它提供的思考方式——把无限维问题压成有限维、用广义坐标描述变形、通过能量驻值求平衡——直到今天仍然活在有限元和各类数值方法里。把这一篇的内容吃透再去碰大型软件和复杂模型你会感觉手里多了一根可以校验的尺子。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →