w3resource

Apply QR, LU, and Cholesky decompositions using SciPy on a matrix


NumPy: Integration with SciPy Exercise-13 with Solution


Write a NumPy program to create a matrix and apply various SciPy linear algebra decompositions (QR, LU, Cholesky).

Sample Solution:

Python Code:

import numpy as np  # Import NumPy library
from scipy.linalg import qr, lu, cholesky  # Import linear algebra decomposition functions from SciPy

# Create a matrix using NumPy
matrix = np.array([
    [4, 12, -16],
    [12, 37, -43],
    [-16, -43, 98]
])

# Apply QR decomposition
Q, R = qr(matrix)

# Apply LU decomposition
P, L, U = lu(matrix)

# Apply Cholesky decomposition
# Ensure the matrix is positive-definite for Cholesky decomposition
cholesky_matrix = np.array([
    [4, 12, -16],
    [12, 37, -43],
    [-16, -43, 98]
])
L_cholesky = cholesky(cholesky_matrix, lower=True)

# Print the original matrix and the decomposition results
print("Original Matrix:")
print(matrix)

print("\nQR Decomposition:")
print("Q matrix:")
print(Q)
print("R matrix:")
print(R)

print("\nLU Decomposition:")
print("P matrix:")
print(P)
print("L matrix:")
print(L)
print("U matrix:")
print(U)

print("\nCholesky Decomposition:")
print("L matrix:")
print(L_cholesky)

Output:

Original Matrix:
[[  4  12 -16]
 [ 12  37 -43]
 [-16 -43  98]]

QR Decomposition:
Q matrix:
[[-0.19611614 -0.16947544  0.96582428]
 [-0.58834841 -0.76762404 -0.25416428]
 [ 0.78446454 -0.61808689  0.05083286]]
R matrix:
[[-20.39607805 -57.85425987 105.31436457]
 [  0.          -3.8580585  -24.85307452]
 [  0.           0.           0.45749571]]

LU Decomposition:
P matrix:
[[0. 0. 1.]
 [0. 1. 0.]
 [1. 0. 0.]]
L matrix:
[[ 1.          0.          0.        ]
 [-0.75        1.          0.        ]
 [-0.25        0.26315789  1.        ]]
U matrix:
[[-16.         -43.          98.        ]
 [  0.           4.75        30.5       ]
 [  0.           0.           0.47368421]]

Cholesky Decomposition:
L matrix:
[[ 2.  0.  0.]
 [ 6.  1.  0.]
 [-8.  5.  3.]]

Explanation:

  • Import Libraries:
    • Import the NumPy library for creating and manipulating arrays.
    • Import the qr, lu, and "cholesky" functions from SciPy's linear algebra module for matrix decompositions.
  • Create a matrix:
    • Define a symmetric matrix as a NumPy array. Ensure the matrix is symmetric and positive-definite for Cholesky decomposition.
  • Apply QR Decomposition:
    • Use the qr function from SciPy to perform QR decomposition, which decomposes the matrix into an orthogonal matrix Q and an upper triangular matrix R.
  • Apply LU Decomposition:
    • Use the lu function from SciPy to perform LU decomposition, which decomposes the matrix into a permutation matrix P, a lower triangular matrix L, and an upper triangular matrix U.
  • Apply Cholesky Decomposition:
    • Use the "cholesky" function from SciPy to perform Cholesky decomposition, which decomposes the matrix into a lower triangular matrix L. Ensure the matrix is positive-definite.
    • Finally display the original matrix and the results of the QR, LU, and Cholesky decompositions to verify the operations.

Python-Numpy Code Editor: