【发布时间】:2018-10-05 12:41:35
【问题描述】:
我有一个维度为 nxn 的对称正定矩阵“A”。我想计算它的倒数和平方根。我的问题是:
我可以使用 lapack 子例程“dpotri”计算逆,它返回 A 的逆的上/下三角部分。我可以使用从 dpotri 获得的信息计算 A 的平方根还是需要使用“ dpotrf" 分别计算平方根。顺序并不重要。我的意思是说,我们可以先使用“dpotrf”来计算 A=LL'(其中 L' 是平方根),然后在不使用 dpotri 的情况下计算 A 的倒数吗?
我只有 A 的上三角部分,其余元素最初设置为 0。我可以通过从上部复制元素来更改其下部,但我想避免此操作。我们可以在只有上半部分(其余矩阵元素设置为 0)的矩阵“A”上使用“dpotri”或“dpotrf”吗?
【问题讨论】:
-
只是为了确保我说对了。您需要矩阵及其平方根的 Cholesky 因式分解,对吗?
-
没有。我只需要“A”矩阵的 Cholesky 分解。所以 A 变成 LL',其中 L' 是平方根。
-
好的。所以另一条路线是超过
dsyevr特征值和特征向量。但从技术上讲,这取决于您的矩阵的条件如何。然后dsyevr收敛得非常快,应该很容易胜过 Cholesky 方法。但是条件不佳的矩阵在dpotrf中会表现得更好。 -
听起来不错。我的矩阵是一个相关矩阵,是对称正定的。它是在算法的每次迭代中创建的,并在以后的迭代中慢慢变得病态。我认为“dsyevr”可以代替 dpotrf 用于初始迭代中的特征值,因为它优于 cholesky 分解。
-
那么你介意接受这个作为答案吗?你会非常棒的。这不仅有助于我的信用,还可以让人们以后更容易找到答案。