expm_multiply#
- scipy.sparse.linalg.expm_multiply(A, B, начало=None, стоп=None, число=None, конечная точка=None, traceA=None)[источник]#
Вычислить действие матричной экспоненты A на B.
- Параметры:
- Aтранспонируемый линейный оператор
Оператор, экспонента которого представляет интерес.
- Bndarray, разреженный массив
Матрица или вектор, который умножается на матричную экспоненту A.
- началоскаляр, опционально
Начальная точка времени последовательности.
- стопскаляр, опционально
Конечная точка временной последовательности, если только конечная точка установлено в False. В этом случае последовательность состоит из всех, кроме последнего из
num + 1равномерно распределенные временные точки, так что стоп исключён. Обратите внимание, что размер шага изменяется, когда конечная точка равно False.- числоint, необязательный
Количество временных точек для использования.
- конечная точкаbool, необязательно
Если True, стоп является последней временной точкой. В противном случае она не включается.
- traceAскаляр, опционально
След A. Если не задано, след оценивается для линейных операторов или вычисляется точно для разреженных матриц. Он используется для предобуславливания A, поэтому приблизительная трассировка допустима. Для линейных операторов, traceA должен быть предоставлен для обеспечения производительности, так как оценка не гарантируется надежной для всех случаев.
Добавлено в версии 1.9.0.
- Возвращает:
- expm_A_Bndarray
Результат действия \(e^{t_k A} B\).
- Предупреждает:
- UserWarning
Если A является линейным оператором и
traceA=None(по умолчанию).
Примечания
Необязательные аргументы, определяющие последовательность равномерно распределенных временных точек, совместимы с аргументами
numpy.linspace.Форма выходного ndarray несколько сложна, поэтому я объясню её здесь. Размерность вывода может быть 1, 2 или 3. Она будет равна 1, если вы вычисляете действие expm на одном векторе в одной временной точке. Она будет равна 2, если вы вычисляете действие expm на векторе в нескольких временных точках, или если вы вычисляете действие expm на матрице в одной временной точке. Она будет равна 3, если вам нужно действие на матрицу с несколькими столбцами в нескольких временных точках. Если запрошено несколько временных точек, expm_A_B[0] всегда будет действием expm в первой временной точке, независимо от того, является ли действие на вектор или матрицу.
Ссылки
[1]Авад Х. Аль-Мохи и Николас Дж. Хайэм (2011) «Вычисление действия матричной экспоненты, с приложением к экспоненциальным интеграторам». SIAM Journal on Scientific Computing, 33 (2). стр. 488-511. ISSN 1064-8275 http://eprints.ma.man.ac.uk/1591/
[2]Николас Дж. Хайэм и Авад Х. Аль-Мохи (2010) “Вычисление матричных функций.” Acta Numerica, 19. 159-208. ISSN 0962-4929 http://eprints.ma.man.ac.uk/1451/
Примеры
>>> import numpy as np >>> from scipy.sparse import csc_array >>> from scipy.sparse.linalg import expm, expm_multiply >>> A = csc_array([[1, 0], [0, 1]]) >>> A.toarray() array([[1, 0], [0, 1]], dtype=int64) >>> B = np.array([np.exp(-1.), np.exp(-2.)]) >>> B array([ 0.36787944, 0.13533528]) >>> expm_multiply(A, B, start=1, stop=2, num=3, endpoint=True) array([[ 1. , 0.36787944], [ 1.64872127, 0.60653066], [ 2.71828183, 1. ]]) >>> expm(A).dot(B) # Verify 1st timestep array([ 1. , 0.36787944]) >>> expm(1.5*A).dot(B) # Verify 2nd timestep array([ 1.64872127, 0.60653066]) >>> expm(2*A).dot(B) # Verify 3rd timestep array([ 2.71828183, 1. ])