Возведение матрицы в степень можно выполнить в python с помощью функций из библиотеки scipy.linalg
, а именно expm, expm2, expm3
. expm
использует приближение Паде; expm2
использует метод разложения по собственным значениям, а expm3
использует ряд Тейлора с числом членов по умолчанию, равным 20.
В примечаниях к выпуску SciPy 0.13.0 указано, что:
Матричные экспоненциальные функции scipy.linalg.expm2 и scipy.linalg.expm3 устарели. Вместо этого всем пользователям следует использовать более надежную в числовом отношении функцию scipy.linalg.expm.
Хотя expm2
и expm3
устарели, начиная с версии SciPy 0.13.0, я обнаружил, что во многих ситуациях эти реализации работают быстрее, чем expm
. Отсюда возникают некоторые вопросы:
В каких ситуациях expm2 и expm3 могут привести к численной нестабильности?
В каких ситуациях (например, разреженные матрицы, симметричные,...) каждый из алгоритмов работает быстрее/точнее?