scipy.linalg.
funm#
- scipy.linalg.funm(A, func, disp=True)[source]#
評估由可呼叫物件指定的矩陣函數。
傳回在 A 處評估的矩陣值函數
f
的值。函數f
是純量值函數 func 對矩陣的擴展。- 參數:
- A(N, N) 類陣列
在其中評估函數的矩陣
- func可呼叫物件
評估純量函數 f 的可呼叫物件。必須向量化(例如,使用 vectorize)。
- disp布林值,選用
如果結果中的錯誤估計值過大,則列印警告,而不是傳回估計的錯誤。(預設值:True)
- 傳回值:
- funm(N, N) ndarray
在 A 處評估的 func 所指定矩陣函數的值
- errest浮點數
(如果 disp == False)
估計誤差的 1-範數,||err||_1 / ||A||_1
註解
此函數實作基於 Schur 分解的通用演算法([1] 中的演算法 9.1.1)。
如果已知輸入矩陣可對角化,則依靠特徵分解可能會更快。例如,如果您的矩陣是 Hermitian,您可以執行
>>> from scipy.linalg import eigh >>> def funm_herm(a, func, check_finite=False): ... w, v = eigh(a, check_finite=check_finite) ... ## if you further know that your matrix is positive semidefinite, ... ## you can optionally guard against precision errors by doing ... # w = np.maximum(w, 0) ... w = func(w) ... return (v * w).dot(v.conj().T)
參考文獻
[1]Gene H. Golub、Charles F. van Loan,《矩陣計算》第 4 版。
範例
>>> import numpy as np >>> from scipy.linalg import funm >>> a = np.array([[1.0, 3.0], [1.0, 4.0]]) >>> funm(a, lambda x: x*x) array([[ 4., 15.], [ 5., 19.]]) >>> a.dot(a) array([[ 4., 15.], [ 5., 19.]])