1. Trang chủ
  2. » Luận Văn - Báo Cáo

Luận văn phương pháp lặp giải hệ phương tuyến tính số chiếu lớn

30 1K 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 110,78 KB

Nội dung

Một số phương pháp lặp thuộc lớp này phải kể đến là: phương pháp gradient liên hợp của Hestenes và Stiefel 1952 cho hệ tuyến tính có ma trận A đối xứng xác định dương; phương pháp GMRE

Trang 1

Luận văn được hoàn thành tại trường Đại học Sư phạm Hà Nội 2 dưới sự

hướng dẫn của TS Hà Bình Minh.

Tôi xin cam đoan luận văn là công trình nghiên cứu của riêng tôi

Trong quá trình nghiên cứu và hoàn thành luận văn tôi đã kế thừa những thành quả khoa học của các nhà khoa học và đồng nghiệp với sự trân trọng và biết ơn

Tôi xin cam đoan rằng các thông tin trích dẫn trong luận văn đã được chỉ

rõ nguồn gốc

Hà Nội, ngày 09 tháng 06 năm 2015 Tác giả

Lời cam đoan

Vũ Thị Vui

Luận văn được hoàn thành tại trường Đại học Sư phạm Hà Nội 2 dưới sự

hướng dẫn của thầy giáo TS Hà Bình Minh Sự giúp đỡ và hướng dẫn tận

tình, nghiêm túc của thầy trong suốt quá trình thực hiện luận văn này đã giúp tôi trưởng thành hơn rất nhiều trong cách tiếp cận một vấn đề mới Tôi xin bày tỏ lòng biết ơn, lòng kính trọng sâu sắc nhất đối với thầy

Tôi xin trân trọng cảm ơn Ban giám hiệu trường Đại học Sư phạm Hà Nội

2, phòng Sau đại học, các thầy cô giáo trong nhà trường đã giúp đỡ, tạo điều kiện thuận lợi cho tôi trong suốt quá trình học tập

Tôi xin chân thành cảm ơn gia đình, người thân, bạn bè đã giúp đỡ, động viên và tạo điều kiện thuận lợi để tôi hoàn thành khóa học Thạc sĩ cũng như hoàn thành luận văn này

Hà Nội, ngày 09 tháng 06 năm 2015 Tác giả

Lời cảm ơn

Hà Nội - 2015 Người hướng dẫn khoa học: TS Hà Bình Minh

LUẬN VĂN THẠC SĨ TOÁN HỌC

VŨ THỊ VUI

PHƯƠNG PHÁP LẶP GIẢI HỆ PHƯƠNG TRÌNH TUYEN TÍNH

SỐ CHIỀU LỚN

Chuyên ngành: Toán giải tích Mã số: 60 46 01 02

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC sư PHẠM HÀ NỘI 2

Hà Nội - 2015 LUẬN VĂN THẠC SĨ TOÁN HỌC

PHƯƠNG PHÁP LẶP GIẢI HỆ PHƯƠNG TRÌNH TUYEN TÍNH

Giới thiệu phương pháp

Điều kiện hội tụ

Ví dụ số minh họa

Giới thiệu phương pháp

Điều kiện hội tụ

Phương pháp Gradient liên hợp

Giới thiệu phương pháp

688

9 1 1 1 4

1416

1 6

2122

2 2 2

Trang 2

được khai triển dưới dạng sau:

nghiệm của hệ Ax — b trong không gian Krylov k chiều Một số phương pháp

lặp thuộc lớp này phải kể đến là: phương pháp gradient liên hợp của Hestenes

và Stiefel (1952) cho hệ tuyến tính có ma trận A đối xứng xác định dương;

phương pháp GMRES của Saad và Schultz (1986); phương pháp QMR của Freund và Nachtigal (1991); và phương pháp Bi-CGSTAB của van der Vorst (1992)

2. Mục đích và nhiệm vụ nghiên cứu

Khảo cứu một số phương pháp lặp dùng để giải hệ phương trình tuyến tính cỡ

lớn, và áp dụng để nghiệm số cho phương trình đạo hàm riêng

3. Đối tượng và phạm vi nghiền cứu

Hệ phương trình tuyến tính cỡ lớn, phương trình vi phân đạo hàm riêng

