funm#
- scipy.linalg.funm(A, функция, disp=True)[источник]#
Вычислить матричную функцию, заданную вызываемым объектом.
Возвращает значение матричной функции
fв A. Функцияfявляется расширением скалярной функции функция к матрицам.Документация написана в предположении, что аргументы-массивы имеют указанные «основные» формы. Однако аргументы-массивы этой функции могут иметь дополнительные «пакетные» измерения, добавленные перед основной формой. В этом случае массив обрабатывается как пакет низкоразмерных срезов; см. Пакетные линейные операции подробности.
- Параметры:
- A(N, N) array_like
Матрица, в которой вычисляется функция
- функцияcallable
Вызываемый объект, который вычисляет скалярную функцию f. Должен быть векторизован (например, с использованием vectorize).
- dispbool, необязательно
Выводить предупреждение, если ошибка в результате оценивается как большая, вместо возврата оценённой ошибки. (По умолчанию: True)
- Возвращает:
- funm(N, N) ndarray
Значение матричной функции, указанной func, вычисленное в A
- ошибкаfloat
(если disp == False)
1-норма оценённой ошибки, ||err||_1 / ||A||_1
Примечания
Эта функция реализует общий алгоритм на основе разложения Шура (Алгоритм 9.1.1. в [1]).
Если известно, что входная матрица диагонализируема, то использование собственного разложения, вероятно, будет быстрее. Например, если ваша матрица эрмитова, вы можете сделать
>>> 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, Matrix Computations 4th ed.
Примеры
>>> 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.]])