python – 稀疏的cholesky分解,具有互换的行和列

python – 稀疏的cholesky分解,具有互换的行和列,第1张

概述我正在使用 python的scikits.sparse.cholmod来获得对称矩阵的cholesky分解. 我将cholesky()的结果与matlab的chol()进行了比较.结果与一些行和列互换时存在差异.我试图迭代分解以获得特征值,这种差异似乎是有问题的. 这是我的代码: import numpy as npfrom scipy.sparse import csr_matrixfrom 我正在使用 python的scikits.sparse.cholmod来获得对称矩阵的cholesky分解.

我将cholesky()的结果与matlab的chol()进行了比较.结果与一些行和列互换时存在差异.我试图迭代分解以获得特征值,这种差异似乎是有问题的.

这是我的代码:

import numpy as npfrom scipy.sparse import csr_matrixfrom scipy.sparse import csc_matrixfrom scikits.sparse.cholmod import choleskyA = csr_matrix([[1,2,0],[0,3,[4,5,1,2]])B = (A*A.T)print "B: "print B.todense()for i in range(10):    factor = cholesky(B.tocsc())    l = factor.L()  #l is lower triangular    B = (l.T*l)    print l.todense()

第一次迭代的下三角矩阵是:

[[ 2.23606798  0.         0.          0.        ][ 0.          3.          0.          0.        ][ 0.          1.          2.          0.        ][ 1.78885438  5.          0.          3.57770876]]

而matlab的下三角矩阵是:

[2.2361        0         0         0     0    3.0000         0         01.7889    5.0000    3.5777         0     0    1.0000         0    2.0000]

matlab结果似乎是合理的,因为它导致了正确的特征值.我在python中选择稀疏矩阵的类型时做错了什么?

解决方法 cholesky算法使用填充减少算法.因此,它设置了置换矩阵P.因此LL’= PBP’.

有关更多信息,请参阅factor documentation.

如果你打印P你得到:

>>> factor.P()array([0,2],dtype=int32)

这正是两个矩阵之间的区别.最后两行和列的排列.

总结

以上是内存溢出为你收集整理的python – 稀疏的cholesky分解,具有互换的行和列全部内容,希望文章能够帮你解决python – 稀疏的cholesky分解,具有互换的行和列所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1197571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存