我有一个可逆的Hermitian矩阵和平方子矩阵,已定义:
我需要知道每个的决定因素。
在MATLAB中有一种快速的计算方法吗?
这是不好的方法:
[1:2^K]
vSubset
det(mtxM(vSubset,vSubset))
这很慢并且看起来很浪费,因为你可以从未成年人的决定因素中构建父矩阵的行列式。
答案 0 :(得分:1)
一种方法是使用Cholesky分解。我使用下面的上三角形,以便
M = U'*U
其中'是伴随的,U是上三角形。 注意det(M)= square(| det(U)|)并且U的行列式是其对角元素的乘积。
我们可以通过添加如下行和列来计算从M获得的矩阵的因子:
M~ = ( M n )
( n' p )
U~ = ( U x )
( 0 y )
其中
U'*x = n
y = sqrt( p - x'*x)
所以det(M~)= det(M)*(p - x' * x)
我不确定使用它的最佳方法。有一种非常简洁的递归方式:伪C代码
void det_step( double* U, double det, int high_ix)
{
int ix;
for( ix=high_ix+1; ix<dim; ++ix)
{ // notionally add row, col ix
// augment U, update det (and store in the output)
det_step( U, det, ix);
}
}
void dets( double* M, int dim)
{
int ix;
for( ix=0; ix<dim; ++ix)
{ // compute U and det for matrix consisting of just row/col ix
// store det in the output
det_step( U, det, ix);
}
}