# scipy.linalg.funm

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

  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)

  Returns:
    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 [1]).

  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

  [1]

  Gene H. Golub, Charles F. van Loan, Matrix Computations 4th ed.

  Examples

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