R语言中chol2inv(chol(x))与solve(x)结果不一致是正常现象吗?
结论
这是完全符合函数设计逻辑的预期内正常行为,核心原因是chol2inv()、chol()和solve()三者的适用场景和计算逻辑存在明显差异。
函数差异说明
solve(x)是通用可逆方阵求逆函数,只要输入的x为行列式不为0的方阵,即可返回x的逆矩阵,无对称、正定等额外限制。chol(x)为对称正定矩阵的Cholesky分解函数,仅能用于对称正定矩阵,R中默认返回满足 $R^T R = x$ 的上三角矩阵R,若输入不符合对称正定要求,返回结果无实际数学意义。chol2inv(R)是专为Cholesky上三角因子设计的工具函数,它默认传入的R是某对称正定矩阵的上三角Cholesky因子,会直接基于R计算原对称正定矩阵的逆,不会校验输入是否符合上三角要求,也不会适配其他类型的输入。
两个测试场景的差异原因
对S矩阵计算时
S是由t(A) %*% A构造的对称正定矩阵,chol(S)会输出符合要求的上三角Cholesky因子R,chol2inv(R)计算得到的就是S的逆矩阵,和solve(S)的结果完全等价。
对L矩阵计算时
L是L <- t(chol(S))得到的下三角矩阵,本身不满足对称正定的要求:
- 首先
chol(L)这一步的输出就没有数学意义,只是R强行运算得到的结果,并不满足Cholesky分解 $R^T R = L$ 的定义 - 后续将错误的Cholesky分解结果传入
chol2inv(),得到的输出自然不是L的逆矩阵,和solve(L)的计算结果必然存在差异。
内容的提问来源于stack exchange,提问作者yrx1702
相关产品推荐
相关产品推荐

