首页/文章/ 详情

牛顿迭代到底在做什么?从“切线”到“残差和 Jacobian”

1月前浏览454

很多人第一次接触非线性仿真时,会看到一堆求解器词汇:residual、Jacobian、Newton iteration、tangent stiffness、nonlinear convergence。翻译过来,就是残差、雅可比矩阵、牛顿迭代、切线刚度和非线性收敛。

这些词看起来像高深的数学术语,其实背后的核心思想就是牛顿迭代方法。牛顿迭代想解决的问题只有一个:当前这个解还不对,那我下一步应该往哪里改、改多少?

为了回答这个问题,牛顿迭代用了两个信息:残差告诉我们当前错了多少;导数 / Jacobian 描述当前附近,未知量的变化会怎样影响残差。这篇文章就从最简单的一维方程讲起,看清楚牛顿迭代到底在做什么。

  1. 先从一个简单问题开始:求非线性方程的根

假设我们要解一个方程:

R(u) = 0

这里的 u 是未知量。R(u) 可以理解成一个函数,我们的目标是找到某个 u,让这个函数值等于 0。如果画成图像,就是找这条曲线和横轴的交点,这个交点就是方程的解。

如果函数很简单,比如一条直线,那当然可以直接求交点。但很多非线性问题不是直线,而是一条弯曲的曲线。曲线不好直接求解,于是牛顿迭代的想法出现了:曲线不好直接解,那就在当前点附近,用一条切线先近似它。

  1. 牛顿迭代的具体思路

假设我们现在有一个猜测值:

u_k

把它代入方程,得到:

R(u_k)

如果:

R(u_k) = 0

说明猜对了,当前点就是解。但通常不会这么幸运。大多数时候:

R(u_k) ≠ 0

这说明当前点还不是解;把它代入方程后得到的 R(u_k),就是当前残差。

那怎么办?牛顿法 会在当前点 u_k 处画一条切线。这条切线代表的是:在当前点附近,先用一条直线近似原来的曲线。

为什么要用直线?因为直线好解。曲线和 x 轴的交点不好直接找,但直线和 x 轴的交点很容易算。所以牛顿法不是一上来就直接找原曲线的真实交点,而是先做一件近似的事:

当前点 → 画切线 → 找切线和 x 轴的交点 → 把这个交点作为新的猜测点

然后再在新的点上继续重复这个过程。

  1. 举一个最简单的例子:求 √2

比如我们要解:

u² = 2

可以改写成:

R(u) = u² - 2 = 0

如果初始猜测是:

u_0 = 1

那么当前值是:

R(1) = 1² - 2 = -1

说明当前解还没有满足方程。导数是:

R'(u) = 2u

在 u_0 = 1 处:

R'(1) = 2

令切线近似后的函数值等于 0,就得到牛顿修正方程:

R'(u_0) · Δu = -R(u_0)

也就是:

2 · Δu = 1

所以:

Δu = 0.5

新的猜测点就是:

u_1 = 1 + 0.5 = 1.5

再算一次:

R(1.5) = 1.5² - 2 = 0.25

R'(1.5) = 3

新的牛顿修正方程是:

3 · Δu = -0.25

所以:

Δu ≈ -0.0833

于是:

u_2 = 1.5 - 0.0833 = 1.4167

继续迭代,就会越来越接近:

√2 ≈ 1.4142

这个例子里,牛顿迭代并没有一下子“看穿”真实答案。它只是不断做三件事:看当前错了多少,看当前斜率是多少,再估算下一步该怎么改。

  1. 这和 CAE 仿真有什么关系?

CAE 里的问题当然比 u² - 2 = 0 复杂得多。因为未知量通常不是一个数字,而是一大堆自由度。

在结构仿真里,未知量可能是每个节点的位移。在三维结构里,一个节点可能有 ux、uy、uz。如果节点很多,自由度就可能是几万、几十万,甚至更多。

在 CFD 里,未知量可能是速度、压力、温度、组分浓度、湍流变量。这些未知量之间还互相耦合。所以 CAE 里的非线性方程通常不是一个方程,而是一组方程:

R(u) = 0

这里的 u 不再是一个数,而是一个向量:

u = 所有未知自由度组成的向量

R(u) 也不再是一个数,而是残差向量:

R(u) = 每个方程、每个自由度上的不平衡量

  1. 一维里的“导数”,到了 CAE 里就变成 Jacobian

在一维问题里,牛顿迭代用的是导数:

R'(u_k)

但在多自由度问题里,未知量很多,残差也很多。这时就不能只用一个导数了。我们需要知道:每一个未知量变化一点,会怎样影响每一个残差方程。

这就是 Jacobian 矩阵。它可以写成:

J(u_k) = ∂R / ∂u

