如何解决Mathematica中矩阵转置与自身相乘结果奇异无法求逆问题
问题解答
两种情况差异的核心原因
首先明确线性代数中关于矩阵秩的两个基础结论:
rank(A) ≤ min(m,n):任意m行n列的矩阵A,秩不会超过行数、列数的较小值rank(A^T·A) = rank(A·A^T) = rank(A):矩阵与自身转置的乘积的秩,等于原矩阵的秩
第一种情况(B奇异)
你生成的A是3行51列的矩阵,因此rank(A)最大为3。而B = A^T·A是51行51列的方阵,它的秩最大也只能是3,远小于方阵的阶数51,属于降秩(奇异)矩阵,天然无法求逆,和A是否随机生成没有关系,是矩阵秩的固有约束导致的。
第二种情况(O可求逆)
O = A·A^T是3行3列的方阵,它的秩最大为3。随机生成的整数矩阵几乎必然满足行满秩(即rank(A)=3),因此O的秩等于方阵阶数3,属于满秩矩阵,可以正常求逆。
让第一种情况结果非奇异的方法
要让A^T·A可逆,需要保证A^T·A的秩等于它的阶数,也就是需要A为列满秩矩阵,即A的列数 ≤ 行数。
如果你需要得到51×51的可逆B矩阵,只需要调整A的生成参数,让A的行数≥51即可,示例代码如下:
A = RandomInteger[{1, 20}, {60, 51}]; (* 行数60≥列数51,保证A几乎必然列满秩 *) B = A\[Transpose].A; F = Inverse[B]; F // MatrixForm
代码正确性说明
你的代码本身没有语法或逻辑错误,报错是线性代数的秩约束导致的,和代码实现无关。
内容的提问来源于stack exchange,提问作者Md Salem
相关产品推荐
相关产品推荐

