# scipy.linalg.funm¶

scipy.linalg.funm(A, func, disp=True)[source]

Evaluate a matrix function specified by a callable.

Returns the value of matrix-valued function f at A. The function f is an extension of the scalar-valued function func to matrices.

Parameters: A : (N, N) array_like Matrix at which to evaluate the function func : callable Callable object that evaluates a scalar function f. Must be vectorized (eg. using vectorize). disp : bool, optional Print warning if error in the result is estimated large instead of returning estimated error. (Default: True) funm : (N, N) ndarray Value of the matrix function specified by func evaluated at A errest : float (if disp == False) 1-norm of the estimated error, ||err||_1 / ||A||_1

Notes

This function implements the general algorithm based on Schur decomposition (Algorithm 9.1.1. in [R128]).

If the input matrix is known to be diagonalizable, then relying on the eigendecomposition is likely to be faster. For example, if your matrix is Hermitian, you can do

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


References

 [R128] (1, 2) Gene H. Golub, Charles F. van Loan, Matrix Computations 4th ed.

Examples

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


#### Previous topic

scipy.linalg.sqrtm

#### Next topic

scipy.linalg.expm_frechet