舍入误差 — CAE术语解说

分类:术语集 | 2026-01-15

舍入误差的理论基础

舍入误差的定义和发生源

🧑‍🎓

「舍入误差」具体指的是什么现象?只是计算结果略有不同吗?

🎓

计算机用有限位数表示实数时产生的误差。例如,十进制的0.1在二进制中无法精确表示。按照IEEE 754双精度(64位)标准,

$$ 0.1 \approx 1.10011001100110011001101 \times 2^{-4} $$
被近似,真值与其间存在约
$$ 1.0 \times 10^{-16} $$
的误差。这种误差在每次计算时都会积累。

🧑‍🎓

在CAE中,这个微小误差实际上如何影响分析结果?不能忽略吗?

🎓

在某些条件下不能忽略。代表例子是「病态问题」。当刚性矩阵的条件数很大,即

$$ \kappa(\mathbf{K}) = \|\mathbf{K}\| \cdot \|\mathbf{K}^{-1}\| $$
超过
$$ 10^{10} $$
时,舍入误差会被放大到解向量中。例如,使用非常细长的梁单元的模型或刚性差异极大的材料部件组合模型中特别明显。

🧑‍🎓

条件数大为什么会导致舍入误差被放大?

🎓

在数值上求解线性方程

$$ \mathbf{Ku} = \mathbf{f} $$
时,若右端向量
$$ \mathbf{f} $$
有微小扰动
$$ \delta \mathbf{f} $$
,则解的误差
$$ \delta \mathbf{u} $$
满足
$$ \frac{\|\delta \mathbf{u}\|}{\|\mathbf{u}\|} \leq \kappa(\mathbf{K}) \frac{\|\delta \mathbf{f}\|}{\|\mathbf{f}\|} $$
。舍入误差相当于这个
$$ \delta \mathbf{f} $$
,会被条件数放大
$$ \kappa(\mathbf{K}) $$
倍。若条件数达到
$$ 10^{12} $$
,输入误差可能被放大12个数量级。

舍入误差的数值计算方法

求解器中的舍入误差对策

🧑‍🎓

软件求解器是如何抑制舍入误差的?

🎓

主要有两个方法。第一是「缩放」。Ansys Mechanical的默认设置中,求解前会自动对刚性矩阵和荷载向量进行缩放,使数值的数量级一致,从而改善条件数。第二是「高精度运算」。Intel数学内核库(MKL)的某些程序使用80位扩展精度(Intel FPU寄存器宽度)进行内部计算,最后才将结果四舍五入到64位。

🧑‍🎓

直接法求解器和迭代法求解器对舍入误差的敏感性不同吗?

🎓

差异很大。直接法(如稀疏直接求解器PARDISO或MUMPS)在前向消元和回代过程中舍入误差会累积。特别是主元选择很关键,采用部分主元法来抑制误差放大。而迭代法(如共轭梯度法:CG法)的收敛判定受舍入误差影响。当残差范数减小到机器epsilon

$$ \epsilon \approx 2.2 \times 10^{-16} $$
量级时,更小的残差会淹没在舍入误差噪声中,出现「停滞」。Abaqus中若将迭代求解器的收敛准则从默认
$$ 10^{-6} $$
改得过严(如
$$ 10^{-8} $$
),会因停滞导致计算无法完成。

🧑‍🎓

非线性分析中对收敛判定有什么影响?

🎓

影响很大。在牛顿-拉夫逊法中计算残差力和切线刚性矩阵时,若它们在舍入误差量级上振荡,会导致无法满足收敛准则、陷入反复迭代的「假不收敛」。为对策,Ansys和Abaqus同时设置力收敛准则(如

$$ 0.5\% $$
)和位移收敛准则(如
$$ 1\% $$
),只要其中一个满足就进入下一步。这样可以吸收舍入误差导致的振荡。

舍入误差的实务应用

建模和设置中的对策

🧑‍🎓

用户在建模阶段应注意哪些具体要点来避免恶化舍入误差?

🎓

首先是「单位制混用」问题。用SI单位制建模时,长度[m]、力[N]、杨氏模量[Pa]应保持一致。若混用[mm]和[N]以及杨氏模量[MPa],刚性矩阵分量的数量级可相差

$$ 10^{12} $$
倍,恶化条件数。必须坚持一致的单位制。其次是避免「极端形状和刚性比」。例如,厚度0.1mm的壳体与直径100mm的实体直接结合,刚性量级差异太大。应用刚体单元或主从约束恰当连接。

🧑‍🎓

网格尺寸极小也是问题吗?

🎓

完全同意。例如,把1m的立方体用1mm单元网格划分,单元数接近10亿。单元刚性矩阵分量变得极小,全局刚性矩阵对角项的数量级也会混乱。这导致条件数增大,舍入误差影响加重。工程实践中应选择能保证所需精度的最大网格尺寸。COMSOL手册也警告,过度细致的网格可能成为数值误差的来源。

