Вы можете посмотреть, сработала ли декомпозиция. Умножая вашу матрицу L
на ее транспонирование, вы в значительной степени получаете исходную матрицу обратно:
>>> import numpy as np
>>> L = np.array([[1.41421356e+00, 0.00000000e+00],
... [4.24264069e+00, 5.64928468e-08]])
>>> L.dot(L.T)
array([[ 1.99999999, 5.99999999],
[ 5.99999999, 18.00000002]])
Если посмотреть на собственные значения вашей матрицы, они равны 0.
и 20.
, так что она положительно полуопределена.
Я бы пришел к выводу, что используемый алгоритм может действительно работать, но у вас нет гарантии, что он действительно даст ощутимые результаты. Точно так же вы можете использовать сопряженный градиент для решения системы уравнений, даже если система не является эрмитовой матрицей. Иногда это работает, но там это может сработать.
Возможно, критерий проверки, используемый в NumPy, не должен быть таким строгим, потому что он может справиться с некоторыми полуопределенными матрицами.