Bài giảng Phương pháp số - Bài 3: Ma trận và hệ phương trình tuyến tính - Nguyễn Thị Vinh

MỘT SỐ ĐỊNH LÍ VỀ NGHIỆM

Định lí 4.1: Hệ Ax = b có nhiều nhất một nghiệm (tức là,

nghiệm là duy nhất nếu tồn tại ) nếu và chỉ nếu hệ thuần nhất

tương ứng Ax = 0 chỉ có nghiệm “tầm thường” x= 0.

PHƯƠNG PHÁP SỐ-Bài 3 4

Định lí 4.2: Bất kì hệ PTTT thuần nhất nào với số phương

trình ít hơn số ẩn đều có nghiệm không tầm thường (khác 0)

Định lí 4.3 Nếu A là một ma trận cấp m × n và hệ Ax = b có

nghiệm với mọi vectơ m chiều b, thì m ≤ n.

Định lí 4.4 Cho A là ma trận cấp n × n. Các khẳng định sau

đây là tương đương:

(i) Hệ thuần nhất Ax = 0 chỉ có nghiệm tầm thường x = 0.

(ii) Với mọi vế phải b, hệ Ax = b luôn có nghiệm.

(iii) A là ma trận khả nghịch

pdf 44 trang kimcuc 7700
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phương pháp số - Bài 3: Ma trận và hệ phương trình tuyến tính - Nguyễn Thị Vinh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Phương pháp số - Bài 3: Ma trận và hệ phương trình tuyến tính - Nguyễn Thị Vinh

Bài giảng Phương pháp số - Bài 3: Ma trận và hệ phương trình tuyến tính - Nguyễn Thị Vinh
BÀI 3 
MA TRẬN VÀ HỆ 
PHƯƠNG TRÌNH TUYẾN TÍNH 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (1) 
1. HỆ PHƯƠNG 
TRÌNH TUYẾN TÍNH 
gồm m phương trình n 
ẩn là một hệ có dạng 
mnmm22m11m
2nn2222121
1nn1212111
bxa ...xaxa
............................................
bxa ... xaxa
bxa ...xaxa
 thì hệ trên còn có thể viết ở dạng vectơ cột 
 x1v1 +x2v2 ++ xnvn = b 
 hay dạng phương trình ma trận Ax = b 
PHƯƠNG PHÁP SỐ-Bài 3 2 
 và
