sqrtm#
- scipy.linalg.sqrtm(A, disp=, blocksize=)[источник]#
Вычислить, если существует, квадратный корень матрицы.
Квадратный корень матрицы из
Aявляется матрицейXтакой, чтоX @ X = A. Не гарантируется, что каждая квадратная матрица имеет квадратный корень матрицы, например, массив[[0, 1], [0, 0]]не имеет квадратного корня.Более того, не каждая вещественная матрица имеет вещественный квадратный корень. Следовательно, для вещественных матриц возвращаемый тип может быть комплексным, если численно существует собственное значение на отрицательной вещественной оси.
- Параметры:
- Andarray
Входные данные с последними двумя измерениями являются квадратными
(..., n, n).- dispbool, необязательно
Выводить предупреждение, если ошибка в результате оценивается как большая, вместо возврата оценённой ошибки. (По умолчанию: True)
Устарело с версии 1.16.0: The disp аргумент устарел и будет удален в SciPy 1.18.0. Ранее возвращаемая оценка ошибки может быть вычислена как
norm(X @ X - A, 'fro')**2 / norm(A, 'fro')- размер блокацелое число, опционально
Устарело с версии 1.16.0: The размер блока аргумент устарел, так как не используется алгоритмом и будет удален в SciPy 1.18.0.
- Возвращает:
- sqrtmndarray
Вычисленный квадратный корень матрицы A с тем же размером
(..., n, n).- ошибкаfloat
Норма Фробениуса оцененной ошибки, ||err||_F / ||A||_F. Возвращается только, если
dispустановлено вFalse. Этот возвращаемый аргумент будет удалён в версии 1.20.0, и будет возвращаться только результат sqrtm.Устарело с версии 1.16.0.
Примечания
Эта функция использует метод разложения Шура для вычисления квадратного корня матрицы в соответствии с [1] По умолчанию возвращаемый объект не является словарём Python, а словарём без учёта регистра с доступом к переменным через элементы, атрибуты и вызовы. Чтобы получить стандартный словарь Python, установите эту опцию в True. [2]. Более того, обратите внимание, что существуют матрицы, имеющие квадратные корни, которые не являются полиномами от
A. Для классического примера из [2], матрица удовлетворяет:[ a, a**2 + 1]**2 [-1, 0] [-1, -a] = [ 0, -1]
для любого скаляра
aно это не полином в-I. Таким образом, они не будут найдены этой функцией.Ссылки
[1]Эдвин Дедман, Николас Дж. Хайэм, Руи Ралья (2013) «Блочные алгоритмы Шура для вычисления квадратного корня матрицы, Лекционные заметки по информатике, 7782. стр. 171-182. DOI:10.1016/0024-3795(87)90118-2
[2] (1,2)Николас Дж. Хайэм (1987) “Вычисление вещественных квадратных корней вещественной матрицы”, Линейная алгебра и её приложения, 88/89:405-430. DOI:10.1016/0024-3795(87)90118-2
Примеры
>>> import numpy as np >>> from scipy.linalg import sqrtm >>> a = np.array([[1.0, 3.0], [1.0, 4.0]]) >>> r = sqrtm(a) >>> r array([[ 0.75592895, 1.13389342], [ 0.37796447, 1.88982237]]) >>> r.dot(r) array([[ 1., 3.], [ 1., 4.]])