scipy.sparse.linalg.expm_multiply

scipy.sparse.linalg.expm_multiply(A, B, start=None, stop=None, num=None, endpoint=None)[源代码]

计算A的矩阵指数对B的作用。

参数
A可转置线性算子

指数感兴趣的运算符。

Bndarray

要乘以A的矩阵指数的矩阵或向量。

start标量,可选

序列的开始时间点。

stop标量,可选

序列的结束时间点,除非 endpoint 设置为false。在这种情况下,序列由除最后一个之外的所有序列组成 num + 1 均匀分布的时间点,因此 stop 被排除在外。请注意,步长在以下情况下会更改 endpoint 是假的。

num整型,可选

要使用的时间点数。

endpoint布尔值,可选

如果为True, stop 是最后一个时间点。否则,它将不包括在内。

退货
expm_A_Bndarray

行动的结果 \(e^{{t_k A}} B\)

注意事项

定义均匀分布的时间点序列的可选参数与 numpy.linspace

输出ndarray形状有点复杂,所以我在这里解释一下。输出的ndim可以是1、2或3。如果要在单个时间点计算对单个向量的exPM操作,则输出的ndim将为1。如果您在多个时间点计算向量上的exPM操作,或者如果您在单个时间点上计算矩阵上的exPM操作,则该值为2。如果希望在多个时间点对具有多列的矩阵执行操作,则为3。如果请求多个时间点,exPM_A_B [0] 将始终是exPM在第一个时间点的操作,无论该操作是在向量上还是在矩阵上。

参考文献

1

Awad H.Al-Mohy和Nicholas J.Higham(2011),<计算矩阵指数的作用,及其在指数积分器中的应用>。暹罗科学计算学报,33(2)。第488-511页。ISSN1064-8275 http://eprints.ma.man.ac.uk/1591/

2

Nicholas J.Higham和Awad H.Al-Mohy(2010),“计算矩阵函数”。“数字学报”,19.159-208。ISSN0962-4929 http://eprints.ma.man.ac.uk/1451/

示例

>>> from scipy.sparse import csc_matrix
>>> from scipy.sparse.linalg import expm, expm_multiply
>>> A = csc_matrix([[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.        ])