4. Phương pháp nghiên cứu

Sử dụng các phương pháp giải số, ngôn ngữ lập trình MATLAB,

5. Đóng góp mới của đề tài

Áp dụng phương pháp lặp để giải hệ phương trình tuyến tính cõ lớn, sau đó lập trình, thực hiện các phương pháp này bằng phần mềm MATLAB

1. Lí do chọn đề tài

Nhiều bài toán trong thực tế đòi hỏi phải giải hệ phương trình tuyến tính

cỡ lớn có dạng Ax — b, trong đó A là ma trận có số chiều lớn và thưa (tức là

chỉ có một số ít các phần tử khác 0) Chẳng hạn, những hệ phương trình này xuất hiện ta giải bài toán biên của phương trình đạo hàm riêng bằng các phương pháp rời rạc hóa, như phương pháp sai phân hoặc phương pháp phần

tử hữu hạn Những phương pháp cổ điển để giải hệ phương trình tuyến tính, chẳng hạn như phương pháp khử Gauss, sẽ rất khó có thể áp dụng để giải những hệ này Lý do là vì phương pháp khử Gauss được áp dụng cho ma trận đặc và khi áp dụng cho ma trận thưa sẽ làm cho số phép toán trở nên rất lớn, không thể thực hiện nổi đối với máy tính thông thường Hơn nữa, số lượng bộ nhớ sử dụng cho phương pháp Gauss cũng trở nên rất lớn

Với những lý do nêu trên, phương pháp lặp giải hệ phương trình tuyến tính

cỡ lớn được nghiên cứu từ lâu Theo phương pháp này, bắt đầu từ một vector khởi tạo ta sẽ sinh ra một dãy các vector

*;!>

hội tụ đến nghiệm X Quá trình sinh vector từ vector sử dụng

phép nhân ma trận Ả với một vector nào đó Phép nhân này rất tiết kiệm do Ả

là ma trận thưa và chỉ cần số ít bộ nhớ để lưu trữ Hai phương pháp lặp được biết đến nhiều nhất theo hướng này là phương pháp Jacobi và phương pháp Gauss-Seidel

Bên cạnh đó, một lớp các phương pháp lặp được phát triển trong thời gian gần đây là lớp các phương pháp Krylov Đặc trưng của lớp các phương pháp này quá trình lặp sẽ hội tụ đến nghiệm chính xác sau một số hữu hạn bước

lặp Cụ thể, quá trình lặp sẽ cho nghiệm x'^ sẽ là xấp xỉ tốt nhất

3941

43 44 45 Tài liệu tham khảo Phụ lục

Để sử dụng phương pháp lặp Jacobi, ta giả thiết rằng ma trận A có tính chéo

trội, được định nghĩa như sau:

Định nghĩa 1.1.1 (Ma trận chéo trội) Ma trận A được gọi là có tính chéo trội nếu giá trị tuyệt đối của các phần tử nằm trên đường chéo chính

lớn hơn tổng các giá trị tuyệt đối của các phần còn ỉại nằm trên cùng hàng, tức là

n kj| < \au\, ( i - l , n ) (1.2)

Trang 3

i 0 6 ' 12 ' bi n X 1

9 1

x 2 — &

21

Ý tưởng của phương pháp lặp Jacobi là tính một dãy các vector

í \ / >? x < n f , dựa trên phương trình (1.3), cụ thế như

sau:

Phương pháp lặp Jacobi:

Đầu vào: Ma trận A, b.

Đầu ra: Dãy , x'^ n \

Với B , g xác định bởi (1.3), ta chọn vector khởi tạo và xác định các phần tử

của dãy , x^ n \ theo các bước sau:

Trang 4

1.1.2 Điều kiện hội tụ

Một phép lặp Jacobi chỉ đem lại hiệu quả khi vector x' y k ^ hội tụ đến nghiệm chính xác X* Điều kiện để một dãy sinh bởi phép lặp Jacobi hội

tụ được nêu trong Định lý 1.1.1

Định lí 1.1.1 Xét phương trình X — Bx H- g và vector khởi tạo

cho truớc Nếu \B\ < 1 với một chuẩn nào đó, thì sẽ tồn tại X* sao cho

xr ’ — lim x'^ là nghiệm chính xác của (1.1) Hơn nữa, vector x'^ trong

