我有一个矩阵A
,它是390乘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矩阵。
答案 0 :(得分:2)
这里的帮助文件有点不清楚,但这并不意味着您可以使用非正定矩阵并通过更改调用函数的方式获得相同的结果:
对于正定A,[p,p] = chol(A)产生上三角形 矩阵R来自矩阵A的对角线和上三角,满足 等式R'* R = A且p为零。如果A不是肯定的,那么 p是正整数,MATLAB®不会产生错误。当一个 R是满的,R是q = p-1阶的上三角矩阵 R'* R = A(1:Q,1:Q)。
如果你的矩阵不是正定的,p>因此,结果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)
设置为否定,p
为2,因此R
中的单个值将为sqrt(A(1,1)
。将A(1,1)
设置为否定返回p = 1
和空R
。