矩阵的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 求出