phép lặp

X X

;i)Í

2

Bx[ữ) ■+■ g,

— Bx^ -Ỷ- g,

x,k) _ Bx[k-i)+g^

sẽ hội tụ tới nghiệm duy nhất X* Hơn nữa, sai số giữa X ^ và nghiệm

chính xác X* được đánh giá bằng các công thức sau:

Trang 5

Các ma trận tham số của hệ Ax — b tương ứng là:

Điều kiện cần để Phương pháp lặp Jacobi hội tụ là Ả là ma trận chéo trội.

nên theo Định lý 1.1.1 phép lặp Jacobi là hội tụ Như vậy,

-Ta sẽ áp dụng định lý trên cho phép lặp Jacobi Trong phép lặp Jacobi,

ma trận B được cho bởi

®1 nữll

• Bước 1: Kiểm tra tính chéo trội của ma trận A Dê thấy A là ma trận

chéo trọi vì I — 4 ^ |ữl21 “1“ 1^131 — 0.32, |«221 > |ữ2l| “1“ |®231 và

ịữssị > |«3l| ■+-

Trang 6

Vậy điều kiện hội tụ được thỏa mãn.

Bước ị: Chọn vector khởi tạo x'^ = 2 3 5 , rồi tính x^ l \x^ 2 \ theo Phương pháp lặp Jacobi, ta được bảng kết quả sau:

X

2

35

X u>

1.923.195.04

X (.2) X Í.3)

1.90943.19445.0446

1.9092283.1949485.044794

Đánh giá sai số: giả sử ta xem X k 3 ^ là nghiệm gần đúng cần tìm, ta sẽ đánh giá sai số giữa X < K - 3 ^ và nghiệm chính xác x r ' theo công thức (1.4)

Trang 7

B 2 — ipij) 1 là ma trận tam giác trên với bij —

Bị — [pijYi là ma trận tam giác dưới với bịj —

X n

Tương tự như phương pháp lặp Jacobi, ta biến đổi hệ (1.1) về dạng sau:

1.2.1 Giới thiệu phương pháp

1.2. Phương pháp Gauss - Seidel

j ^ i,

j > i.

Trang 8

Y tưởng của phương pháp lặp Gauss-Seidel là tính dãy các vector

x'^, x^\ , x'^ n \ , dựa trên phương trình (1.7), như sau:

Phương pháp lặp Gauss-Seidel:

Đầu vào: Ma trận A, b.

Đầu ra: Dãy x'^, x ^ , , X' k Ti )

5 • • • •

Với Bị, B 2 , g cho bởi (1.7), ta chọn vector khởi tạo và xác định

các phần tử tiếp theo của dãy như sau:

Bước 1: Tính — BịX^ + B2X^ -\- g.

Bước 2: Tính — BịX^ + B2X^ -\- g.

Trong bước thứ k, do Bi là ma trận tam giác dưới nên phép nhân BịX^

chỉ liên quan đến k — 1 phần tử từ đến Như vậy, phương pháp

Gauss - Seidel cải tiến phương pháp Jacobi bằng cách dùng ngay những kết quả vừa tính được cho các thành phần tiếp theo

1.2.2 Điều kiện hội tụ

Phương pháp Gauss-Seidel sẽ hội tụ khi ma trận A là chéo trội Ta có

, i ^ j.

^ Oỉịị

Trang 9

235

1.923.19245.044648

1.9093489

3.194952

1.9091993.1949643

theo Phương pháp lặp Gauss-Seidel, ta được bảng kết quả sau:

2 Phương pháp Gauss - Seidel tiết kiệm bộ nhớ, vì các thành phần vừa tính được, được sử dụng ngay để tính các thành phần tiếp theo

Các ma trận tham số của hệ Ax — b tương ứng là:

11 Nhận xét:

rp 'l$ĩ$n

j>i

Suy ra

xỉ - 2 biẢxf^1} - xd+-Xì biÁx'f

~x^-j<,i j>i xi

Để đánh giá sai số, ta xét hiệu

Áp dụng Định lý 1.1.1 suy ra phương trình (1.3) có nghiệm X* duy nhất.

Trang 10

TÍ.O) íl) T T T í.m)

