scipy.linalg.

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]])