Ở bài trước mình đã nói về Cholesky Decomposition, bài này mình sẽ trình bày về QR Decomposition.
I. Các khái niệm cơ bản
1. Tích vô hướng và không gian Euclid
- Cho là không gian vector. Ánh xạ
được gọi là tích vô hướng trong nếu với mọi và , thỏa các tính chất sau:
;
;
;
trong đó .
Định nghĩa. Ta gọi một không gian vector hữu hạn chiều với tích vô hướng là một không gian Euclid.
Cho không gian vector với , ta định nghĩa .
Khi đó là không gian Euclid. Tích vô hướng này được gọi là tích vô hướng chính tắc trong . - [Bất đẳng thức Cauchy - Schwarz]. Với mọi ta có
.
Dấu xảy ra khi và chỉ khi phụ thuộc tuyến tính. - [Bất đẳng thức tam giác]. Với mọi ta có
.
Dấu xảy ra khi và chỉ khi tồn tại sao cho . - Định nghĩa. Cho là không gian Euclid và . Góc giữa hai vector là thỏa
2. Cơ sở trực giao và cơ sở trực chuẩn, quá trình trực chuẩn hóa Gram-Schmidt
Giả sử trên trang bị một tích vô hướng. Hai vector được gọi là trực giao, ký hiệu nếu .
- Hệ vector trong gọi là hệ trực giao nếu và với mọi , tức là
nếu và nếu . - Hệ trực giao mà gọi là hệ trực chuẩn.
- Hệ trực giao là hệ độc lập tuyến tính.
Cơ sở gọi là một cơ sở trực giao (trực chuẩn) nếu nó là một hệ trực giao (trực chuẩn). - Định lý [Gram - Schmidt]. Nếu hệ các vector là độc lập tuyến tính bất kỳ trong thì tồn tại hệ trực chuẩn sao cho .
Ta chứng minh bằng quy nạp.
Với đặt . Giả sử xây dựng được hệ trực chuẩn và . Ta chỉ ra cách xây dựng .
Đặt , các xác định sau và .
Ta có .
Mà nên hay
Vì độc lập tuyến tính nên không biểu diễn tuyến tính qua , vì , do đó .
Đặt . Ta được hệ trực chuẩn thỏa mãn định lý. - Hệ quả: Nếu là một cơ sở bất kỳ của thì tồn tại cơ sở trực chuẩn sao cho .
- Định lý: Nếu là một cơ sở trực chuẩn của thì với mọi ta có .
Giả sử .
.
Vì là cơ sở trực chuẩn nên nếu và nếu .
Suy ra .
Ví dụ: Trực chuẩn hóa Gram - Schmidt hệ vector
II. Phân tích QR
1. Phát biểu
- Giả sử rằng là ma trận gồm cột độc lập tuyến tính, viết dưới dạng các vector cột là . Trực chuẩn hóa các vector ta được các vector . Mặc khác từ định lý nêu ở trên ta có
Vì vậy ta có
với là ma trận có các cột trực giao, là ma trận tam giác trên vuông cấp - [Định lý]. Giả sử rằng có các cột độc lập tuyến tính, khi đó ta có thể phân tích trong đó là ma trận trực giao và là ma trận tam giác trên cấp khả nghịch.
Ví dụ: Cho ma trận
2. Code Python
import numpy as np
#Chuẩn hóa vector
def normalize(vector):
norm_vector=np.linalg.norm(vector)
return vector/norm_vector
#Tìm ma trận trực giao Q bằng Gram - Schmidt Process
def GramSchmidtProcess(A):
A=np.transpose(A)
n=A.shape[1]
B=np.zeros((n,n), dtype=np.float32)
e_1=normalize(A[:,0])
B[:,0]=e_1
for i in range(1,n):
temp=0
for j in range(0,i):
temp=temp+(np.inner(A[:,i],B[:,j]))*B[:,j]
temp2=normalize(A[:,i]-temp)
B[:,i]=temp2
return B
#Cách 1: Tính R bằng ma trận nghịch đảo
#A=QR => R=Q^-1.dot(A)
def QR_Decomposition_GramSchimidt_1(A):
Q=GramSchmidtProcess(A)
R=(Q.T).dot(A.T)
return Q,R
#Cách 2
def QR_Decomposition_GramSchmidt_2(A):
Q=GramSchmidtProcess(A)
A=np.transpose(A)
m=A.shape[0]
R=np.zeros((m,m))
for i in range(0, m):
for j in range(0, i+1):
R[j][i]=np.inner(A[:,i], Q[:,j])
return Q,R
A=np.array([[1,1,1],[0,1,1],[0,0,1]])
Q,R=QR_Decomposition_GramSchmidt_2(A)
print(Q)
print(R)
[[ 5.7735026e-01 -8.1649655e-01 4.2146848e-08]
[ 5.7735026e-01 4.0824834e-01 -7.0710677e-01]
[ 5.7735026e-01 4.0824834e-01 7.0710677e-01]]
[[1.73205078 1.15470052 0.57735026]
[0. 0.81649667 0.40824834]
[0. 0. 0.70710677]]
Kết quả cho ra đúng với kết quả ta làm ở trên.
III. Tài liệu tham khảo
- Slide bài giảng Đại số A2, Thầy Lê Văn Luyện, ĐH KHTN TPHCM.
- https://fit.mta.edu.vn/files/DanhSach/BaigiangDSTT_16.pdf