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ườ[r]
Trang 1BÀI 3
MA TRẬN VÀ HỆ PHƯƠNG TRÌNH TUYẾN TÍNH
Trang 2HỆ 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
m n
mm 2
2 m 1
1 m
2 n
n 2 2
22 1
21
1 n
n 1 2
12 1
11
b x
a
x a x a
b x a
x a x a b x a
x a x a 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 A x = b PHƯƠNG PHÁP SỐ-Bài 3 2 và x x x x , b b b b n), 1,2, ,
(j , a a a v n 2 1 m 2 1 mj 2j 1j j , a
a a
a
a a a
a a
A
m n
m 2
m 1
2n 22
21
1n 12
11
Nếu đặt
Trang 311 1 12 2 1n n 1
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<vector<double> > a, vector<double> &x) {
unsigned n = a.size();
vector<double> 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;
Trang 4HỆ 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
Đị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
Trang 54 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:
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
Trang 6HỆ 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à a kk ≠ 0 thì chúng ta có thể
khử ẩn x k 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 –(a ik /a kk ) 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
Trang 7Gọ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ụ w kk
Với i = k+1, , n, lặp các công việc sau (khử các pt dưới trụ)
m i = w ik / w kk 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)
w ij = w ij – m i x w kj
Nếu trái lại hệ tam giác trên Ux = y với
j i
0
j i
w
Trang 8HỆ 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
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
Trang 9for (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(n
Trang 10HỆ 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
n n
n 1
n n
1 n n
1 n 1
n 1 n 2
n 1 n
3 4
3 3
3 2
3
2 3
2 2
2 1
2
1 2
1 1
1
b x
d x
l
b x
u x
d x
l
b x
u x
d x
l
b x
u x
d x
l
b x
u x
d
0 0 0
1 2 1
0 0
1 2
1 0
0 1
2 1
0 0
1 2