tiến tới nghiệm chính xác x'^ — X T A~ l b sau nhiều nhất m bước, với m ^ n.

Các Phương pháp Krylov: sử dụng phép lặp để sinh ra dãy thỏa mãn

Krylov được định nghĩa như sau: K k [r' K ữ \ A) spanLr^, Ar^ ữ \ , A k ~ 1 r^\, Ả :

— 1 , 2 ,

Trang 11

15 Một số đặc điểm của các phương pháp Krylov:

• Do có sai số luôn xảy ra trong quá trình tính toán (làm tròn số thực, phép nhân, chia số thực, ) nên trên thực tế các phương pháp này không thể kết thúc sau hữu hạn bước Điều này dẫn đến câu hỏi về tốc độ hội tụ của phương pháp là bao nhiêu

• Khối lượng tính toán trên mỗi phép lặp tương đương với khối lượng tính toán của phép nhân ma trận với một vector

Các phương pháp chỉ thích hợp khi A là ma trận thưa (là ma trận có nhiều phần tử bằng 0), không thích hợp nếu A là ma trận đặc (là ma trận

có ít phần tử bằng 0)

Các phương pháp Krylov được trình bày trong chương này bao gồm:

1) Phương pháp Gradient liên hợp: Phương pháp này được đề xuất bởi Hestenes và Stiefel (1952) cho hệ với ma trận Ả xác định dương Ta gọi

\ Z \ A VZ T Az là chuẩn sinh ra từ ma trận xác định dương A Theo phương pháp này, ở bước thứ k ta sẽ đi tìm x'^ sao cho:

xlk) ^xlo) +Kk{r[0\A),

\x^ — X*\A — min

\Z—X*\A-Z'^x'^+Kit (r'-0\j4)

Chúng tôi sẽ mô tả phương pháp này trong mục 2.2

2) Phương pháp GMRES (generalized minimum residual method): Phương pháp GMRES được áp dụng trong trường hợp ma trận A không suy biến Theo phương pháp này, ở bước thứ k ta sẽ đi tìm sao cho:

x{k) tx{0) +Kk{r^ữ\A),

\b — Ax^ | 2 — min |6 — Azị2.

Phương pháp GMRES sẽ được mô tả trong mục 2^

Trang 12

3) Phương pháp QMR ( quasi-minimal residual method): Phương pháp QMR được áp dụng trong trường hợp ma trận A thưa (tức là ma trận có

nhiều phần tử bằng 0) Phương pháp này dựa trên thuật toán song trực

giao hóa Lanczos để xây dựng cơ sở không trực giao ,v'^ cho không gian Krylov Kỵ[r^ ữ \ A) k chiều Sử dụng hệ cơ sở này, ta có thể tính toán xấp xỉ x'^ t -|- Kk[r^\ A) với phần

dư nhỏ nhất Phương pháp QMR sẽ được mô tả trong mục 2A

4) Phương pháp Bi-CGSTAB: Phương pháp Bi-CGSTAB được áp dụng trong trường hợp ma trận A là tùy ý Phương pháp này được đề xuất

bởi Van der Vost (1992) và được mô tả trong mục 2.5

2.2. Phương pháp Gradient liên hợp

Xét hệ phương trình tuyến tính

với Ả là ma trận thực, xác định dương, n X, n chiều, b e Rn và nghiệm chính xác X* — A~ l b.

Ta ký hiệu \ Z \ A VZ T Az là chuẩn sinh ra từ ma trận A.

Xét phiếm hàm toàn phương F :R n —> ]R có dạng sau:

Trang 13

Do đó tốc độ hội tụ của phương pháp gradient liên hợp được xác định bởi

y/c Nếu y/c càng nhỏ thì phương pháp sẽ hội tụ càng nhanh và ngược lại nếu -ực càng lớn thì phương pháp sẽ hội tụ càng chậm.

—- với Xị, Xn là các giá trị riêng

Vậy {AỊỊ-1-1) đúng và kết quả là phép quy nạp [A m ) đúng.

