矩阵分解错误
矩阵分解错误
老师,「Factorization error」是什么意思?
矩阵分解错误的理论基础
矩阵分解错误的物理含义
「矩阵分解错误」出现时分析会停止,但这只是计算机计算上的问题吗?物理上有什么含义吗?
不仅仅是计算错误,很多情况下表明模型存在物理上「无法求解」的问题。例如,结构分析中刚度矩阵
奇异矩阵意味着行列式为零。具体哪些建模错误会使刚度矩阵的行列式接近零?
代表性的原因有三个。第一是前面提到的约束不足。第二是材料常数设置错误。例如,若杨氏模量误设为
热分析和流体分析中也会出现同样的错误吗?虽然控制方程不同。
会。虽然物理不同,但离散化后都要求解线性方程组
矩阵分解错误的数值计算方法
求解器矩阵分解过程
求解器具体在什么时候判定「无法分解」并报错的?在LU分解或Cholesky分解过程中吗?
完全正确。直接法求解器(如Abaqus/Standard的默认求解器)通常执行带主元选择的LU分解。过程中若对角元素(主元)的绝对值小于预定义的容差,就会报错。例如,MKL PARDISO求解器的默认主元容差约为
我见过「zero pivot」错误信息。说是可以通过求解器设置把主元容差改为
那只是临时绕过手段,不是根本解决。Abaqus确实可以用`*CONTROLS, RESET`卡调整主元容差,但这是强行分解数值奇异矩阵的行为。结果会导致求解精度大幅下降,甚至出现物理上无意义的结果(如个别节点的异常位移)。首先应该重新检查模型的约束和材料常数。
用迭代法求解器(如CG法)就不会出现这个错误吗?
有时出现,有时不出现。迭代法不直接分解矩阵,所以不会出现「zero pivot」错误本身。但若系数矩阵非正定,共轭梯度法(CG)无法收敛而失败。或者,若条件数极大(病态矩阵),迭代可能停滞或发散。Ansys Mechanical若用PCG求解器替代稀疏直接求解器,特异模型不会显示「Solver pivot warning」,而是「Solution not converged」。
矩阵分解错误的实务应用
错误发生时的系统调查步骤
运行分析时出现「矩阵分解错误」而停止。首先应该检查什么?
首先详细阅读错误信息和警告信息。Abaqus的`.msg`文件或Ansys的`.out`文件中通常记载了错误发生的节点号和单元号。然后按以下清单逐项检查:1) 所有零件是否都定义了适当的约束(支撑)。2) 接触定义中是否存在间隙或重叠。3) 材料常数(杨氏模量、密度、热导率等)是否包含零或不现实的极小值。4) 网格中是否存在严重畸变的单元(宽高比超过1000等)。
错误信息显示「Zero pivot at node 12345 in D.O.F. 3」。如何理解这个信息?
这是非常有用的信息。表示节点12345的第3自由度(通常是Z方向平移)的刚度数值上为零。具体来说,该节点在Z方向完全未被拘束,或连接到该节点的所有单元都不提供Z方向刚度(如仅在XY平面内的桁架单元)。应重点检查该节点周围的约束条件和单元类型。
多个零件通过接触组装的模型中出现错误。约束似乎没问题。
很可能是接触设置造成的。特别是在定义了「摩擦」的接触面,若初始状态为「分离」,切向刚度未定义,可能导致奇异性。先试试将摩擦系数设为零。还可以尝试Ansys的「Weak Springs」或Abaqus的「Stabilization」功能,但要注意这些都是数值稳定化手段,本质上是添加「虚拟弹簧」。更好的方法是用`*CONTACT INTERFERENCE`(Abaqus)或`CNOF`(Ansys)适当调整接触面初始间隙。
矩阵分解错误的软件比较
各软件的错误信息和对策工具
Abaqus和Ansys在此错误的显示和处理方法上有区别吗?
错误本质相同,但信息和内置工具不同。Abaqus/Standard显示「***ERROR: SOLVER PROBLEM. NUMERICAL SINGULARITY」或「ZERO PIVOT」,并在`.msg`文件中特定问题节点和自由度。Ansys Mechanical显示「A zero pivot was encountered...」,需要用`/SOLU`命令`PIVCHECK, ON`才能输出详细信息。处理方面,Ansys的「Inertia Relief」或「Weak Springs」选项可从GUI直接应用,而Abaqus通常用`*RIGID BODY`或`*COUPLING`控制刚体运动。
COMSOL和LS-DYNA这样的其他求解器中情况如何?
COMSOL Multiphysics默认采用「常数」或「变量」自动处理未定义的自由度(如压力基准点),因此初级特异性错误较少出现。但用户若自定义物理场接口时设置矛盾的边界条件,仍会产生「singular matrix」错误。LS-DYNA这样的显式求解器用质量矩阵
自由开源求解器(CalculiX、Code_Aster)比商用软件更容易遇到此错误吗?
从求解器算法的鲁棒性看,商用软件使用高度优化的MKL或PARDISO库,在严苛条件下数值稳定性更好。但错误的根本原因在于模型本身。CalculiX(CCX)也会报告「zero pivot」错误。反过来说,商用软件内部自动进行的「数值稳定化」在开源软件中需手动设置,这让用户更容易发现问题本质(约束不足),也许是个优势。
矩阵分解错误的故障排除
高级原因和诊断方法
已经检查过约束、材料、接触,但「zero pivot」错误还是消除不了。还有其他高级原因吗?
可能存在以下复合原因。第一是「多重约束」。一个节点同时受`*COUPLING`(Abaqus)或`CP`命令(Ansys)约束和通常的边界条件(`*BOUNDARY`)约束,导致矛盾而非过度约束,引起数值特异性。第二是「求解器数值尺度问题」。混合单位制(长度用mm,力用N)的模型会导致刚度矩阵系数的数量级相差很大(
数值尺度问题该怎么处理?
最可靠的办法是统一单位制。采用SI制(m、kg、s、N)或广泛使用的mm制(mm、tonne、s、N)。若无法修改模型,可利用求解器的尺度化选项。Abaqus中用`*CONTROLS, PARAMETERS=FIELD`调整尺度化系数。Ansys直接求解器(SPARSE)默认启用自动尺度化,但可通过`EQSLV`命令精细调整。这些尺度化方法通过归一化矩阵系数改善数值条件数。