Да, сложность этого кода равна O (n ^ 3), потому что вычисление обратной матрицы angular матрицы A
равно O (n ^ 3): у вас есть n
обратных замен (по одной на каждую n
(столбцы единичной матрицы) и стоимость каждой обратной замены O(n^2)
. Кроме того, у вас есть один матричный векторный продукт стоимостью O (n ^ 2) и один внутренний продукт стоимостью O (n), но эти две операции пренебрежимо малы по сравнению с O (n ^ 3) и общая сложность равна O (n ^ 3).
При этом вы можете переписать выражение, чтобы получить сложность O (n ^ 2):
b' * triu(A)^-1 * I * b = b' * triu(A)^-1 * b
На языке Eigen вы получите:
return b.transpose() * A.triangularView<Eigen::Upper()>.solve(b);
Теперь у вас есть одна обратная подстановка O (n ^ 2) плюс один внутренний продукт O (n), что приводит к асимптотике сложности O (n ^ 2) c. Не нужно говорить, что эта новая версия будет значительно быстрее!