Do [_A m ) (2), [4) ta có 7^ 0 với mọi i < 771, và các vector này hình thành hệ trực giao trong №n Kết quả là, 777, ^ n Từ p [ - m ^ — 0 và [_A m ) (2), ta có _

Như vậy, Định lý|2.2.l| khẳng định rằng phương pháp Gradient liên hợp sẽ

tính ra được nghiệm chính xác của phương trình Ax — b sau nhiều nhất n

bước

Phương pháp gradient liên hợp hội tụ sau n bước lặp Phương pháp này thường được sử dụng cho bài toán lớn, do đó không thể chạy hết được n bước

lặp Trong thực tế, khi tính toán thì thường tích tụ sai số, phần dư sẽ mất dần

độ chính xác và các vector tìm thấy làm mất tính trực giao của Ả Do đó, cần

phải đánh giá tốc độ hội tụ của phương pháp, ta có Định lý sau:

Định lí 2.2.2 Giả sử phương pháp gradient liên hợp áp dụng cho hệ Ax

— b đối xứng, xác định dương Ta đánh giá tốc độ hội tụ của phương

pháp bằng ước lượng sau:

b-Ax^l) = b - A{x[k) + akP[k))

- b - Ax^k) - akAp[k} = r[k} - akAp[k}

Định lí 2.2.1 Giả sử A là ma trận thực, xác định dĩiơng n X n chiều và

6 t M n, Gọi x <K °^ b- Rn ỉà vector khởi tạo và 171, m ^ n là một số nguyên

không âm nhỏ nhất, sao cho pKm^ — 0 Các vector x'<k\p^k\ r^k\ k ^

m, được sinh bởi thuật toán Gradient liên hợp có các tính chất sau:

xác của phương trình Ax — b sau nhiều nhất n bước.

(1) [r^) T p^ — 0 với 0 ^ ỉ < j ^ k,

(2)(r^)Tr^ > 0 với 0 ^ i < k, [r^) T p^ — ( r ^ )Tr ^ v ớ i 0 ^ ỉ ^ k, ( Aỵ ) ( 3 ) [p^) T Ap^ — 0 v ớ i 0 ^ i < j ^ k,

Theo thuật toán, tại mỗi bước chỉ có 4 vector x^ k \r^ k \p^ k \ và Ap ^ cần

được lưu trữ Công việc tính toán chủ yếu tại mỗi bước lặp chỉ là một phép

nhân ma trận Ap^ k \

Thuật toán Gradient liên hợp:

Đầu vào: Ma trận A, b.

Đầu ra: Dãy , x f ợ i\

Khởi tạo: Chọn £ Mn, và đặt b — Ax^ ữ K

Cho k - 0 , 1 , :

Bước 1: N ế u p ^ — 0 , t ậ p 777, k và dừng lại: x'^ là nghiệm của Ax

— 6 Nếu không thì, chuyển sang Bước 2

Phương pháp Gradient liên hợp khác với “Phương pháp giảm nhanh nhất”

ở chỗ: tại bước —> việc tính toán sẽ được cực tiểu hóatrên không gian (Ả; -|- 1) chiều, thay vì chỉ cực tiểu hóa trên không gian 1

chiều như “Phương pháp giảm nhanh nhất”:

nên thuật toán dừng lại và X —

3 5 6 là nghiệm của hệ phương trình

là of A~ l b Phương pháp GMRES (generalized minimum residual

method) do Saad và Schultz đưa ra năm 1986, với ý tưởng như sau: bắt

đầu với giá trị Ỷ 1 x r ~ bất kỳ và phần dư r^ b — Ax ^ 7^ 0, phương pháp GMRES sẽ sinh ra dãy các x'^ hội tụ đến X* dựa trên tính chất sau:

x'^k} ^ x^} + Kk(r^0\A),

(2 4)

