- determinant.py: Cài đặt hàm tính định thức ma trận vuông bằng phương pháp khử Gauss có chọn pivot.
- gaussian.py: Cài đặt các hàm khử Gauss, thế ngược, giải hệ phương trình tuyến tính, sử dụng kiểu số Fraction để bảo toàn chính xác số học.
- inverse.py: Cài đặt hàm tính ma trận nghịch đảo bằng phương pháp Gauss-Jordan.
- rank_basis.py: Cài đặt hàm tính hạng, cơ sở cột, cơ sở hàng và không gian không của ma trận.
- test.py: Chứa các test case kiểm thử các hàm khử Gauss, giải hệ phương trình, in ra kết quả từng bước.
- part1_demo.ipynb: Notebook minh họa từng bước thực hiện các thuật toán phần 1, có giải thích và ví dụ cụ thể.
- part1_verification.ipynb: Notebook kiểm chứng kết quả các hàm tự cài đặt (determinant, inverse, rank_and_basis) với kết quả từ numpy, scipy.
- decomposition.py: Cài đặt các hàm phân rã ma trận, đặc biệt là SVD (Singular Value Decomposition) sử dụng thuật toán Jacobi cho ma trận đối xứng.
- diagonalization.py: Cài đặt thuật toán Jacobi để tìm trị riêng, vector riêng cho ma trận đối xứng thực.
- manim_scene.py: Script sử dụng thư viện Manim để trực quan hóa quá trình phân rã SVD và chéo hóa ma trận, xuất video minh họa.
- test_jacobi.py: Kiểm thử thuật toán Jacobi với nhiều loại ma trận đối xứng khác nhau, in ra trị riêng, vector riêng.
- test_svd.py: Kiểm thử thuật toán SVD với nhiều loại ma trận, in ra kết quả phân rã.
- SVDAndDiagonalization.mp4: Video xuất ra từ manim_scene.py minh họa trực quan SVD và chéo hóa.
- analysis.ipynb: Notebook thực nghiệm, phân tích hiệu năng và độ ổn định số học của các phương pháp giải hệ phương trình (Gauss, SVD, Jacobi, Gauss-Seidel) trên các loại ma trận khác nhau.
- benchmark.py: Định nghĩa hàm benchmark_solver để đo thời gian, sai số của các solver, dùng cho phân tích hiệu năng.
- matrix_gen.py: Cung cấp các hàm sinh ma trận đặc biệt: SPD, Hilbert, chéo trội, phục vụ cho kiểm thử và benchmark.
- solvers.py: Cài đặt các phương pháp giải hệ phương trình lặp: Jacobi, Gauss-Seidel, kiểm tra điều kiện hội tụ, validate input.
- test.py: Chứa các test case kiểm thử các solver Jacobi, Gauss-Seidel, SVD, in ra kết quả, kiểm tra nghiệm.
- README.md: Hướng dẫn tổng quan, cấu trúc thư mục, cách cài đặt, chạy code, tài liệu tham khảo.
- requirements.txt: Danh sách các thư viện Python cần thiết để chạy toàn bộ dự án.
Dự án được tổ chức theo cấu trúc sau:
Group_11/
|-- README.md
|-- requirements.txt
|-- report/
| |-- report.pdf
| |-- report.tex
|-- part1/
| |-- gaussian.py
| |-- determinant.py
| |-- inverse.py
| |-- rank_basis.py
| |-- test.py
| |-- part1_demo.ipynb
|-- part2/
| |-- decomposition.py
| |-- diagonalization.py
| |-- test_jacobi.py
| |-- test_svd.py
| |-- manim_scene.py
| |-- demo_video.mp4
|-- part3/
| |-- solvers.py
| |-- benchmark.py
| |-- test_gauss_seidel.py
| |-- analysis.ipynb
Dự án sử dụng Python 3.10+. Khuyến khích tạo môi trường ảo (virtual environment) trước khi cài đặt các thư viện.
Cài đặt các thư viện cần thiết thông qua file requirements.txt:
pip install -r requirements.txtLưu ý: Thư viện manim yêu cầu cài đặt thêm một số dependencies hệ thống (như FFmpeg, LaTeX) để render video. Vui lòng tham khảo tài liệu chính thức của Manim nếu gặp lỗi.
Tất cả thuật toán ở phần này được cài đặt bằng Python thuần (kết hợp fractions để bảo toàn độ chính xác số học). NumPy chỉ được dùng ở hàm verify_solution để kiểm chứng.
-
Chạy Notebook Demo: Mở file
part1/part1_demo.ipynbbằng Jupyter Notebook/Lab hoặc VSCode để xem từng bước thực thi và kết quả kiểm thử. -
Chạy file Test tổng hợp:
cd part1 python test.py
Cài đặt thuật toán Jacobi để tìm vector riêng/trị riêng và phân rã giá trị kỳ dị (SVD).
- Kiểm thử thuật toán SVD và Jacobi:
cd part2 python test_jacobi.py python test_svd.py - Render video Manim:
Để tạo video trực quan hóa phép SVD và Chéo hóa ma trận, chạy lệnh sau:
Video đầu ra (
manim -pqh manim_scene.py SVDAndDiagonalization
.mp4)`.
So sánh phương pháp trực tiếp (Khử Gauss, SVD) và phương pháp lặp (Jacobi, Gauss-Seidel) trên hai loại ma trận: SPD (well-conditioned) và Hilbert (ill-conditioned).
-
Chạy kiểm thử Gauss-Seidel/Jacobi:
cd part3 python test_gauss_seidel.py -
Xem phân tích đồ thị Log-Log:
Mở và chạy toàn bộ cells trong file
part3/analysis.ipynb. File này sẽ tự động sinh dữ liệu, benchmark thời gian, tính toán số điều kiện$\kappa(A)$ , đo lường sai số và vẽ biểu đồ so sánh.