舍入误差 — CAE术语解说
舍入误差的理论基础
舍入误差的定义和发生源
「舍入误差」具体指的是什么现象?只是计算结果略有不同吗?
计算机用有限位数表示实数时产生的误差。例如,十进制的0.1在二进制中无法精确表示。按照IEEE 754双精度(64位)标准,
在CAE中,这个微小误差实际上如何影响分析结果?不能忽略吗?
在某些条件下不能忽略。代表例子是「病态问题」。当刚性矩阵的条件数很大,即
条件数大为什么会导致舍入误差被放大?
在数值上求解线性方程
舍入误差的数值计算方法
求解器中的舍入误差对策
软件求解器是如何抑制舍入误差的?
主要有两个方法。第一是「缩放」。Ansys Mechanical的默认设置中,求解前会自动对刚性矩阵和荷载向量进行缩放,使数值的数量级一致,从而改善条件数。第二是「高精度运算」。Intel数学内核库(MKL)的某些程序使用80位扩展精度(Intel FPU寄存器宽度)进行内部计算,最后才将结果四舍五入到64位。
直接法求解器和迭代法求解器对舍入误差的敏感性不同吗?
差异很大。直接法(如稀疏直接求解器PARDISO或MUMPS)在前向消元和回代过程中舍入误差会累积。特别是主元选择很关键,采用部分主元法来抑制误差放大。而迭代法(如共轭梯度法:CG法)的收敛判定受舍入误差影响。当残差范数减小到机器epsilon
非线性分析中对收敛判定有什么影响?
影响很大。在牛顿-拉夫逊法中计算残差力和切线刚性矩阵时,若它们在舍入误差量级上振荡,会导致无法满足收敛准则、陷入反复迭代的「假不收敛」。为对策,Ansys和Abaqus同时设置力收敛准则(如
舍入误差的实务应用
建模和设置中的对策
用户在建模阶段应注意哪些具体要点来避免恶化舍入误差?
首先是「单位制混用」问题。用SI单位制建模时,长度[m]、力[N]、杨氏模量[Pa]应保持一致。若混用[mm]和[N]以及杨氏模量[MPa],刚性矩阵分量的数量级可相差
网格尺寸极小也是问题吗?
完全同意。例如,把1m的立方体用1mm单元网格划分,单元数接近10亿。单元刚性矩阵分量变得极小,全局刚性矩阵对角项的数量级也会混乱。这导致条件数增大,舍入误差影响加重。工程实践中应选择能保证所需精度的最大网格尺寸。COMSOL手册也警告,过度细致的网格可能成为数值误差的来源。
比较分析结果时,出现「1e-10」这样的微小位移差,可以认为是舍入误差吗?
要看具体情况,但有评判标准。设模型代表长度为L,代表位移为U。双精度运算的相对误差为
舍入误差的软件对比
主要软件的默认行为
Ansys、Abaqus、COMSOL在舍入误差对策的默认设置上有区别吗?
各厂商的设计哲学不同。Ansys Mechanical采取「保守」策略,默认直接求解器(稀疏直接法)应用强力的主元选择和缩放,优先考虑稳定性,但内存和计算时间开销大。Abaqus/Standard根据问题规模和类型自动选择直接法或迭代法,迭代法的默认收敛准则相对宽松
COMSOL怎样?它的多物理场耦合是特色。
COMSOL Multiphysics采用「完全耦合」方式,把所有耦合物理方程作为一个大型系数矩阵求解。这种矩阵条件数容易恶化,因此默认同时应用「常数缩放」和「变量缩放」。它使用PARDISO或MUMPS等外部求解器库,并调整内部「主元容差」保证数值稳定性。若用户将该容差改得过严(如从1e-12改为1e-16),会导致主元失败频繁发生。
免费开源求解器(CalculiX、Code_Aster)的对策是否较弱?
不一定较弱,但默认设置面向「研究人员」,有时比较严格。例如Code_Aster的迭代求解器(经由PETSc)的收敛准则有时推荐相对残差范数
舍入误差的故障排除
常见错误和解释
「主元过小」或「矩阵接近奇异」的错误与舍入误差有关吗?
关系很大。直接法求解器在高斯消元过程中用对角分量(主元)进行除法。由于舍入误差,理论上正则的矩阵计算上的主元值可能极小(例如
非线性分析中,荷载步极小反而收敛不了,为什么?
正是舍入误差造成的原因之一。荷载步过小时,每次迭代的位移增量和残差力变化接近舍入误差噪声量级。收敛判定逻辑会误认为「无变化」或被噪声干扰导致判定振荡。Abaqus手册特别强调初始增分尺寸不要过小。粗略准则是:首个步长的位移不应小于模型代表长度的
在不同硬件(CPU)或操作系统上计算同一模型,结果有微小差异。这也是舍入误差?
很可能是。IEEE 754规范规定了运算精度,但不完全规定「精确比特模式」。超越函数(sin、cos、exp)的计算,或因CPU并行化导致内积运算顺序不同时,舍入误差产生方式会变。Intel CPU与AMD CPU,或使用不同数学库(MKL vs. OpenBLAS)时,最低位会分岔。CAE基准测试考虑这点,通常相对误差
能完全消除舍入误差吗?用四倍精度运算如何?
四倍精度(128位,约34位十进制精度)能大幅降低舍入误差,但计算成本增加数倍到数十倍,内存用量翻倍。目前汎用CAE软件几乎没有完整四倍精度支持。某些专用领域开始使用:如Ansys的某些专家模块、航天器轨道计算等有选项可用。根本方案是「理解舍入误差,在建模阶段回避病态问题」。数值分析必然伴随误差——这是前提认识。
助
细节
错误