|ò — Ax ^ |2 — min{ |6 — Au |2 I u t +- K k {r K °\ A)\.

Điểm nổi bật của phương pháp GMRES là nó sử dụng hệ các vector trực

chuẩn Ẹ R n là cở sở của không gian K k [r^\ Á), k ^ m :

span^1^, v ^2\ , v^ị — K k (r^°\ Á), 1 ^ k ^ ra.

Ta xác định hệ các vector trực chuẩn v'^ như sau: vector là vector

chuẩn hóa của vector

Bước 3: Tính w'^ u — XÌ *_1 hịkv^ và hỵ^i ỵ I w'y^ | 2

Bước Ậ: Nếu hỵ- 1-1 k — 0, tậpm k và dừnglại.

Nếu không thì, chuyển sang Bước 5

Bước 5: tính yl[-kJr1^ ĩv^/hk-ị- Ifc.

n

Như vậy, thuật toán Arnoldi sau k bước sẽ cho kết quả là một ma trận

X k chiều v k [ VU) v(2) V t.k) J , k ^ m có tính chất sau: các vector cột

trực giao (tức là VỵVỵ — lỵ) và tạo thành một cơ sở của K k {r^ ữ \ A) Ngoài

ra, thuật toán Arnoldi còn cho kết quả là ma trận Hessenberg [k + 1) K k

chiều:

&k

-hu h*

2i

00

hi 2

h-0

hi

k h-

2 k

1 $ k $ m.

Ta gọi Hỵ là ma trận con k X k chiều của Hỵ bằng cách xóa đi hàng cuối

Trang 14

VI - 0.5774

0.5774 _ 0.5774 _

, Н г = 0.333

30.4714

Đầu ra: Dãy x'^ 2 \ , x y - n \ .

Khởi tạo: Cho 7^ 0, đặt /3 |n0^ |2, v'^ : — r^°V/ổ

Cho k = 1,2, :

Bước 1: Thực hiện thuật toán Arnoldi tính Vỵ,Hỵ,Hỵ.

Bước 2: Tìm vector là nghiệm của bài toán bình phương tối thiểu

x ' \ k ) _ x № - ị - V ỵ y K k \ Từ đó ta có thuật toán GMRES như sau:

Để xác định nghiệm của ( 2 4 ) , ta sử dụng các ma trận Hỵ , Hỵ và V ỵ trong

thuật toán Arnoldi Nghiệm X ^ phải nằm trong không gian x'^ -|- Kk{r' K °\ A), do đó x'^ có thể được viết dưới dạng x'^ — x'^ + Vỵý^ với y{k) ^ rpa

x^c (Ịịnh vector sao cho

0.5774 0.4082 0.70710.3333 0.4714 00.4714 2.1667 0.8660

với A là ma trận thực không suy biến và có thể không đối xứng, với

nghiệm là X* A~ l b Phương pháp QMR (quasi minimal residual method) do

Freund và Nachtigal đưa ra năm 1991 với ý tưởng tương tự như phương pháp

GMRES: bắt đầu với giá trị 7^ x r ~ bất kỳ và phần dư — b — Ax ^ 7^ 0, phương pháp QMR sẽ sinh ra dãy các x'^ hội tụ đến x r dựa trên tính chất sau:

x [k) Ẹ ^,(0) _|_ K k ( r w A)

(2.9)

|& — Ax^ |2 — min{ |ö — Au |2 I u e x'^ + Kỵ[r^\ A)}.

Tương tự như phương pháp GMRES, phương pháp QMR sử dụng hệ các

vector trực chuẩn v'^ ^ Kn là cở sở của không gian Kỵ[r' K ữ \ i4), k ^ m :

spanLĩ/1*, v^ 2 \ , — K k {r ữ , A), 1 ^ k ^ ra.

Tuy nhiên, điểm khác biệt của phương pháp QMR so với phương pháp GMRES là sử dụng thuật toán song trực giao Lanczos thay vì thuật toán trực giao hóa Arnoldi Thuật toán song trực giao hóa Lanczos bắt đầu với vector

„;■) :-r-0>//3, /3:- p>|a,

và bổ sung thêm một vector khác tùy ý là w ^ t với |2 — 1(thường chọn v'^) Thuật toán Lanczos sẽ tạo ra hai dãy các

Trang 15

spanL?/1^, , i;^] — Kkiv'^jA), spanL«/1^, , w'^\ — K k {w^\ A T).

Thuật toán song trực giao hóa của Lanczos:

Bước 1: Tính ỗk {w^) T v < y - k \ Nếu ỗỵ — 0, tập 777, k — 1 và dừng lại.

— eỵWKk~l\

Bước 3: Tính pk+1 |ũ^+1)|2, ơk+1 \w^k^1}\2.

Nếu Pk+I — 0 hoặc ơk+1 — 0, tập m k và dừng lại

Nếu không thì, chuyển sang Bước 4

Ngày đăng: 15/08/2016, 21:00

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w