Ở 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 trongnế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 vectorvớ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ấuxả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ấuxả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ớilà 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