import numpy as np
import scipy
# This next line sets the default output precission for Numpy stuff.
np.set_printoptions(edgeitems=30, linewidth=250, precision=4)
A = np.array([[1.,2,3],[4,5,6],[7,8,1]])
print(A)
[[1. 2. 3.] [4. 5. 6.] [7. 8. 1.]]
P, L, U = scipy.linalg.lu(A)
print(P,'\n')
print(L,'\n')
print(U)
[[0. 1. 0.] [0. 0. 1.] [1. 0. 0.]] [[1. 0. 0. ] [0.1429 1. 0. ] [0.5714 0.5 1. ]] [[7. 8. 1. ] [0. 0.8571 2.8571] [0. 0. 4. ]]
A
array([[1., 2., 3.], [4., 5., 6.], [7., 8., 1.]])
P @ L @ U
array([[1., 2., 3.], [4., 5., 6.], [7., 8., 1.]])
U
array([[7. , 8. , 1. ], [0. , 0.8571, 2.8571], [0. , 0. , 4. ]])
myL = np.array([[1,0,0],[4,1.,0],[7,2,1]])
myU = np.array([[1.,2,3],[0,-3,-6],[0,0,-8]])
print(myL,'\n')
print(myU,'\n')
print(myL@myU)
[[1. 0. 0.] [4. 1. 0.] [7. 2. 1.]] [[ 1. 2. 3.] [ 0. -3. -6.] [ 0. 0. -8.]] [[1. 2. 3.] [4. 5. 6.] [7. 8. 1.]]
A = np.random.rand(7,4)
A[:,2] = A[:,0]
print(A)
[[0.7542 0.2289 0.7542 0.8724] [0.6593 0.4027 0.6593 0.7879] [0.2511 0.9932 0.2511 0.955 ] [0.4716 0.5346 0.4716 0.2066] [0.7816 0.9187 0.7816 0.823 ] [0.4311 0.3761 0.4311 0.4526] [0.8804 0.8111 0.8804 0.5549]]
Q, R = np.linalg.qr(A, 'reduced')
print(Q, '\n')
print(R)
[[-0.4459 -0.4666 0.7558 -0.0054] [-0.3898 -0.1926 -0.3078 0.6766] [-0.1485 0.819 0.4328 0.2449] [-0.2788 0.1242 -0.018 -0.5824] [-0.4621 0.2406 -0.2024 0.0506] [-0.2549 -0.0061 -0.0692 0.1096] [-0.5205 0.0333 -0.3172 -0.3584]] [[-1.6914e+00 -1.4981e+00 -1.6914e+00 -1.6800e+00] [ 0.0000e+00 9.4111e-01 -3.2598e-16 4.6267e-01] [ 0.0000e+00 0.0000e+00 5.1300e-16 4.5255e-01] [ 0.0000e+00 0.0000e+00 0.0000e+00 5.3425e-01]]
Q, R = np.linalg.qr(A, 'complete')
print(Q, '\n')
print(R)
[[-0.4459 -0.4666 0.7558 -0.0054 0.0716 -0.0591 0.0594] [-0.3898 -0.1926 -0.3078 0.6766 -0.3254 -0.2403 -0.308 ] [-0.1485 0.819 0.4328 0.2449 -0.2311 -0.0494 0.0639] [-0.2788 0.1242 -0.018 -0.5824 -0.2211 -0.0436 -0.7187] [-0.4621 0.2406 -0.2024 0.0506 0.822 -0.0734 -0.0634] [-0.2549 -0.0061 -0.0692 0.1096 -0.0818 0.9545 -0.022 ] [-0.5205 0.0333 -0.3172 -0.3584 -0.323 -0.1342 0.6136]] [[-1.6914e+00 -1.4981e+00 -1.6914e+00 -1.6800e+00] [ 0.0000e+00 9.4111e-01 -3.2598e-16 4.6267e-01] [ 0.0000e+00 0.0000e+00 5.1300e-16 4.5255e-01] [ 0.0000e+00 0.0000e+00 0.0000e+00 5.3425e-01] [ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00] [ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00] [ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00]]
print(A,'\n')
print(Q@R)
[[0.7542 0.2289 0.7542 0.8724] [0.6593 0.4027 0.6593 0.7879] [0.2511 0.9932 0.2511 0.955 ] [0.4716 0.5346 0.4716 0.2066] [0.7816 0.9187 0.7816 0.823 ] [0.4311 0.3761 0.4311 0.4526] [0.8804 0.8111 0.8804 0.5549]] [[0.7542 0.2289 0.7542 0.8724] [0.6593 0.4027 0.6593 0.7879] [0.2511 0.9932 0.2511 0.955 ] [0.4716 0.5346 0.4716 0.2066] [0.7816 0.9187 0.7816 0.823 ] [0.4311 0.3761 0.4311 0.4526] [0.8804 0.8111 0.8804 0.5549]]
print(Q.T@Q)
[[ 1.0000e+00 1.6380e-16 -4.0584e-16 -3.9494e-17 -8.7540e-17 -1.0257e-17 -5.0765e-17] [ 1.6380e-16 1.0000e+00 1.2612e-18 -7.2204e-17 -9.3153e-18 3.2378e-17 1.3079e-17] [-4.0584e-16 1.2612e-18 1.0000e+00 3.4137e-16 -1.5363e-16 -1.1290e-16 -1.3580e-16] [-3.9494e-17 -7.2204e-17 3.4137e-16 1.0000e+00 2.0873e-16 6.4334e-17 2.0845e-16] [-8.7540e-17 -9.3153e-18 -1.5363e-16 2.0873e-16 1.0000e+00 -4.8483e-17 -4.8301e-17] [-1.0257e-17 3.2378e-17 -1.1290e-16 6.4334e-17 -4.8483e-17 1.0000e+00 -2.6009e-17] [-5.0765e-17 1.3079e-17 -1.3580e-16 2.0845e-16 -4.8301e-17 -2.6009e-17 1.0000e+00]]