🧑‍🎓

比较分析结果时,出现「1e-10」这样的微小位移差,可以认为是舍入误差吗?

🎓

要看具体情况,但有评判标准。设模型代表长度为L,代表位移为U。双精度运算的相对误差为

$$ \epsilon $$
,则位移绝对误差的预期为
$$ \epsilon \times U $$
。若U为1mm,则
$$ 2.2 \times 10^{-16} \times 1 \text{mm} \approx 2.2 \times 10^{-19} \text{m} $$
。但条件数差时这可能远大得多。工程上的做法是:用不同网格或求解器设置重复计算,若结果差异在物理量最大值的0.01%以内且保持稳定,通常可判断为舍入误差范围内。

舍入误差的软件对比

主要软件的默认行为

🧑‍🎓

Ansys、Abaqus、COMSOL在舍入误差对策的默认设置上有区别吗?

🎓

各厂商的设计哲学不同。Ansys Mechanical采取「保守」策略,默认直接求解器(稀疏直接法)应用强力的主元选择和缩放,优先考虑稳定性,但内存和计算时间开销大。Abaqus/Standard根据问题规模和类型自动选择直接法或迭代法,迭代法的默认收敛准则相对宽松

$$ 10^{-6} $$
,用来避免舍入误差导致的停滞。

🧑‍🎓

COMSOL怎样?它的多物理场耦合是特色。

🎓

COMSOL Multiphysics采用「完全耦合」方式,把所有耦合物理方程作为一个大型系数矩阵求解。这种矩阵条件数容易恶化,因此默认同时应用「常数缩放」和「变量缩放」。它使用PARDISO或MUMPS等外部求解器库,并调整内部「主元容差」保证数值稳定性。若用户将该容差改得过严(如从1e-12改为1e-16),会导致主元失败频繁发生。

🧑‍🎓

免费开源求解器(CalculiX、Code_Aster)的对策是否较弱?

🎓

不一定较弱,但默认设置面向「研究人员」,有时比较严格。例如Code_Aster的迭代求解器(经由PETSc)的收敛准则有时推荐相对残差范数

$$ 10^{-10} $$
,这很严格。相比商用软件追求「计算绝不停止」的鲁棒性,开源软件更倾向「尽可能得到精确解」的理念。因此,用户需要比商用软件更深入理解模型缩放和求解器设置(如前处理矩阵选择等),自己进行调整。

舍入误差的故障排除

常见错误和解释

🧑‍🎓

「主元过小」或「矩阵接近奇异」的错误与舍入误差有关吗?

🎓

关系很大。直接法求解器在高斯消元过程中用对角分量(主元)进行除法。由于舍入误差,理论上正则的矩阵计算上的主元值可能极小(例如

$$ < 10^{-12} \times \text{矩阵最大分量} $$
),导致这类错误。Ansys虽会输出「主元警告」但仍继续计算,但结果可信度下降。这不仅因为约束不足(刚体模式),也可能因单位制混乱或极端刚性比。

🧑‍🎓

非线性分析中,荷载步极小反而收敛不了,为什么?

🎓

正是舍入误差造成的原因之一。荷载步过小时,每次迭代的位移增量和残差力变化接近舍入误差噪声量级。收敛判定逻辑会误认为「无变化」或被噪声干扰导致判定振荡。Abaqus手册特别强调初始增分尺寸不要过小。粗略准则是:首个步长的位移不应小于模型代表长度的

$$ 10^{-6} $$
倍,否则有风险。

🧑‍🎓

在不同硬件(CPU)或操作系统上计算同一模型,结果有微小差异。这也是舍入误差?

🎓

很可能是。IEEE 754规范规定了运算精度,但不完全规定「精确比特模式」。超越函数(sin、cos、exp)的计算,或因CPU并行化导致内积运算顺序不同时,舍入误差产生方式会变。Intel CPU与AMD CPU,或使用不同数学库(MKL vs. OpenBLAS)时,最低位会分岔。CAE基准测试考虑这点,通常相对误差

$$ 10^{-10} $$
以内就认为「吻合」。

🧑‍🎓

能完全消除舍入误差吗?用四倍精度运算如何?

🎓

四倍精度(128位,约34位十进制精度)能大幅降低舍入误差,但计算成本增加数倍到数十倍,内存用量翻倍。目前汎用CAE软件几乎没有完整四倍精度支持。某些专用领域开始使用:如Ansys的某些专家模块、航天器轨道计算等有选项可用。根本方案是「理解舍入误差,在建模阶段回避病态问题」。数值分析必然伴随误差——这是前提认识。

本文评分
谢谢反馈!
有帮
更多
细节
报告
错误
有帮助
0
更多细节
0
报告错误
0
撰写人:NovaSolver 贡献者
匿名工程师 & AI — 网站地图
查看简介