Ata*_*xia 8 c algorithm matrix linear-algebra
我正在编写一个函数来获取两个向量之间的Mahalanobis距离.我知道这是使用等式a'*C ^ -1*b实现的,其中a和b是向量而C是协方差矩阵.我的问题是,有没有一种有效的方法来找到矩阵的逆矩阵而不使用Gauss-Jordan消除,或者没有办法解决这个问题?我正在寻找一种方法来做到这一点,而不是任何预定义的功能.
我知道C是一个Hermitian,正定矩阵,所以有什么方法可以算法利用这个事实吗?或者是否有一些聪明的方法计算马哈拉诺比斯距离而不计算协方差的倒数?任何帮助,将不胜感激.
***编辑:上面的马哈拉诺比斯距离方程是不正确的.它应该是x'*C ^ -1*x,其中x =(ba),而b和a是我们试图找到距离的两个向量(感谢LRPurser).因此,所选答案中提出的解决方案如下:
d = x'*b,其中b = C ^ -1*x C*b = x,因此使用LU分解或LDL'分解求解b.
小智 8
第一马哈拉诺比斯距离(MD)是关于两个向量的测量中的不确定性的标准距离.当C=Indentity matrixMD减少到欧几里德距离时,产品减少到矢量范数.对于所有非零向量,MD总是正定的或大于零.通过与向量选择适宜的剂型a和b,a*C^-1*b可以小于零.希望您正在寻找的向量的差异x=(a-b)使得计算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^t是转置的L,这使得它的上三角.你的算法应该是这样的
(Matlab的)
x=a-b;
L=chol(C);
z=L\x;
MD=z'*z;
MD=sqrt(MD);
Run Code Online (Sandbox Code Playgroud)