N******n 发帖数: 3003 | 1 有一个symmetric matrix, 我是平方得来的,应当是positive definite: 看了
eigvalue 都是正的,但是在matlab上用cholcov: Cholesky-like covariance
decomposition
出不来:
[T,err] = cholcov(sigma)
T是空的。不知道为什么,谢谢
A=
sigma =
0.4382 -0.3990 -1.2396 -1.0880 0.9084 1.5463 -0.6721 0.
4587
-0.3990 0.5448 1.3429 1.1029 -1.0068 -1.7077 0.6971 -0.
4047
-1.2396 1.3429 15.4717 10.6047 -10.6348 -18.3169 6.8657 -6.
0160
-1.0880 1.1029 10.6047 7.5741 -7.2716 -12.7805 4.8757 -4.
0894
0.9084 -1.0068 -10.6348 -7.2716 7.4749 12.4427 -4.6320 4.
0857
1.5463 -1.7077 -18.3169 -12.7805 12.4427 22.0718 -8.3375 7.
0495
-0.6721 0.6971 6.8657 4.8757 -4.6320 -8.3375 3.2289 -2.
6939
0.4587 -0.4047 -6.0160 -4.0894 4.0857 7.0495 -2.6939 2.
5615 |
k**********g 发帖数: 989 | 2 Sorry I don't have Stat toolbox.
But just FYI, the singular values are
57.6725 0.8147 0.4483 0.2634 0.1114 0.0259 0.0232 0.
0065
Output from SVD (singular value decomposition)
input =
0.4382 -0.3990 -1.2396 -1.0880 0.9084 1.5463 -0.6721 0.4587
-0.3990 0.5448 1.3429 1.1029 -1.0068 -1.7077 0.6971 -0.4047
-1.2396 1.3429 15.4717 10.6047 -10.6348 -18.3169 6.8657 -6.0160
-1.0880 1.1029 10.6047 7.5741 -7.2716 -12.7805 4.8757 -4.0894
0.9084 -1.0068 -10.6348 -7.2716 7.4749 12.4427 -4.6320 4.0857
1.5463 -1.7077 -18.3169 -12.7805 12.4427 22.0718 -8.3375 7.0495
-0.6721 0.6971 6.8657 4.8757 -4.6320 -8.3375 3.2289 -2.6939
0.4587 -0.4047 -6.0160 -4.0894 4.0857 7.0495 -2.6939 2.5615
>> [u,s,v] = svd(input)
u =
-0.0450 0.5590 -0.1582 0.3952 0.2121 -0.5579 -0.1915 -0.3338
0.0483 -0.6386 0.2458 0.1529 0.6148 -0.2839 0.0907 -0.1983
0.5164 0.2526 0.2460 0.0587 0.1175 0.4800 0.2324 -0.5544
0.3591 -0.3058 -0.1123 -0.1755 -0.6071 -0.4695 0.0931 -0.3694
-0.3539 -0.1029 -0.7188 -0.1302 0.1516 0.1806 0.3798 -0.3615
-0.6168 0.0347 0.4684 -0.3296 -0.1332 0.0250 -0.2064 -0.4789
0.2329 -0.1622 -0.3239 -0.2108 0.1572 0.2005 -0.8241 -0.1616
-0.2003 -0.2903 -0.0212 0.7850 -0.3596 0.2896 -0.1628 -0.1389
s =
57.6725 0 0 0 0 0 0 0
0 0.8147 0 0 0 0 0 0
0 0 0.4483 0 0 0 0 0
0 0 0 0.2634 0 0 0 0
0 0 0 0 0.1114 0 0 0
0 0 0 0 0 0.0259 0 0
0 0 0 0 0 0 0.0232 0
0 0 0 0 0 0 0 0.0065
v =
-0.0450 0.5590 -0.1582 0.3952 0.2121 -0.5579 -0.1915 -0.3338
0.0483 -0.6386 0.2458 0.1529 0.6148 -0.2839 0.0907 -0.1983
0.5164 0.2526 0.2460 0.0587 0.1175 0.4800 0.2324 -0.5544
0.3591 -0.3058 -0.1123 -0.1755 -0.6071 -0.4695 0.0931 -0.3694
-0.3539 -0.1029 -0.7188 -0.1302 0.1516 0.1806 0.3798 -0.3615
-0.6168 0.0347 0.4684 -0.3296 -0.1332 0.0250 -0.2064 -0.4789
0.2329 -0.1622 -0.3239 -0.2108 0.1572 0.2005 -0.8241 -0.1616
-0.2003 -0.2903 -0.0212 0.7850 -0.3596 0.2896 -0.1628 -0.1389 |
r*g 发帖数: 3159 | 3 可能是sigma格式有问题。试一下简单命令isnumeric(sigma),size(sigma)看对不对。
[T,err] = cholcov(sigma)
T =
0.6620 -0.6027 -1.8726 -1.6436 1.3723 2.3359 -1.0153 0.
6929
0 0.4260 0.5028 0.2634 -0.4217 -0.7036 0.1998 0.
0304
0 0 3.4223 2.1607 -2.2947 -3.9707 1.4212 -1.
3832
0 0 0 0.3673 0.1441 -0.4809 0.2273 0.
0819
0 0 0 0 0.3574 -0.2842 0.2073 -0.
1066
0 0 0 0 0 0.2050 -0.0669 -0.
1504
0 0 0 0 0 0 0.1977 -0.
1880
0 0 0 0 0 0 0 0.
3019
err =
0
0.
【在 N******n 的大作中提到】 : 有一个symmetric matrix, 我是平方得来的,应当是positive definite: 看了 : eigvalue 都是正的,但是在matlab上用cholcov: Cholesky-like covariance : decomposition : 出不来: : [T,err] = cholcov(sigma) : T是空的。不知道为什么,谢谢 : A= : sigma = : 0.4382 -0.3990 -1.2396 -1.0880 0.9084 1.5463 -0.6721 0. : 4587
|
N******n 发帖数: 3003 | 4 tol = 10*eps(max(abs(diag(Sigma))));
if (n == m) && all(all(abs(Sigma - Sigma') < tol))
好像是matlab里面的设置有问题,上面是检查symmetric matrix的条件:里面的tol太
低,我把他乘以1000,后就能通过了。 |
N******n 发帖数: 3003 | 5 谢谢
0.
0.
1.
0.
【在 r*g 的大作中提到】 : 可能是sigma格式有问题。试一下简单命令isnumeric(sigma),size(sigma)看对不对。 : [T,err] = cholcov(sigma) : T = : 0.6620 -0.6027 -1.8726 -1.6436 1.3723 2.3359 -1.0153 0. : 6929 : 0 0.4260 0.5028 0.2634 -0.4217 -0.7036 0.1998 0. : 0304 : 0 0 3.4223 2.1607 -2.2947 -3.9707 1.4212 -1. : 3832 : 0 0 0 0.3673 0.1441 -0.4809 0.2273 0.
|
N******n 发帖数: 3003 | 6 thank you
0.
【在 k**********g 的大作中提到】 : Sorry I don't have Stat toolbox. : But just FYI, the singular values are : 57.6725 0.8147 0.4483 0.2634 0.1114 0.0259 0.0232 0. : 0065 : Output from SVD (singular value decomposition) : input = : 0.4382 -0.3990 -1.2396 -1.0880 0.9084 1.5463 -0.6721 0.4587 : -0.3990 0.5448 1.3429 1.1029 -1.0068 -1.7077 0.6971 -0.4047 : -1.2396 1.3429 15.4717 10.6047 -10.6348 -18.3169 6.8657 -6.0160 : -1.0880 1.1029 10.6047 7.5741 -7.2716 -12.7805 4.8757 -4.0894
|
g****t 发帖数: 31659 | 7 分解之前,做一下(A A')/2.就可以无视这些条件了吧
【在 N******n 的大作中提到】 : tol = 10*eps(max(abs(diag(Sigma)))); : if (n == m) && all(all(abs(Sigma - Sigma') < tol)) : 好像是matlab里面的设置有问题,上面是检查symmetric matrix的条件:里面的tol太 : 低,我把他乘以1000,后就能通过了。
|
N******n 发帖数: 3003 | 8 这里的A代表啥? 谢谢
【在 g****t 的大作中提到】 : 分解之前,做一下(A A')/2.就可以无视这些条件了吧
|
k**********g 发帖数: 989 | 9
sigma
( sigma + sigma ' ) / 2
貌似加号给 mitbbs editor 吃掉了。
【在 N******n 的大作中提到】 : 这里的A代表啥? 谢谢
|
k**********g 发帖数: 989 | 10
是 single 吗?可以转 double precision 试试。
【在 N******n 的大作中提到】 : tol = 10*eps(max(abs(diag(Sigma)))); : if (n == m) && all(all(abs(Sigma - Sigma') < tol)) : 好像是matlab里面的设置有问题,上面是检查symmetric matrix的条件:里面的tol太 : 低,我把他乘以1000,后就能通过了。
|