Почему scipy.linalg.lu () возвращает неправильные матрицы разложения квадратной матрицы B в этом коде? - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть следующий код, результат которого очень запутан:

import numpy as np
import scipy.linalg
B = np.array([[2,-1,-2],[-4,6,3],[-4,-2,8]])
P,L,U = scipy.linalg.lu(B)
print(L)

, который возвращает следующее:

[[ 1. 0. 0. ] [ 1. 1. 0. ] [-0.5 -0.25 1. ]]

Но это неправильная матрица L в LU-разложении B. Насколько я знаю, команда scipy.linalg.lu (matrix) просто вычисляет матрицы разложения LU для любой матрицы, которую вы вставили. Однако в этом случае L-матрица неверна,Что здесь происходит?Любая помощь приветствуется.

1 Ответ

0 голосов
/ 07 декабря 2018

Я думаю, вы, возможно, неправильно поняли, что должна делать декомпозиция .потому что это выглядит правильно для меня ... Давайте рассмотрим результаты вашего примера с некоторыми дополнительными деталями и комментариями:

import numpy as np
import scipy.linalg
B = np.array([[2,-1,-2],[-4,6,3],[-4,-2,8]])
P,L,U = scipy.linalg.lu(B)  

# Now let's see if P is a permutation matrix (a single 1 in each row and column, all the rest should be zero):
print(P)  
>> [[ 0.  0.  1.]
   [ 1.  0.  0.]
   [ 0.  1.  0.]]
# Yup! That's a successful permutation matrix  

# Now let's see if L is a lower triangular matrix (anything above the main diagonal should be zero):
print(L)
>> [[ 1.    0.    0.  ]
   [ 1.    1.    0.  ]
   [-0.5  -0.25  1.  ]]
# Yup! still doing good.  

# Now let's see if U is a upper triangular matrix (anything below the main diagonal should be zero):
print(U)
>> [[-4.    6.    3.  ]
   [ 0.   -8.    5.  ]
   [ 0.    0.    0.75]]

# And last but not least, let's see if this works as a decomposition of B (i.e. PLU==B):  
print(np.matmul(P, np.matmul(L, U)))
>> [[ 2. -1. -2.]
   [-4.  6.  3.]
   [-4. -2.  8.]]

# :-)  

Надеюсь, это немного прояснит ситуацию.Если вы все еще не уверены, то, возможно, перечитайте матрицы перестановок , треугольные матрицы , lu-разложение , scipy.linalg.lu и тесно связанные темы.
Удачи!


Похоже, разъяснение на месте:
LU-разложение не является - в общем случае - обязательно уникальным.
Если вам нужны подробности, оставьте в стороне для соответствующую подпункт-chapter в приведенной выше ссылке на википедию, я рекомендую первый и третий ответы на этот вопрос об обмене стеками.
Так что, если вам случится получить два разных ответа на разные реализации или методы,это не значит, что одно или другое неправильно.Если у вас есть матрица перестановок P (даже если это тривиальная единичная матрица), нижняя матрица L, верхняя матрица U, и они разлагают вашу матрицу, то вы получаете себя a разложение.Надеюсь, что все прояснилось!

...