Если B
является разреженным, может быть эффективным (т. Е. O (n), при условии, что число хороших условий B
) решить для x_i
в
B x_i = a_i
(образец Conjugate Gradient код приведен в Википедии).Взяв a_i
за векторы столбцов A
, вы получите матрицу B^{-1} A
в O (n ^ 2).Затем вы можете сложить диагональные элементы, чтобы получить след.Как правило, это редкое обратное умножение легче сделать, чем получить полный набор собственных значений. Для сравнения Разложение Холецкого - это O (n ^ 3). ( см. Комментарий Даррена Энгвирды ниже о Холецком ).
Если вы толькоЕсли вам нужно приближение к трассе, вы можете уменьшить стоимость до O (qn), усредняя
r^T (A B^{-1}) r
по q
случайным векторам r
.Обычно q << n
.Это объективная оценка при условии, что компоненты случайного вектора r
удовлетворяют
< r_i r_j > = \delta_{ij}
, где < ... >
указывает среднее значение по распределению r
.Например, компоненты r_i
могут быть независимым гауссовым распределением с единичной дисперсией.Или они могут быть выбраны равномерно из + -1.Обычно трассировка масштабируется как O (n), а ошибка в оценке трассы масштабируется как O (sqrt (n / q)), поэтому относительная ошибка масштабируется как O (sqrt (1 / nq)).