嗨,我只是想知道编写一个matlab代码的方法,解释如何实现Jensen-Bregman LogDet的分离,如果有一个文档解释他的数学,我只是有问题实现它,我会非常感激
答案 0 :(得分:0)
据我所知,(两个对称正定矩阵的函数)是
JL(X,Y) = log( det( (X+Y)/2)) - log( det( X*Y))/2
= log( det( (X+Y)/2)) - (log(det(X)) + log(det(Y)))/2
我认为这样做的方法是计算X,Y和(X + Y)/ 2的cholesky因子,即找到下三角矩阵L,M,N,以便
X = L*L'
Y = M*M'
(X+Y)/2 = N*N'
(我很遗憾地说我不懂matlab,但肯定会有计算cholesky因子分解的函数)。
然后,使用决定因素和日志的属性
JL(X,Y) = 2*log( det(N)) - log( det(L)) - log(det(M)))
对于下三角矩阵K,我们有
log( det( K)) = log ( Prod( K[i,i], i=1..n))
= Sum ( log( K[i,i]), i=1..n))
我认为使用第二种形式可能更好,即使速度较慢,因为如果矩阵很大,产品可能存在下溢的风险,也许最好的办法是计算< / p>
JL(X,Y) = Sum ( 2*log( N[i,i]) - log( L[i,i]) - log( M[i,i]), i=1..n)
= Sum( log( N[i,i]*N[i,i] / (L[i,i]*M[i,i])), i=1..n)
注意,所有这些都假定可以计算cholesky factorisations,即矩阵X和Y严格为正定,但是函数JL仅在那种情况下定义。