Scipy/Numpy:Cholesky在检查是否为阳性定义时

2024-09-28 05:40:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将一个脚本从Matlab翻译成Python,其中有一个矩阵VarCov,我得到了它的Cholesky分解。 有时,由于浮点近似,一个应该是正偏微分(PD)的矩阵不是,我必须在对角线上加一个小数值。 以下是Matlab代码:

[CholeskyUpper,pd] = chol(VarCov);
while pd
    VarCov = VarCov + 0.0001 * eye(size(VarCov,1));
    [CholeskyUpper,pd] = chol(VarCov);
end

Matlab很方便,因为它可以在进行Cholesky分解时返回矩阵是否为PD。这样做时不会引发错误。 在Python(scipy)中,它似乎只返回一个错误。 有没有一种方法可以在不需要计算特征值的情况下完成类似Matlab的工作?在

沙西尝试了以下技巧:

^{pr2}$

这是最好的办法吗?在


Tags: 代码脚本错误矩阵数值浮点pdmatlab
1条回答
网友
1楼 · 发布于 2024-09-28 05:40:47

我最终找到的最快、最简单的方法是直接使用scipy的lapack函数:

MyMatrix = np.array([[1,2],[1,2]])        
(MyCholDec ,pd) = sp.linalg.lapack.dpotrf(MyMatrix )
while pd > 0:
     MyMatrix= MyMatrix  + np.eye(2) * 0.01
     (MyCholDec ,pd) = sp.linalg.lapack.dpotrf( MyMatrix )

此函数的工作方式类似于Matlab版本,如果矩阵不是正定的,则重新展开分解和int>;0。在

相关问题 更多 >

    热门问题