Khử Gaussian
Giới thiệu
Khử Gauss (Gauss–Jordan elimination) là thuật toán kinh điển để giải hệ phương trình tuyến tính, có vai trò quan trọng trong toán học hiện đại và là nội dung cốt lõi của đại số tuyến tính.
Ngoài giải hệ, khử Gauss còn dùng để tính định thức, tìm nghịch đảo ma trận và nhiều ứng dụng kỹ thuật khác.
Phương pháp khử và tư tưởng khử Gauss
Định nghĩa
Phương pháp khử là biểu diễn ẩn của một phương trình bằng biểu thức chứa ẩn khác rồi thế vào phương trình khác để loại bỏ ẩn; hoặc nhân một phương trình với hằng số rồi cộng vào phương trình khác để loại bỏ ẩn. Phương pháp này chủ yếu dùng cho hệ hai ẩn.
Giải thích
Ví dụ 1: dùng khử để giải hệ hai ẩn:
Giải: cộng hai phương trình, khử \(y\):
Suy ra:
Thay vào phương trình thứ hai:
Cốt lõi lý thuyết của phương pháp khử
- Hoán đổi hai phương trình, nghiệm không đổi;
- Nhân một phương trình với số khác 0, nghiệm không đổi;
- Cộng một phương trình với bội của phương trình khác, nghiệm không đổi.
Khái niệm tư tưởng khử Gauss
Gauss phân tích và rút ra:
- Trong khử, chỉ hệ số của biến tham gia tính toán và thay đổi;
- Các biến không tham gia tính toán và không đổi;
- Có thể dùng vị trí hệ số để biểu diễn biến, bỏ qua ký hiệu biến;
- Việc rút gọn biến trong tính toán không đổi nghiệm.
Từ đó, Gauss đề xuất khử Gauss: biến đổi ma trận mở rộng về dạng bậc thang rút gọn bằng phép biến đổi sơ cấp, rồi gán giá trị cho ẩn tự do theo tiêu chí độc lập tuyến tính, cuối cùng viết nghiệm tổng quát.
Phương pháp 5 bước khử Gauss
Giải thích
Sau khi đưa ma trận mở rộng về dạng rút gọn, việc gán ẩn tự do cần kiến thức độc lập tuyến tính và có yếu tố kinh nghiệm, nên khó học. Vì vậy chia thành 5 bước:
- Biến đổi sơ cấp đưa ma trận mở rộng về dạng rút gọn;
- Khôi phục hệ phương trình;
- Giải ẩn đầu tiên của mỗi phương trình;
- Bổ sung ẩn tự do;
- Viết nghiệm tổng quát dạng vectơ.
Minh họa bằng ví dụ.
Quá trình
Ví dụ 2: giải hệ:
Biến đổi ma trận mở rộng về dạng rút gọn
Ma trận mở rộng là ghép ma trận hệ số \(A\) với cột hằng \(b\) thành \((A | b)\). Dùng phép biến đổi sơ cấp đưa về dạng rút gọn.
Đưa về dạng bậc thang
Đưa về dạng rút gọn
Khôi phục hệ phương trình
Giải thích
Khôi phục hệ là viết lại dạng phương trình từ ma trận rút gọn, gán lại vị trí hệ số cho biến, biến dấu gạch đứng thành dấu bằng.
Giải ẩn đầu tiên
Giải thích
Với mỗi phương trình, giải ẩn xuất hiện đầu tiên theo các ẩn còn lại, ở đây là \(x_1\) và \(x_3\).
Bổ sung ẩn tự do
Giải thích
Sau bước 3, thấy \(x_2\) và \(x_4\) là ẩn tự do không bị ràng buộc, nên bổ sung \(x_2=x_2, x_4=x_4\) cho dễ hiểu.
Viết nghiệm tổng quát dạng vectơ
Trong đó \(C_1\) và \(C_2\) là hằng số tùy ý.
Giải thích
Từ bước 4, viết nghiệm dưới dạng tổ hợp tuyến tính; vì \(x_2, x_4\) tự do nên đặt bằng hằng tùy ý \(C_1, C_2\).
Tính định thức
Giải thích
Định thức của ma trận vuông \(N \times N\) có thể hiểu là thể tích có hướng của khối tạo bởi các vectơ cột.
Ví dụ:
Công thức định thức:
Trong đó \(S_n\) là tập hoán vị độ dài \(n\), \(\sigma\) là một hoán vị. Nếu \(\sigma\) có số nghịch thế chẵn thì \(\operatorname{sgn}(\sigma)=1\), lẻ thì \(\operatorname{sgn}(\sigma)=−1\).
Từ góc nhìn thể tích:
- Chuyển vị ma trận, định thức không đổi;
- Hoán đổi hai hàng (cột), định thức đổi dấu;
- Cộng/trừ một hàng (cột) với hàng (cột) khác, định thức không đổi;
- Nhân một hàng (cột) với \(k\), định thức nhân \(k\).
Vì vậy, sau khi khử Gauss, ta được ma trận đường chéo, định thức là tích các phần tử đường chéo; dấu phụ thuộc vào số lần đổi hàng. Do đó có thể tính định thức trong \(O(n^3)\).
Nếu tại một cột không tìm thấy phần tử khác 0, thuật toán dừng và trả 0.
Cài đặt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
Tìm nghịch đảo ma trận
Với ma trận vuông \(A\), nếu tồn tại \(A^{-1}\) sao cho \(A \times A^{-1} = A^{-1} \times A = I\) thì \(A\) khả nghịch, \(A^{-1}\) là nghịch đảo của \(A\).
Cho ma trận \(A\) bậc \(n\), tìm nghịch đảo như sau:
- Lập ma trận \(n \times 2n\) là \((A, I_n)\);
- Dùng khử Gauss đưa về dạng rút gọn \((I_n, A^{-1})\), khi đó \(A^{-1}\) là nghịch đảo. Nếu nửa trái không phải \(I_n\) thì \(A\) không khả nghịch.
Chứng minh đúng cần nhiều kiến thức đại số tuyến tính, không trình bày ở đây.
Khử Gauss cho hệ phương trình XOR
Hệ XOR có dạng:
trong đó \(\oplus\) là XOR bit (tức xor hoặc ^ trong C++), và các hệ số/hằng đều là \(0\) hoặc \(1\).
Vì XOR thỏa giao hoán và kết hợp, có thể khử tương tự Gauss. Lưu ý dùng “khử XOR” thay vì cộng/trừ, và không cần nhân/chia vì hệ số chỉ là \(0\) hoặc \(1\).
Ma trận mở rộng là ma trận \(01\), nên có thể dùng std::bitset để tối ưu, đưa độ phức tạp xuống \(O(\dfrac{n^2m}{\omega})\), với \(n\) là số ẩn, \(m\) là số phương trình, \(\omega\) thường là \(32\) (phụ thuộc máy).
Mã tham khảo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Bài tập
Last updated on this page:, Update history
Found an error? Want to help improve? Edit this page on GitHub!
Contributors to this page:StudyingFather, CCXXXI, Chrogeek, ChungZH, countercurrent-time, Early0v0, Enter-tainer, GavinZhengOI, Great-designer, H-J-Granger, henrytbtrue, HeRaNO, huayucaiji, iamtwz, Ir1d, ksyx, MegaOwIer, NachtgeistW, P-Y-Y, qwqAutomaton, shuzhouliu, shuzhouliu-bot, Siger Young, sshwy, SukkaW, Tiphereth-A, tsentau, WhenMelancholy, Xeonacid, Yukimaikoriya, Zhoier, zyj-111, qute-firefly-26710-zjyjoe-lg-592080
All content on this page is provided under the terms of the CC BY-SA 4.0 and SATA license, additional terms may apply