эффективное вычисление трассировки (AB^{-1}) при заданных A и B
У меня есть две квадратные матрицы A и B. A симметрична, B симметрична положительно определенная. Я хотел бы вычислить $trace (A. B^{-1})$. Для Теперь, я вычислить разложение Холецкого Б, решить для C в уравнении $А=С. Б$ и суммирования диагональных элементов.
Существует ли более эффективный способ продолжения работы?
Я планирую использовать Eigen. Не могли бы вы предоставить реализацию, если матрицы разрежены (A часто может быть диагональным, B часто диагональным по полосе)?
2 ответа:
Если
B
разрежен, то он может быть эффективным(т. е., O (n), предполагая хорошее число условийB
) для решения дляx_i
вB x_i = a_i
(пример сопряженного градиентного кода приведен в Википедии). Принимая
a_i
за векторы столбцовA
, Вы получаете матрицуB^{-1} A
в O(n^2). Затем вы можете суммировать диагональные элементы, чтобы получить трассировку. Как правило, проще выполнить это разреженное обратное умножение, чем получить полный набор собственных значений.Для сравнения, Холецкого разложение равно O (n^3).(см. комментарий Даррена Энгвирды ниже о Холески ).Если вам нужно только приближение к следу, вы можете фактически уменьшить стоимость до O (q n) путем усреднения
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)).