scipy.linalg.

sqrtm#

scipy.linalg.sqrtm(A, disp= object>, blocksize= object>)[источник]#

Вычислить, если существует, квадратный корень матрицы.

Квадратный корень матрицы из 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.]])