You are on page 1of 3

Đặt vấn đề: Xét hệ phương trình tuyến tính với n ẩn và n phương trình như sau:

{
a11 . x 1 +…+ a1 n . x n=b1
a21 . x 1 +…+a 2 n . x n=b2

an 1 . x 1 +…+a nn . x n=b n

Ta có thể viết lại hệ dưới dạng ma trận như sau:

Ax=b

Với A ∈ R n× nvà x ,b ∈ Rn.

Giả sử hệ có nghiệm duy nhất, với trường hợp A lớn và là ma trận thưa (sparse matrix, đa số các
phần tử là 0), việc đi giải tổng quát nghiệm:

x= A−1 b

Tốn rất nhiều sức mạnh tính toán và không hiệu quả, thay vào đó đối với tùy dạng ma trận A
khác nhau, ta có các phương pháp khác nhau để tìm nghiệm x hiệu quả hơn.

Phương pháp lặp Conjugate gradient được sử dụng để tìm nghiệm trong hệ trên khi A đối xứng
và xác định dương.

Viết lại vấn đề:


¿
Cho A đối xứng và xác định dương, cực tiểu x của hàm f:

1 T T
f ( x )= x Ax−b x
2

Thỏa mãn A x ¿=b

Định nghĩa: 2 vector u và v A-trực giao với nhau nếu:

⟨ u , v ⟩=uT Av =0

Định nghĩa: Tập hợp các vector { d 0 , … , d k } ⊂ R được gọi là A-trực giao (A-orthogonal) nếu:
n

T
d i A d j=0 ∀ i ≠ j

Định lý: Cho A xác định dương, nếu { d 0 , … , d k } A-trực giao, thì { d 0 , … , d k } độc lập tuyến tính.
1
Ta có thể viết lại hàm f dưới dạng: f ( x )= ⟨ x , x ⟩ −b x
T
2

Với A là ma trận Hesse.

Phương pháp lặp Conjugate gradient (CG):

Cho { d 0 , … , d n−1 } là n vector A-trực giao, ta có thể tách x ¿ dưới dạng:


n−1
x =∑ α i d i
¿

i=0

Nhân 2 vế với A, ta có:


n−1
A x ¿=∑ α i A d i
i=0

¿
Mà A x =b:
n−1
b=∑ α i A d i
i=0

T
Nhân 2 vế với d k bất kì, ta có:
n−1
d Tk b=∑ α i d Tk A d i
i=0

Mà ⟨ d i , d k ⟩ =0 , ∀ i ≠ k , nên ta có:
T T
d k b=α k d k A d k

Từ đó ta có thể tính được α k :


T
dk b
α k= T
dk A dk
n−1
Từ các α k , ta có thể tính trực tiếp nghiệm x ¿ sử dụng công thức: x =∑ α i d i
¿

i=0

Dễ thấy, việc đi tìm các vector { d 0 , … , d n−1 } từ A trước không hiệu quả, nên phương pháp CG tạo
ra các vector trên trong quá trình tìm x ¿, các bước của thuật toán như sau:

1) Dự đoán nghiệm x 0.
2) r 0 ≔b−A x 0
3) Nếu r 0 nhỏ tới hạn (ở mức chính xác chấp nhận được) thì trả x 0 là kết quả.
4) d 0 ≔r 0
5) k ≔0
6) Bắt đầu vòng lặp
r Tk r
7) α k ≔ T
dk A dk
8) x k+1 ≔ x k + α k d k
9) r k +1 ≔ r k −α k A d k
10) Nếu r k +1nhỏ tới hạn thì trả r k +1 là kết quả.
T
r k+1 + r k+1
11) β k ≔ T
rk rk
12) d k +1 ≔r k+1 + β k d k
13) k ≔k + 1
14) Quay lại bước bắt đầu vòng lặp
15) Trả x k+1 là kết quả.

Ta thấy, nếu không có sai số tính toán, phương pháp CG lặp không quá n bước, tuy
nhiên trong quá trình tính toán có sai số nên phương pháp CG chỉ ra được nghiệm gần
đúng.

You might also like