它描述的是残差对未知量的敏感性。换句话说,残差告诉求解器当前错了多少;Jacobian 描述当前附近,未知量的变化会怎样影响残差。

于是,一维里的牛顿修正方程:

R'(u_k) · Δu = -R(u_k)

在多自由度 CAE 问题里就变成:

J(u_k) · Δu = -R(u_k)

这里,R(u_k) 是当前残差,J(u_k) 是当前解附近的 Jacobian,Δu 是这一轮要求解的修正量。求出 Δu 后,更新:

u_{k+1} = u_k + Δu

然后下一轮重新计算残差、重新计算或更新 Jacobian,再继续迭代。

  1. 结构里的“切线刚度”是什么?

在结构非线性里,很多软件不会总说 Jacobian,而会说 tangent stiffness,也就是切线刚度。这其实和牛顿法里的“切线”是同一个思想。

线性结构静力学里,我们熟悉的是:

K u = F

这里 K 是刚度矩阵。但在非线性结构问题里,结构刚度可能会随着当前状态改变。比如材料进入塑性,橡胶发生大变形,结构几何发生明显变化,接触状态发生开闭或滑移,边界条件或载荷随变形变化。

这时,内力和位移之间不再是简单线性关系。整体平衡更适合写成:

R(u) = F_internal(u) - F_external = 0

当前位移 u_k 如果还不平衡,就有残差。为了修正它,牛顿法 会在当前状态附近做线性化:

K_t · Δu = -R(u_k)

这里的 K_t 就是切线刚度矩阵。它可以理解为:当前这个状态附近,结构力—位移关系的局部线性近似。

所以结构里的“切线刚度 × 位移修正量 = 负残差”,本质上就是数学里的“Jacobian × 修正量 = 负残差”,只是工程语境换了说法。

  1. 牛顿迭代到底把非线性问题变成了什么?

牛顿迭代不是把非线性问题一次性变成线性问题。它做的是:在每一个迭代步,把当前点附近的非线性问题临时近似成一个线性修正问题。

原始目标是:

R(u) = 0

但当前这一轮实际求解的是:

J(u_k) · Δu = -R(u_k)

或者在结构里写成:

K_t · Δu = -R(u_k)

这就是一个线性代数方程组。所以求解器每一轮都在做:

当前解 u_k → 计算残差 R(u_k) → 计算或更新 Jacobian / 切线刚度 → 解线性修正方程 → 得到修正量 Δu → 更新解 u_{k+1} → 再判断残差是否足够小

如果残差足够小,就认为这一非线性步收敛。如果残差降不下来,或者震荡、变大,就说明当前迭代过程遇到了困难。

  1. 为什么有时候牛顿迭代会不收敛?

理解了牛顿迭代的过程,就能理解为什么非线性仿真会不收敛。牛顿法依赖的是当前点附近的局部线性近似。如果当前点离真实解比较近,问题也比较平滑,那么这条“切线”通常很可靠,迭代会很快收敛。

但如果当前点离真实解太远,或者问题非线性太强,那么当前这条切线可能就不再代表后面的真实曲线。这时求出来的修正量可能方向不对、步子太大,导致下一步残差更大;也可能在几个状态之间来回震荡,或者让矩阵变得病态、接近奇异。

在 CAE 软件里,就可能表现为 residual 不下降、residual 震荡、Newton iteration 失败、cutback、time step / load step 被减小、Jacobian 或 stiffness matrix 接近奇异、nonlinear solver did not converge。

所以不收敛不是一个单独的“软件报错”。它背后通常是在说:当前这个局部线性化,已经不足以可靠地把解带到正确方向。这可能和很多因素有关:

  • 初始条件太差;
  • 时间步或载荷步太大;
  • 接触状态突变;
  • 材料非线性太强;
  • 网格质量差;
  • 边界条件冲突;
  • 多物理场耦合太强。
  1. 小结:牛顿迭代的本质

牛顿迭代可以用一句话概括:它用当前点的残差和 Jacobian,把非线性问题临时变成一个线性修正问题,然后不断更新解,直到残差足够小。

如果用更短的链条表示,就是:

非线性问题 → 当前猜测解 → 计算残差 → 计算 Jacobian / 切线刚度 → 求解线性修正方程 → 更新解 → 再判断残差

放到 CAE 里,牛顿迭代也没有脱离这个基本思想。它只是从一个变量的方程,变成了多自由度、多方程耦合的非线性系统。

一维里的导数,变成了 Jacobian。结构里的 Jacobian,常常表现为切线刚度矩阵。而每一次非线性迭代,本质上都是求解器在问:根据当前残差和当前局部线性关系,我下一步应该怎么修正这个解?

理解了这一点,再看 residual、Jacobian、切线刚度、非线性收敛、矩阵奇异,就不再是孤立的软件术语,而是同一条求解逻辑上的不同部分。

