當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy linalg.expm_frechet用法及代碼示例


本文簡要介紹 python 語言中 scipy.linalg.expm_frechet 的用法。

用法:

scipy.linalg.expm_frechet(A, E, method=None, compute_expm=True, check_finite=True)#

A 的矩陣 index 在 E 方向上的 Frechet 導數。

參數

A (N, N) 數組

其中矩陣取矩陣 index 。

E (N, N) 數組

采用 Frechet 導數的矩陣方向。

method str,可選

算法的選擇。應該是其中之一

  • SPS(默認)

  • blockEnlarge

compute_expm 布爾型,可選

除了 expm_frechet_AE 之外,是否還計算 expm_A。默認為真。

check_finite 布爾型,可選

是否檢查輸入矩陣是否僅包含有限數。禁用可能會提高性能,但如果輸入確實包含無窮大或 NaN,則可能會導致問題(崩潰、非終止)。

返回

expm_A ndarray

A的矩陣 index 。

expm_frechet_AE ndarray

A 的矩陣 index 在 E 方向上的 Frechet 導數。

為了compute_expm = False, 隻要expm_frechet_AE被退回。

注意

本節介紹可以通過方法參數選擇的可用實現。默認方法是 SPS。

方法 blockEnlarge 是一種簡單的算法。

方法SPS是Scaling-Pade-Squaring[1].這是一個複雜的實現,隻需要大約 3/8 的時間作為天真的實現。漸近線是相同的。

參考

[1]

Awad H. Al-Mohy 和 Nicholas J. Higham (2009) 計算矩陣 index 的 Frechet 導數,並應用於條件數估計。 SIAM 矩陣分析與應用雜誌,30 (4)。第 1639-1657 頁。 ISSN 1095-7162

例子

>>> import numpy as np
>>> from scipy import linalg
>>> rng = np.random.default_rng()
>>> A = rng.standard_normal((3, 3))
>>> E = rng.standard_normal((3, 3))
>>> expm_A, expm_frechet_AE = linalg.expm_frechet(A, E)
>>> expm_A.shape, expm_frechet_AE.shape
((3, 3), (3, 3))

創建一個包含 [[A, E], [0, A]] 的 6x6 矩陣:

>>> M = np.zeros((6, 6))
>>> M[:3, :3] = A
>>> M[:3, 3:] = E
>>> M[3:, 3:] = A
>>> expm_M = linalg.expm(M)
>>> np.allclose(expm_A, expm_M[:3, :3])
True
>>> np.allclose(expm_frechet_AE, expm_M[:3, 3:])
True

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.linalg.expm_frechet。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。