expm#
- scipy.linalg.expm(A)[источник]#
Вычислить матричную экспоненту массива.
- Параметры:
- Andarray
Входные данные с последними двумя измерениями являются квадратными
(..., n, n).
- Возвращает:
- eAndarray
Результирующая матричная экспонента с той же формой, что и
A
Примечания
Реализует алгоритм, приведённый в [1], который по сути является аппроксимацией Паде с переменным порядком, определяемым на основе данных массива.
Для ввода с размером
n, использование памяти в худшем случае порядка8*(n**2). Если входные данные не являются одинарной или двойной точностью вещественных и комплексных типов, они копируются в новый массив.Для случаев
n >= 400, точная стоимость вычисления 1-нормы, становится равной оценке 1-нормы, и с этого момента используется схема оценки, приведенная в [2], для определения порядка аппроксимации.Ссылки
[1]Авад Х. Аль-Мохи и Николас Дж. Хайэм, (2009), «Новый алгоритм масштабирования и возведения в квадрат для матричной экспоненты», SIAM J. Matrix Anal. Appl. 31(3):970-989, DOI:10.1137/09074721X
[2]Nicholas J. Higham and Francoise Tisseur (2000), “A Block Algorithm for Matrix 1-Norm Estimation, with an Application to 1-Norm Pseudospectra.” SIAM J. Matrix Anal. Appl. 21(4):1185-1201, DOI:10.1137/S0895479899356080
Примеры
>>> import numpy as np >>> from scipy.linalg import expm, sinm, cosm
Матричная версия формулы exp(0) = 1:
>>> expm(np.zeros((3, 2, 2))) array([[[1., 0.], [0., 1.]], [[1., 0.], [0., 1.]], [[1., 0.], [0., 1.]]])
Тождество Эйлера (exp(i*theta) = cos(theta) + i*sin(theta)) примененное к матрице:
>>> a = np.array([[1.0, 2.0], [-1.0, 3.0]]) >>> expm(1j*a) array([[ 0.42645930+1.89217551j, -2.13721484-0.97811252j], [ 1.06860742+0.48905626j, -1.71075555+0.91406299j]]) >>> cosm(a) + 1j*sinm(a) array([[ 0.42645930+1.89217551j, -2.13721484-0.97811252j], [ 1.06860742+0.48905626j, -1.71075555+0.91406299j]])