x
x
x
x,
b
b
b
bn),1,2,...,(j,
a
.
a
a
v
n
2
1
m
2
1
mj
2j
1j
j

,
a...aa
............
a...aa
a...aa
A
mnm2m1
2n2221
1n1211
Nếu đặt 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (2) 
2. HỆ DẠNG TAM GIÁC TRÊN VÀ CÁCH GIẢI 
Hệ dạng tam giác trên là hệ có dạng a11x1 + a12x2 ++ a1nxn = b1 
trong đó a11, a22,,ann ≠ 0 a22x2 ++ a2nxn = b2 
Cách giải: giải ngược từ dưới lên annxn = bn 
void heTGiac(vector > a, vector &x) { 
 unsigned n = a.size(); 
 vector y(n, 0); // y co n phan tu 0 
 y[n-1] = a[n-1][n]/a[n-1][n-1]; 
 for (int i = n-2; i >= 0; i--) { 
 double tong = 0.; 
 for(unsigned j = i+1; j <= n-1; j++) 
 tong = tong + a[i][j] * y[j]; 
 y[i] = (a[i][n] - tong) / a[i][i]; 
 } 
 x = y; 
} PHƯƠNG PHÁP SỐ-Bài 3 3 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (3) 
3. MỘT SỐ ĐỊNH LÍ VỀ NGHIỆM 
Định lí 4.1: Hệ Ax = b có nhiều nhất một nghiệm (tức là, 
nghiệm là duy nhất nếu tồn tại ) nếu và chỉ nếu hệ thuần nhất 
tương ứng Ax = 0 chỉ có nghiệm “tầm thường” x= 0. 
PHƯƠNG PHÁP SỐ-Bài 3 4 
Định lí 4.2: Bất kì hệ PTTT thuần nhất nào với số phương 
trình ít hơn số ẩn đều có nghiệm không tầm thường (khác 0) 
Định lí 4.3 Nếu A là một ma trận cấp m × n và hệ Ax = b có 
nghiệm với mọi vectơ m chiều b, thì m ≤ n.. 
Định lí 4.4 Cho A là ma trận cấp n × n. Các khẳng định sau 
đây là tương đương: 
 (i) Hệ thuần nhất Ax = 0 chỉ có nghiệm tầm thường x = 0. 
 (ii) Với mọi vế phải b, hệ Ax = b luôn có nghiệm. 
 (iii) A là ma trận khả nghịch 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (4) 
4. LỜI GIẢI BẰNG SỐ CỦA HỆ PTTT Ax = b 
Xét các hệ PTTT có số phương trình đúng bằng số ẩn. 
 Nếu A khả nghịch thì hệ có duy nhất nghiệm đối với mọi b 
Có hai loại phương pháp giải: 
PHƯƠNG PHÁP SỐ-Bài 3 5 
 Lặp: xuất phát với một xấp xỉ ban đầu và dùng một thuật 
toán đã được lựa chọn phù hợp, sẽ đưa ra các xấp xỉ liên tiếp 
ngày càng tốt hơn. 
 Chỉ nhận được nghiệm gần đúng. 
 Trực tiếp: là các phương pháp đưa ra nghiệm chính xác bởi 
một số hữu hạn các phép toán số học sơ cấp (khử Gauss). 
 Các phương pháp trực tiếp thực hiện trên máy tính thường 
không đưa đến các nghiệm chính xác do các sai số làm tròn. 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (5) 
5. CÁC PHÉP BIẾN ĐỔI TƯƠNG ĐƯƠNG HỆ PTTT 
Định lí 4.7 Cho Ax = b là hệ PTTT, các xử lí hệ này bằng các 
phép toán sau đây dẫn tới các hệ tương đương: 
 (i) Nhân một phương trình với một hằng số khác 0 
(ii) Cộng một phương trình đã nhân với một hằng số vào một 
phương trình khác 
(iii) Đổi chỗ hai phương trình 
Nhận xét: Nếu với k và i xác định mà akk ≠ 0 thì chúng ta có thể 
khử ẩn xk từ phương trình thứ i bất kì bằng cách cộng phương 
trình thứ k đã nhân với –(aik /akk) vào phương trình thứ i. Khi đó 
hệ phương trình hệ quả sau là tương đương với hệ ban đầu 
. 
bÃx
~
PHƯƠNG PHÁP SỐ-Bài 3 6 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (6) 
6. PHÉP KHỬ GAUSS: đưa hệ Ax = b, về hệ tam giác trên: 
Gọi W là ma trận cấp n x (n + 1) chứa ma trận vuông A ở n cột đầu và 
vectơ b ở cột cuối cùng. 
Với k = 1, , n–1 lặp các công việc: 
 Tìm hàng trụ i ≥ k gần hàng k nhất sao cho wik ≠ 0 
 Nếu không có hàng i như vậy thì dừng (A không khả nghịch) 
 Nếu tìm được hàng i, thì đổi chỗ hàng i với hàng k trụ wkk 
 Với i = k+1, ..., n, lặp các công việc sau (khử các pt dưới trụ) 
 mi = wik / wkk là hệ số nhân cho hàng i 
 Với j = k+1, , n+1, lặp các công việc sau (biến đổi hàng i) 
 wij = w ij – mi x wkj 
Nếu wnn = 0 thì dừng (A không khả nghịch) 
Nếu trái lại hệ tam giác trên Ux = y với 
và yj = wi,n+1 i = 1, , n 



ji0
jiw
u
ij
ij
PHƯƠNG PHÁP SỐ-Bài 3 7 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (7) 
6. PHÉP KHỬ GAUSS (tiếp) 
Ví dụ : Giải hệ PTTT sau: 2x – 3y = 3 
 4x – 5y + z = 7 
 2x – y – 3z = 5 
Giải: 
Bước 1: Dùng trụ đầu tiên của hệ để khử những hệ số bên dưới 
trụ đó: m2 = 4/2 = 2, m3 = 2/2 = 1 lấy pt 2 trừ đi 2 lần pt 1, và 
pt 3 trừ đi 1 lần pt 1 ta được hệ: 2x – 3y = 3 
 1 y + z = 1 
 2 y – 3z = 2 
Bước 2: Dùng trụ thứ hai để khử hệ số bên dưới nó: m3 = 2/1 = 2 
lấy pt 3 trừ đi 2 lần pt 2 ta được hệ 2x – 3y = 3 
 1y + z = 1 
 –5z = 0 
giải ngược từ dưới lên ta được: z = 0, y = 1, x = 3 
PHƯƠNG PHÁP SỐ-Bài 3 8 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (8) 
void giaiGauss(vector > a) { 
 unsigned i, j, k, n = a.size(); double t, m; 
 for (k = 0; k < n–1; k++) { // BUOC KHU XUOI HE TAM GIAC TREN 
 while (a[i] [k] == 0 && i < n) i++; // Tim hang i gan k nhat: a[i] [k]≠0 
 if (a[i] [k] != 0 && i != k) { 
 for (j = i; j <= n; j++) { // Doi cho hang i va hang k 
 t = a[i] [j]; a[i] [j] = a[k] [j]; a[k] [j] = t; 
 } 
 } 
 else if(a[i] [k] == 0) { // Ma tran A suy bien 
 cout<<"He khong co duy nhat nghiem"<< endl; 
 exit(1); 
 } 
 for (i = k+1; i <= a.size()–1; i++) { // Tao ma tran dang tam giac tren 
 m = a[i] [k] / a[k] [k]; 
 for (j = k+1; j <= a.size(); j++) a[i] [j] = a[i] [j] – m * a[k] [j]; 
 } } // BUOC QUET NGUOC - GIAI HE TAM GIAC TREN 
} Độ phức tạp thời gian của thuật toán là O(n3) 
PHƯƠNG PHÁP SỐ-Bài 3 9 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (9) 
7. GIẢI HỆ PTTT DẠNG 3 ĐƯỜNG CHÉO 
Ma trận A = (aij) cấp n có dạng ba đường chéo nếu aij = 0 bất cứ 
khi nào |i – j| > 1. Hệ PTTT 3 đường chéo có dạng 
Ví dụ: hệ PTTT bên phải là 
hệ ba đường chéo 
nnn1nn
1nn1n1n1n2n1n
3433323
2322212
12111
bxdxl
bxuxdxl 
bxuxdxl
bxuxdxl
bxuxd

0
0
0
1
2100
1210
0121
0012
PHƯƠNG PHÁP SỐ-Bài 3 10 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (10) 
7. GIẢI HỆ PTTT DẠNG 3 ĐƯỜNG CHÉO 
Cho trước các hệ số li, di, ui và vế phải bi của hệ ba đường chéo 
 lixi–1 + dixi + uixi+1 = bi, i = 1 , . . . , n (với l1 = un = 0) 
Bước 1: Với k = 2, , n lặp các công việc sau đây 
 Nếu dk−1 = 0, đó là dấu hiệu sai và dừng 
 Trái lại, m = lk / dk–1 và tiếp tục tính 
 dk = dk – m*uk–1 
 bk = bk – m*bk–1 
 Nếu dn = 0, đó là dấu hiệu sai và dừng 
Trái lại: xn = bn / dn 
Bước 2: Với k = n–1, , 1 lặp các công việc sau 
Nhận xét: Độ phức tạp thời gian của thuật toán là O(n) 
k
1kkk
k
d
*xub
x 
PHƯƠNG PHÁP SỐ-Bài 3 11 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (11) 
7. GIẢI HỆ PTTT DẠNG 3 ĐƯỜNG CHÉO (tiếp) 
 for (unsigned k=1; k<n; k++) { 
 if (d[k-1] == 0) { cout << "Khong giai duoc" << endl; return; } 
 else { 
 double m = l[k] / d[k-1]; 
 d[k] = d[k] - m * u[k-1]; 
 b[k] = b[k] - m * b[k-1]; 
 } 
 } 
 If (d[n-1] == 0) { 
 cout << "He khong co nghiem duy nhat" << endl; return; } 
 else { 
 x[n-1] = b[n-1] / d[n-1]; 
 for(int i = n - 2; i >= 0; i--) x[i] = (b[i] - u[i] * x[i+1]) / d[i]; 
 } 
for (unsigned i = 0; i < n; i++) 
 cout << "x[" << i + 1 << "]=" << x[i] << endl; 
PHƯƠNG PHÁP SỐ-Bài 3 12 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (12) 
8. CHIẾN LƯỢC XOAY 
Nhận xét: 
Thuật toán khử Gauss đưa ra lời giải sai cho ví dụ sau 
0.0003 x1 + 1.566 x2 = 1.569 0.0003 x1 + 1.566 x2 = 1.569 
0.3454 x1 – 2.436 x2 = 1.018 – 1805.42 x2 = – 1807.46 
PHƯƠNG PHÁP SỐ-Bài 3 13 
Nếu lấy a12 làm trụ, ta có nghiệm đúng! 
Phân tích 
Trong bước khử Gauss đưa hệ Ax = b về hệ tam giác trên Ux = y 
sử dụng ma trận W cấp n × (n + 1) ta đã tìm các hàng trụ ở các 
bước lặp k = 1, , n–1 theo tiêu chí: 
hàng trụ i ≥ k gần hàng k nhất sao cho wik ≠ 0 
Hệ này có nghiệm đúng là x1= 10, x2 = 1, nhưng phép khử Gauss 
đưa ra x2 =1.001; x1 = 4.780 do trụ a11 = 0.0003 “rất nhỏ” so với a12
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (13) 
8. CHIẾN LƯỢC XOAY (tiếp) 
 Xoay theo tỉ lệ riêng: Ở lần lặp thứ k của phép khử Gauss 
• Tính “cỡ” di của hàng i của ma trận A, với i = k, . . . , n. 
• Chọn ra phương trình xoay là một trong các phương trình 
trong n – k ứng cử viên còn lại mà hệ số của xk có giá trị tuyệt đối 
lớn nhất so với cỡ của phương trình đó Trong thuật toán Gauss, 
điều này có nghĩa là số nguyên j được lựa chọn là số nguyên nằm 
giữa k và n (thường là số nhỏ nhất) sao cho tỉ lệ riêng 
|a|maxd ij
njk
i
PHƯƠNG PHÁP SỐ-Bài 3 14 
i
ik
j
jk
d
|w|
d
|w|
 với mọi i = k, , n 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (14) 
9. PHÂN TÍCH MA TRẬN THÀNH TÍCH − GIẢI HỆ PTTT 
Sử dụng phép khử Gauss, không đổi chỗ các hàng, giải hệ Ax = b 
Bước 1: Phân tích A = LU, với U là ma trận tam giác trên, L là ma 
trận tam giác dưới, chứa các hệ số nhân của lần lặp thứ k 
Bước 2: - Giải hệ tam giác dưới tìm được y 
 Vector p = (pi), i=1, ,n dùng để lưu thay đổi thứ tự của các hàng 
 - Giải hệ tam giác trên Ux = y tìm được x 
 ,n,ib
ip
1 ),( *bLy
 ki 
 k i 
kimw
l
ikik
ik
 ,
 ,
0
1
,
kink
aam
k
kk
k
ikik
;1,,1
,/
)1()1(

PHƯƠNG PHÁP SỐ-Bài 3 15 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (15) 
9. PHÂN TÍCH MA TRẬN THÀNH TÍCH − GIẢI HỆ PTTT 
THUẬT TOÁN THÉ XUÔI VÀ KHỬ NGƯỢC 
PHA 1: Biến đổi ma trận A ban đầu về tích các ma trận tam giác 
Với k = 1, , n–1 lặp các công việc: 
 Tìm hàng trụ i ≥ k gần hàng k nhất sao cho nó có tỉ lệ riêng lớn nhất 
 Nếu không có hàng i như vậy thì dừng (A không khả nghịch) 
 Trái lại, thì đổi chỗ 2 hàng i và k, nếu i ≠ k, lưu thứ tự p mới của b 
 Với i = k+1, ..., n, lặp các công việc (khử các phần tử dưới trụ): 
 m = aik / akk (= Giá trị cần khử ở hàng i / Điểm trụ ở hàng trụ k) 
 Với j = k+1, , n-1, lặp các công việc (giữ nguyên vế phải): 
 aij = aij – m x akj 
 Gán aik = m 
PHƯƠNG PHÁP SỐ-Bài 3 16 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (16) 
9. PHÂN TÍCH MA TRẬN THÀNH TÍCH - GiẢI HỆ PTTT 
THUẬT TOÁN THÉ XUÔI VÀ KHỬ NGƯỢC 
PHA 2: Giải hệ tam giác dưới Ly = b* tìm y (L có đường chéo =1) 
 Với k = 1, , n lặp lại việc gán 
 
1k
1j
jkjkpk
yaby
kk
n
1kj
jkjk
k
a
 xay
x

PHƯƠNG PHÁP SỐ-Bài 3 17 
 Giải hệ tam giác trên Ux = y tìm được x 
 Với k = n, n–1, , 1 lặp lại việc gán 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (17) 
9. PHÂN TÍCH MA TRẬN THÀNH TÍCH − GIẢI HỆ PTTT 
PHƯƠNG PHÁP SỐ-Bài 3 18 
Ví dụ 1: 
Giải hệ u + 2v = 5 
 4u + 9v = 21 
với hệ số nhân là 4, lưu trong L. Vế phải được dùng để tìm y 
Giải hệ tam giác dưới Ly = b: 
1
5
21
5
14
01
yy
Giải hệ tam giác trên Ux = y: 
1
3
1
5
10
21
xx
94
21
A
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (18) 
9. PHÂN TÍCH MA TRẬN THÀNH TÍCH − GIẢI HỆ PTTT 
Ví dụ 2: Giải hệ Ax = b PHA 1 
PHƯƠNG PHÁP SỐ-Bài 3 19 
13
01
001
L 
5
3
7
5-3-
-
154
 3- l rt hàng 2k
5
3
7
 -
154
l
l
5312
3032
7154
*A
2i
5
4
d
|a|
d
|a|
max
3
5
3
d
5312
7154
3032
Axét1k
2
1
2
1
2
1
2
1
2
1
2
1
32
2
7-
2
3
2
1
2
1
2
1
2
1
2
1
31
2
1
21
2
21
i
1i
3i1
 2 i u
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (19) 
9. PHÂN TÍCH MA TRẬN THÀNH TÍCH − GIẢI HỆ PTTT 
Ví dụ 2: PHA 2 
 Giải hệ Ly = b* với 
PHƯƠNG PHÁP SỐ-Bài 3 20 
 Giải hệ Ux = y với 
 
0
7
1
01
001
2
1 y 
5
3
7
3-
*b|L
2
1
2
1
 
0
1
3
500
0
154
 x 
0
7
 -y|U
2
1
2
1
2
1
-
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (20) 
9. PHÂN TÍCH MA TRẬN THÀNH TÍCH − GiẢI HỆ PTTT 
Nhận xét 
 1. Để nhận được nội dung cuối cùng của ma trận làm việc W, 
phép khử Gauss cần O(n3) phép cộng và bằng ấy phép nhân / 
chia. Thuật toán phân tích A = LU giải hệ PTTT chỉ cần n2 
phép nhân / chia và n(n–1) phép cộng 
 2. Thuật toán phân tích A = LU giải hệ PTTT có thể dùng giải 
hệ phương trình Ax = b với các vế phải khác nhau 
 3. Để đổi chỗ hàng i cho hàng j của ma trận W ta sử dụng phép 
nhân trái ma trận hoán vị Pij (nhận được từ ma trận đơn vị I 
cùng cấp, bằng cách đổi chỗ các hàng i và j của I) với W. Ví dụ 
 P32 
 và 
010
100
001
3
5
1
5
3
1
300
560
142
560
300
142
010
100
001
PHƯƠNG PHÁP SỐ-Bài 3 21 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (21) 
10. PHÉP LẶP ĐIỂM CỐ ĐỊNH GIẢI HỆ PTTT 
Nếu đặt 
 thì hệ Ax = b còn có thể viết ở dạng phương trình ma trận 
 b – Ax = 0 
Giả sử tồn tại ma trận C xấp xỉ ma trận nghich đảo A-1 theo nghĩa 
 ||I – CA|| < 1 
Khi đó b – Ax = 0  C(b – Ax) = 0  x = x + C(b – Ax) 
Chọn g(x) = x + C(b – Ax) = (I – CA)x + Cb 
x
x
x
x
b
b
b
b và
n
2
1
n
2
1

,,
a...aa
............
a...aa
a...aa
A
mnm2m1
2n2221
1n1211
PHƯƠNG PHÁP SỐ-Bài 3 22 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (22) 
10. PHÉP LẶP ĐIỂM CỐ ĐỊNH GIẢI HỆ PTTT 
Nhận xét: g(x) – g(y) = Cb + (I– CA)x – [Cb + (I – CA)y] 
 = (I – CA)(x – y) 
Vậy 
 ||g(x) – g(y)|| < ||I – CA|| ||x – y|| 
Chứng tỏ x-y được g co lại với tỉ lệ co K=||I – CA||< 1, phép lặp 
x(m +1) = x(m) + C(b – Ax(m)) = Cb + (I – CA)x(m) , m = 0, 1, 2, . 
khởi đầu từ bất kì x(0) nào, cũng sẽ hội tụ về nghiệm duy nhất ξ của 
PT Ax = b với sai số ở mỗi bước lặp giảm xuống ít nhất theo tỉ lệ 
 K = || I – CA||. 
 Tìm các ma trận C xấp xỉ ma trận nghịch đảo A-1? 
PHƯƠNG PHÁP SỐ-Bài 3 23 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (23) 
10. PHÉP LẶP ĐIỂM CỐ ĐỊNH GIẢI HỆ PTTT 
Thuật toán Phép Lặp Điểm Cố Định đối với các hệ PTTT 
Cho hệ phương trình tuyến tính Ax = b bậc n. 
1. Lấy một ma trận C bậc n thỏa mãn các điều kện 
(i) Đối với vectơ r cho trước, vectơ Cr tính được “một cách 
dễ dàng” 
(ii) Với một chuẩn ma trận nào đó, ||I – CA|| < 1 
2. Lấy một vectơ n chiều x(0), (chẳng hạn, x(0) = 0) 
Với m = 0, 1, 2, , cho đến khi thỏa mãn điều kiện lặp, tính 
 x(m+1) = x(m) + C(b – Ax(m)) 
PHƯƠNG PHÁP SỐ-Bài 3 24 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (23) 
10. PHÉP LẶP ĐIỂM CỐ ĐỊNH GIẢI HỆ PTTT 
Sự hội tụ và sai số: 
 ||x(m+1) - x(m|| = ||I – CA|| ||x(m) - x(m-1) || = K ||x(m) - x(m-1) || 
 == Kn ||x(1) - x(0) | → 0 khi m → ∞. 
 Bỏ qua sai số làm tròn, dãy x(0), x(1), x(2),  hội tụ về 
nghiệm đúng ξ của hệ PTTT đã cho. 
Với K = ||I – CA|| < 1 ta suy ra được sai số 
 ||x(m) – ξ|| = ||g(x(m-1))– g(ξ)|| ≤ K ||x(m-1) – ξ|| (*) 
Do ||x(m-1) – ξ|| ≤ ||x(m) – ξ|| + ||x(m-1) - x(m) || (**) 
→ ||x(m) – ξ|| ≤ ||x(m) – x(m –1)|| * K / (1-K) 
PHƯƠNG PHÁP SỐ-Bài 3 25 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (24) 
10. PHÉP LẶP ĐIỂM CỐ ĐỊNH GIẢI HỆ PTTT 
Tiêu chuẩn kết thúc lặp 
 (a): ||x(m) – x(m –1)|| < ε 
 hoặc (b): ||x(m) – x(m –1)|| / || x(m) || < ε với ε cho trước 
 hoặc (c): m > M với M cho trước 
Vì với K = ||I – CA|| < 1 yếu tố 
 ||x(m) – x(m –1)|| < ε 
bao hàm điều ||x(m) – ξ|| < ε 
Tiêu chuẩn cuối luôn có mặt trong bất cứ chương trình lặp 
nào để tránh việc lặp không kết thúc 
PHƯƠNG PHÁP SỐ-Bài 3 26 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (25) 
10. PHÉP LẶP ĐIỂM CỐ ĐỊNH GIẢI HỆ PTTT 
Phép lặp Jacobi: Giả sử A là ma trận chéo trội thực sự, 
nghĩa là với i = 1, 2, , n 
Gọi D = diag(a11, a22, . . . ,ann) là ma trận đường chéo của A. Xét 
Chứng tỏ D-1 là một nghịch đảo xấp xỉ của A. Sơ đồ lặp 
 x(m +1) = x(m) + D–l (b – Ax(m)) ↔ x(m +1) = A’x(m) + b’ 
và công thức lặp tính các thành phần của nghiệm, j= 1, , n 

ij
ijii ||a| |a

 


ij
iiji
ij
iiji
i
||a/||a||a/||a 11 maxmax||ADI|| 1
(*)a/xabx ii
ij
(m)
jjii
)(m
i 
 
 1
PHƯƠNG PHÁP SỐ-Bài 3 27 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (26) 
10. PHÉP LẶP ĐIỂM CỐ ĐINH GIẢI HỆ PTTT 
Thuật toán lặp Jacobi: từ công thức lặp (*) ta suy ra thuật toán sau 
1. Cấu tạo ma trận lặp A’ và b’ với 
2. Lặp x(m+1) = A’ x(m) + b’ với nghiệm xấp xỉ ban đầu x(0) tùy ý 
3. Điều kiện dừng: khi một trong 3 tiêu chuẩn (a), (b), (c) thỏa mãn . 
nn
n
nn
n
nn
n
n
n
a
b
a
b
a
b
a
a
a
a
a
a
a
a
a
a
a
a





22
2
11
1
21
22
2
22
21
11
1
11
12
0
0
0
 b' A'
PHƯƠNG PHÁP SỐ-Bài 3 28 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (27) 
 10x1 + x2 + x3 = 12 
 x1 + 10x2 + x3 = 12 
 x1 + x2 + 10x3 = 12 
với x(0) = 0 và ma trận lặp 
Dãy này hội tụ về nghiệm đúng 
[1 1 l]T. Do 
x1
(0) x2
(0) x3
(0) 
0 0 0 
1.2 1.2 1.2 
0.96 0.96 0.96 
1.008 1.008 1.008 
0.9984 0.9984 0.9984 
1.00032 1.00032 1.00032 
0.999936 0.999936 0.999936 
  0.000096ξxADI (6)1 ||||.max|||| 20101101i
2.1
2.1
2.1
01.01.0
1.001.0
1.01.00
 b' và A'
PHƯƠNG PHÁP SỐ-Bài 3 29 
10. PHÉP LẶP ĐIỂM CỐ ĐỊNH GIẢI HỆ PTTT 
Ví dụ, giải hệ sau bằng phép lặp Jacobi: 
NHẬN XÉT: Sai số này quá lớn vì thực ra ||ξ – x(6)|| = 0.000064 
void lapJacobi (double eps, vector > a) { 
 unsigned i, j, k , n = a.size(); 
 vector xt(n,0), xs(n,0); // Khởi tạo vector nghiệm 
 bool t; // Biến logic kiểm tra sai số 
 k = 1; // Biến đếm số lần lặp 
 do { 
 for(i = 0; i <= n –1; i++) { 
 xs[i] = 0; 
 for (j = 0; j <= n – 1; j++) 
 if (j != i) xs[i] = xs[i] – a[i][j] * xt[j]; 
 xs[i] = (xs[i] + a[i][n]) / a[i][i]; 
 } 
 // Kiểm tra đ/k dừng t 
 t = max {fabs(xs[i] – xt[i])} <= eps 
 } while ( ( !t ) && (k <=100) ); 
 } PHƯƠNG PHÁP SỐ-Bài 3 30 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (28) 
10. PHÉP LẶP ĐIỂM CỐ ĐỊNH GIẢI HỆ PTTT 
Phép lặp Gauss–Seidel, hay phương pháp thay thế liên tiếp: 
Phân tích A = L + D + U với L là ma trận tam giác dưới thực sự, U là 
ma trận tam giác trên thực sự. Không mất TQ, giả sử ma trận đường 
chéo D khả nghịch, tức là aii≠ 0 với mọi i. Chọn C = (L + D)
-1 làm 
nghịch đảo xấp xỉ của A (nới lỏng đ/k của C), nếu 
 Sơ đồ lặp x(m+1) = x(m) + ( L+ D)–1(b – Ax(m)) 
 . 
và công thức lặp tính các thành phần của nghiệm 
1||||||)(|| 11 ADI ADLI
bULxD )()()( mmm xx 11
n...,2,1,i,
a
bxaxa
x
ii
ij ij
i
(m)
jji
1)(m
j
1)(m
i 
 
ji
PHƯƠNG PHÁP SỐ-Bài 3 31 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (29) 
10. PHÉP LẶP ĐIỂM CỐ ĐỊNH GIẢI HỆ PTTT 
Thuật toán lặp Gauss–Seidel : 
1. Cấu tạo ma trận lặp A’ và vectơ b’ như trong phép lặp Jacobi, 
với giả thiết aii ≠ 0 với mọi i 
2. Chọn một nghiệm xấp xỉ ban đầu x(0) 
3. Với m = 1, 2, . . . , cho đến khi thỏa mãn, lặp các công việc sau: 
 Với i = 1, , n, lặp các công việc sau: 
Xét ví dụ giải hệ trên, ta có bảng nghiệm 
x1
(0) x2
(0) x3
(0) 
0 0 0 
1.2 1.08 0.972 
0.9948 1.0033 1.00019 
0.99965 1.000016 1.0080033 
i 
m 
j 
n 
i j 
ij 
m 
j 
i 
j 
ij 
m 
i b x a x a x ' ' ' 
) 1 ( 
1 
) ( 
1 
1 
) ( 
  
PHƯƠNG PHÁP SỐ-Bài 3 32 
NHẬN XÉT: Phép lặp Gauss-Seidel hội tụ nếu ma trận hệ số A là 
chéo trội / tam giác dưới / xác định dương. Khi đó nó có tốc độ 
hội tụ cao hơn phép lặp Jacobi 
void lapSeidel (double eps, vector > a) { 
 unsigned i, j, k, n = a.size(); 
 vector xt(n,0), xs(n,0); // Khởi tạo vector nghiệm 
 bool t; k = 1; // Đếm số lần lặp 
 do { 
 for (i = 0; i <= n –1; i++) { 
 xs[i] = 0; 
 for (j = 0; j <= n – 1; j++) { 
 if ( j < I ) xs[i] = xs[i] – a[i][j] * xs[j]; 
 else if ( j > I ) xs[i] = xs[i] – a[i][j] * xt[j]; 
 } 
 xs[i] = (xs[i] + a[i][n]) / b[i][i]; 
 } 
 // Kiểm tra đ/k dừng 
 t = max {fabs(xs[i] – xt[i])} <= eps 
 } while ( ( !t ) && (k <=100) ); 
 } PHƯƠNG PHÁP SỐ-Bài 3 33 
HỆ PHƯƠNG TRÌNH TUYẾN TÍNH (30) 
11. TỔNG KẾT CÁC PHƯƠNG PHÁP SỐ GiẢI HỆ PTTT 
Trực tiếp (khử Gauss và các cải thiện) : 
1. Là các phương pháp giải đúng không có sai số 
thường không đưa đến các nghiệm chính xác do mắc 
phải sai số làm tròn số khi tính toán. 
2. Áp dụng được cho mọi hệ vuông 
 Lặp: 
1. Là phương pháp lặp điểm cố định, xuất phát từ một xấp 
xỉ ban đầu và dùng một thuật toán lặp phù hợp, đưa ra 
các nghiệm xấp xỉ liên tiếp ngày càng tốt hơn. 
 2. (i) Tốc độ hội tụ phụ thuộc vào đoán nhận ban đầu x(0) 
 (ii) Phải xây dựng ma trận lặp thỏa mãn điều kiện hội tụ 
 Thường áp dụng cho các hệ PTTT có ma trận hệ số thưa 
hay có các tính chất đặc biệt như chéo trội, xác định dương,  
PHƯƠNG PHÁP SỐ-Bài 3 34 
PHƯƠNG PHÁP SỐ-Bài 3 
SỬ DỤNG SOLVER GIẢI HỆ PTTT (1) 
35 
PHƯƠNG PHÁP SỐ-Bài 3 
SỬ DỤNG SOLVER GIẢI HỆ PTTT (2) 
36 
PHƯƠNG PHÁP SỐ-Bài 3 
1. Nhập các giá trị đoán nhận ban đầu cho x1, x2, , xn 
2. Nhập các vế trái của các phương trình f1, f2, , fn 
vào các ô riêng được liên kết với giá trị của các ẩn 
3. Chọn công cụ Solver (Data Tab Solver) 
a. Đặt “Target Cell” cho ô có công thức = 0 
b. Chọn “Equal to Value of 0” 
c. Đối với “By Changing Cells,” trỏ tới các ô chứa giá 
trị ban đầu của x1, x2, , xn 
d. Thêm các ràng buộc (các phương trình) 
e. Nhấn nút “Options” , chọn “Assume linear model” 
f. Nhấn nút “Solve” 
SỬ DỤNG SOLVER GIẢI HỆ PTTT (3) 
37 
TÍNH MA TRẬN NGHỊCH ĐẢO (1) 
 Phương pháp Gauss-Jordan: để giải AA-1= I tìm A-1, ta tìm 
từng cột của A-1: 
Chi phí tính toán chỉ tăng gấp 3 do tất cả các hệ PTTT đều có chung ma 
trận vế phải A Ví dụ: 
 [A i1 i2 i3 ] = 
Đem 1/2 hàng 1 + hàng 2 
    IiiixxxAAA 321321
1 
100210
010121
001012
100210
01
2
1
1
2
3
0
001012
100
0110
001012
3
2
3
1
3
4
2
1
3
2
PHƯƠNG PHÁP SỐ-Bài 3 38 
Đem 2/3 hàng 2 + hàng 3 
TÍNH MA TRẬN NGHỊCH ĐẢO (2) 
Phương pháp Gauss-Jordan: tiếp tục phép khử - các hàng được 
cộng với các hàng trên chúng, để tạo ra các giá trị 0 trên các giá trị trụ 
(4/3 x hàng 3 + hàng2) 
2/3 x hàng 2 + hàng 1 
1
3
2
3
1
3
4
00
4
3
2
3
4
3
0
2
3
0
001012
1
3
2
3
1
3
4
00
4
3
2
3
4
3
0
2
3
0
2
1
1
2
3
002
4
3
2
1
4
1
100
2
1
1
2
1
010
4
1
2
1
4
3
001
 321 xxxI 
PHƯƠNG PHÁP SỐ-Bài 3 39 
chia mỗi hàng cho giá trị tại điểm trụ của nó 
PHƯƠNG PHÁP SỐ-Bài 3 
SỬ DỤNG HÀM MINVERSE TÌM A-1 
CHÚ Ý: Công thức phải được nhập như công 
thức mảng: 
 1. Chọn mảng các ô chứa A-1. 
 2. Nhập hàm MINVERSE tính A-1 với các tham 
số là các ô chứa ma trận A 
 3. Nhấn phím F2, rồi nhấn tiếp 
CTRL+SHIFT+ENTER 
40 
PHƯƠNG PHÁP SỐ-Bài 3 
SỬ DỤNG HÀM MINVERSE TÌM A-1 
41 
TÍNH ĐỊNH THỨC 
Phương pháp khử Gauss: tiến hành phép khử xuôi ma trận A để 
đưa nó về dạng tam giác trên U Khi đó det(A) = (−1)nu11u22  unn 
Ví dụ 
105
2
1
41A
00
0
154
0
-0
154
3-1-2
03-2
154
3-1-2
15-4
032
2
7-
2
3
2
1
2
1
)( )()det(
5-
- 
æi_hµng§ A
æi_hµng§
2
1
2
1 ** *
1 
PHƯƠNG PHÁP SỐ-Bài 3 42 
n là số lần 
đổi hàng 
PHƯƠNG PHÁP SỐ-Bài 3 
SỬ DỤNG HÀM MDETERM TÌM det(A) 
43 
 BÀI TẬP 
1. Bài tập tính toán: 
 4.2-5, 4.2-6, 4.2-8, 4.3-4, 4.4-2, 4.4-4, 5.3-7 
2. Bài tập lập trình: 
Viết các hàm trong C++ giải hệ Ax = b bằng phép 
khử Gauss có sử dụng chiến lược xoay theo tỉ lệ 
riêng và phân tích ma trận vuông thành tích các 
ma trận tam giác; giải hệ có ma trận chéo trội 
bằng các phép lặp Jacobi và Gauss-Seidel. 
 PHƯƠNG PHÁP SỐ-Bài 3 44 

File đính kèm:

  • pdfbai_giang_phuong_phap_so_bai_3_ma_tran_va_he_phuong_trinh_tu.pdf