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