矩阵的LU分解
linalg.lu
矩阵 的 LU
分解为:
P 是 M×M 的单位矩阵的一个排列,L 是下三角阵,U 是上三角阵。
可以使用 linalg.lu
进行 LU 分解的求解:
具体原理可以查看维基百科: https://en.wikipedia.org/wiki/LU_decomposition
A = np.array([[1,2,3],[4,5,6]])
P, L, U = linalg.lu(A)
结果:
# p
array([[0., 1.],
[1., 0.]])
# L
array([[1. , 0. ],
[0.25, 1. ]])
# U
array([[4. , 5. , 6. ],
[0. , 0.75, 1.5 ]])
scipy.linalg.lu_factor
scipy.linalg.lu_factor(a,
overwrite_a=False,
check_finite=True)
a
:方阵,形状为(M,M)
,要求非奇异矩阵overwrite_a
:一个布尔值,指定是否将结果写到a
的存储区。check_finite
:如果为True
,则检测输入中是否有nan
或者inf
返回:
lu
:一个数组,形状为(N,N)
,该矩阵的上三角矩阵就是U
,下三角矩阵就是L
(L
矩阵的对角线元素并未存储,因为它们全部是1)piv
:一个数组,形状为(N,)
。它给出了P
矩阵:矩阵a
的第i
行被交换到了第piv[i]
行
矩阵LU
分解:
其中: 为转置矩阵,该矩阵任意一行只有一个1,其他全零;任意一列只有一个1,其他全零。 为单位下三角矩阵(对角线元素为1), 为上三角矩阵(对角线元素为0)
基本使用
矩阵 分解
import numpy as np
from scipy.linalg import lu_factor
a = np.array([[1,2,3],[4,9,1],[27,1,8]])
lu,piv=lu_factor(a)
结果:
# lu
array([[27. , 1. , 8. ],
[ 0.14814815, 8.85185185, -0.18518519],
[ 0.03703704, 0.22175732, 2.74476987]])
为单位下三角矩阵(对角线元素为1), 为上三角矩阵
也可使使用上面的linalg.lu
求出