参考资料

  1. ANSYS Mechanical APDL Theory Reference, Newton-Raphson Procedure.
    https://www.mm.bme.hu/~gyebro/files/ans_help_v182/ans_thry/thy_tool10.html

  2. ETH Zürich, The Finite Element Method for the Analysis of Non-Linear and Dynamic Systems. https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1784605188276_9b14bm.pdf

  3. COMSOL Blog, Solving Nonlinear Static Finite Element Problems. https://www.comsol.com/blogs/solving-nonlinear-static-finite-element-problems/


来源:锂电芯动
MechanicalMechanical APDLSystemComsol静力学非线性湍流CONVERGE材料
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-07-21
最近编辑:1月前
锂电芯动
博士 中科院博士,电芯仿真高级工程师
获赞 9粉丝 21文章 71课程 0
点赞
收藏
作者推荐

有限元为什么怕坏网格(上)?

做有限元分析时,我们经常会听到一句话:网格质量很重要。 软件也经常会提醒我们:单元质量差、元素畸变、Jacobian 异常、负体积、负 Jacobian,甚至求解不收敛。刚开始学习有限元时,我一直有一个疑问:网格不就是把模型切成一小块一小块吗?那为什么有些单元只是看起来歪一点、扁一点、长一点,就会影响计算结果?这篇文章我们先不急着讲 Jacobian,而是先把逻辑链理清楚:有限元为什么会在意单元形状?坏网格到底破坏了什么? 一、先简单回顾前两篇文章在前面两篇文章里,我们已经分别讲过:有限元为什么要划分网格,以及 有限元如何用有限个节点去近似连续的真实世界。这里不再展开,只抓最核心的一句话:有限元先通过网格,把无限连续的真实世界变成有限个单元和有限个节点;然后再通过形函数,根据这些有限节点上的值,去近似单元内部原本连续变化的物理量。也就是说,有限元一方面是在“降维”:把无限多个位置上的未知量,变成有限个节点上的未知量,让计算机能算;另一方面又是在“还原”:通过形函数,把有限节点上的结果重新扩展到单元内部,去近似连续世界。这一点非常关键。因为接下来我们讨论“网格质量为什么会影响结果”,本质上就是在问:当单元形状变差时,有限元这套用节点和形函数近似连续世界的机制,会不会被破坏? 有限元的两步:先离散,再近似连续 二、形函数是直接定义在真实单元上的吗?既然有限元要用形函数,根据节点值去推测单元内部的物理量,那一个自然的问题就来了:形函数是不是直接定义在真实网格单元上的?直觉上好像应该是这样。真实单元长什么样,软件就在这个真实单元上写一套形函数,然后利用真实节点上的位移、温度、压力等数据,去推测单元内部任意位置的值。但实际上,有限元通常不是这么做的。为什么?因为真实模型里的网格单元太复杂了。有的是三角形,有的是四边形,有的是四面体,有的是六面体。即使是同一种类型的单元,也可能形状各不相同:有的比较规整,有的被拉长,有的被压扁,有的靠近复杂边界,被迫变得歪斜、扭曲。如果每一个真实单元都要单独定义一套节点编号规则、形函数、积分点、求导规则和数值积分规则,那软件就很难通用,数学上也会变得非常复杂。所以有限元采用了一个更聪明的办法:先定义一套规整的标准单元。 三、标准单元:有限元的“计算模板”所谓标准单元,可以理解成有限元里的统一计算模板。比如标准三角形、标准四边形、标准四面体、标准六面体。这些标准单元本身不是某一个真实零件上的网格,它更像是一套提前设计好的模板。在标准单元上,软件已经规定好了:节点怎么编号、节点在标准单元里的位置、形函数怎么写、积分点放在哪里、如何求导、如何做数值积分、每个积分点对应什么权重。也就是说:标准单元提供的是一套统一的计算规则。那真实单元提供什么?真实单元提供的是具体信息:这个单元在真实模型里的节点坐标,每个节点上的物理量,比如位移、温度、压力、电势,以及这个单元位于模型的什么位置、和周围哪些单元相连。所以可以用一句话理解:标准单元告诉软件怎么算,真实单元告诉软件在哪里算、用什么数据算。这句话非常重要。因为有限元真正做的事情,就是把标准单元提供的计算规则,和真实单元提供的坐标、节点物理量结合起来,最终计算真实单元内部的物理量。 四、标准单元和真实单元怎么对应?靠映射接下来就有一个关键问题:标准单元和真实单元到底怎么对应起来?这就要讲到有限元里的映射。我们用一个四边形单元做例子。假设真实模型里有一个四边形单元。它可能不是一个规整的正方形,而是一个有些拉长、压扁或者歪斜的四边形。有限元不会直接在这个真实四边形上重新发明一套计算规则。它会先拿一个规整的标准四边形作为模板,然后建立节点之间的对应关系:标准节点 1 ↔ 真实节点 1标准节点 2 ↔ 真实节点 2标准节点 3 ↔ 真实节点 3标准节点 4 ↔ 真实节点 4 但这个对应关系,不只是把四个角点对应起来。更重要的是:通过这几个节点,建立标准单元和真实单元之间整块区域的对应关系。也就是说,标准单元里的任意一个点,都可以映射到真实单元里的某一个点。反过来,真实单元里的某一个点,也可以找到它在标准单元中的对应位置。这样,标准单元上的形函数、积分点、求导规则,才能被应用到真实单元上。 五、真实单元内部一点的值,是怎么被算出来的?假设我们想知道真实单元内部某一点的温度、位移或压力。软件大致要做两件事。第一步,先通过映射关系,找到这个真实点在标准单元里的对应位置。标准单元里通常用自然坐标表示,比如:ξ、η真实空间里用真实坐标表示,比如:x、y真实单元里的某个点:(x, y)可以通过映射关系,找到它在标准单元里的位置:(ξ, η)第二步,在标准单元里计算这个位置上的形函数值:N1(ξ, η)、N2(ξ, η)、N3(ξ, η)、N4(ξ, η) 然后结合真实节点上的物理量进行插值。比如温度:T = N1 × T1 + N2 × T2 + N3 × T3 + N4 × T4 比如位移:u = N1 × u1 + N2 × u2 + N3 × u3 + N4 × u4 所以真实单元内部任意一点的值,并不是软件随便猜出来的。它是通过:标准单元到真实单元的映射关系+标准单元上的形函数规则+真实节点上的物理量 一起计算出来的。 六、网格质量为什么从这里开始变得重要?讲到这里,网格质量的重要性就出现了。因为标准单元上的计算规则,要通过映射关系应用到真实单元上。如果真实单元比较规整,标准单元映射过去比较自然。这时候:形函数比较稳定;积分点分布比较合理;求导规则转换比较可靠;计算结果通常也比较稳定。但如果真实单元严重畸变,比如被拉得很长、被压得很扁、一个角特别尖、四边形严重歪斜、三维单元接近翻转、二阶单元中间节点位置异常,那么标准单元到真实单元的映射关系就会变差。注意,这里不是说映射一定完全错了。只要单元没有翻转、没有退化,映射关系通常还是可以建立的。但问题是:这个映射会变得很不稳定、很别扭、很病态。标准单元上原本规整的计算规则,被强行拉扯到一个严重畸变的真实单元上,结果就可能不再可靠。所以有限元不是怕单元有一点变形。有限元本来就允许标准单元映射成各种真实形状。真正危险的是:单元变形到让标准单元的计算规则无法稳定地映射过去。这也是为什么我觉得,理解网格质量,不能只盯着“这个单元好不好看”。更重要的是看:标准单元那套计算规则,能不能稳定地映射到这个真实单元上。 七、小结:坏网格真正破坏的是“映射”有限元不是直接在每个真实单元上重新发明一套计算规则,而是先在标准单元上定义好形函数、积分点、求导和积分规则,再通过映射把这套规则应用到真实单元。所以,网格质量差的本质问题,不是“网格长得不好看”,而是:真实单元形状太差,会让标准单元到真实单元的映射关系变差。而一旦映射关系变差,后面的形函数、积分点、导数转换和单元积分都会受到影响。那么问题来了:我们怎么衡量这个映射关系到底变形到了什么程度?有限元里有一个非常关键的量,叫 Jacobian,也就是雅可比。下一篇,我们继续讲:Jacobian 为什么会影响应力、热流、积分结果,甚至导致不收敛?参考资料FEAwiki, Chapter 2 - Isoparametric elements. 该资料介绍了等参单元、标准单元到真实单元的映射,以及高斯积分等基础概念。https://www.feawiki.org/docs/chapter2/Delft University of Technology, MUDE Textbook, Isoparametric mapping. 该资料说明常见有限元程序如何使用等参映射来关联形函数、积分方案和真实单元。https://mude.citg.tudelft.nl/book/2024/fem/isoparametric_mapping.htmlMIT OpenCourseWare, Finite Element Procedures for Solids and Structures, Lecture 8: Numerical Integrations, Modeling Considerations. 该课件涉及等参有限元中的位移插值、应变-位移矩阵、Jacobian determinant 与数值积分。https://ocw.mit.edu/courses/res-2-002-finite-element-procedures-for-solids-and-structures-spring-2010/b48758a6bf099de0c8a28e62f294e368_MITRES2_002S10_lec08.pdfUniversity of Memphis, Chapter 10 – Isoparametric Elements. 该资料介绍等参单元及其在单元刚度矩阵构造中的作用。https://www.ce.memphis.edu/7117/notes/presentations/chapter_10.pdf来源:锂电芯动

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