马哈拉诺比斯距离反演协方差矩阵

我正在编写一个函数来获取两个向量之间的Mahalanobis距离。 我知道这是使用等式a’* C ^ -1 * b实现的,其中a和b是向量,C是协方差矩阵。 我的问题是,有没有一种有效的方法可以在不使用Gauss-Jordan消除的情况下找到矩阵的逆矩阵,还是没有办法解决这个问题? 我正在寻找一种方法来做到这一点,而不是任何预定义的function。

我知道C是一个Hermitian,正定矩阵,那么有什么方法可以算法利用这个事实呢? 或者是否有一些聪明的方法来计算Mahalanobis距离而不计算协方差的倒数? 任何帮助,将不胜感激。

***编辑:上面的马哈拉诺比斯距离方程是不正确的。 它应该是x’* C ^ -1 * x,其中x =(ba),而b和a是我们试图找到的距离的两个向量(感谢LRPurser)。 因此,在所选答案中提出的解决方案如下:

d = x’* b,其中b = C ^ -1 * x C * b = x,因此使用LU分解或LDL’因子分解来求解b。

您可以(并且应该!)使用LU分解而不是显式反转矩阵:使用分解求解C x = b具有比计算C^-1和乘以向量b更好的数值属性。

由于矩阵是对称的,因此LU分解实际上等同于LDL *分解 ,这是您在实际情况中应该实际使用的分解 。 由于矩阵也是正定的,因此您应该能够在不进行旋转的情况下执行此分解。


编辑:请注意,对于此应用程序,您不需要解决完整的C x = b问题。

相反,给定C = LDL*和差矢量v = ab ,求解L* y = v (这是完整LU求解器的一半)。

然后,可以在线性时间中计算y^t D^-1 y = v^t C^-1 v

第一马哈拉诺比斯距离(MD)是两个向量的测量中的不确定性的标准距离。 当C=Indentity matrix ,MD减小到欧几里德距离,因此乘积减少到向量范数。 对于所有非零向量,MD总是正定的或大于零。 通过适当选择向量ab的公式, a*C^-1*b可以小于零。 希望您正在寻找的向量的差异是x=(ab) ,这使得计算x^t*C^-1*x其中x^t是向量x的转置。 还要注意MD=sqrt(x^t*C^-1*x)因为你的矩阵是对称的和正定的,所以你可以利用Cholesky分解(MatLab-chol) ,它使用一半的操作作为LU并且在数值上更多稳定。 chol(C)=L其中C=L*L^t其中L是下三角矩阵, L^tL的转置,使其为上三角形。 你的算法应该是这样的

(Matlab的)

  x=ab; L=chol(C); z=L\x; MD=z'*z; MD=sqrt(MD);