эффективное вычисление трассировки (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)).