0

我有一个A390 x 390 的矩阵,其中包含以下数字:

141270,991258825 -92423,2972762164 -92423,2972762164 60465,8168198016 139998,877391881 -91591,0460330842 30573,0969789307 -20001,7456206658 ...

如果我尝试chol(A),Matlab 会失败并说矩阵必须是正定的。好的,我在 API 中看到[R,p] = chol(A)也适用于负定矩阵。我试过这个,但R后来变成了一个 1x1 矩阵。但我期望一个 390x390 的矩阵。

4

1 回答 1

2

这里的帮助文件有点不清楚,但这并不意味着您可以只使用非正定矩阵并通过更改调用函数的方式来获得相同的结果:

[R,p] = chol(A) 对于正定 A,从矩阵 A 的对角线和上三角生成上三角矩阵 R,满足方程 R'*R=A 且 p 为零。如果 A 不是正定的,则​​ p 是一个正整数并且 MATLAB® 不会产生错误。当 A 满时,R 是 q=p-1 阶的上三角矩阵,使得 R'*R=A(1:q,1:q)。

如果您的矩阵不是正定矩阵,p > 0,则结​​果 R 的大小将取决于p. 事实上,我认为这种特殊的语法只是为了让你可以用来chol检查 A 是否为正定,而不是在不是时给出错误。帮助文件甚至说:

注意 使用 chol 优于使用 eig 来确定正定性。

示例 - 取pascal(5)最后一个元素并将其设置为负数:

A =

     1     1     1     1     1
     1     2     3     4     5
     1     3     6    10    15
     1     4    10    20    35
     1     5    15    35    -3

[R,p] = chol(A)返回

R =

     1     1     1     1
     0     1     2     3
     0     0     1     3
     0     0     0     1


p =

     5

果然,R'*R' == A(1:4,1:4)

X(2,2)另一方面,通过将 element 设置为负数,给出 2 ,因此将给出p一个单一的值。设置为负返回和空。Rsqrt(A(1,1)A(1,1)p = 1R

于 2014-05-20T09:25:04.960 回答