Skip to content

Coofzz/sci-comp-matrices

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Đồ Án 1: Ma Trận và Cơ Sở của Tính Toán Khoa Học

Thư mục part1/

  • 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.

Thư mục part2/

  • 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.

Thư mục part3/

  • 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.

Gốc dự án

  • 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.

Nhóm Thực Hiện (Nhóm 11 - CQ2024-3)

Cấu Trúc Thư Mục

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

Yêu Cầu Hệ Thống

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.txt

Lư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.


Hướng Dẫn Chạy Code

Phần 1: Phép Khử Gauss & Ứng dụng

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.ipynb bằ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

Phần 2: Phân Rã Ma Trận & Manim

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:
    manim -pqh manim_scene.py SVDAndDiagonalization
    Video đầu ra (.mp4)`.

Phần 3: Phương Pháp Lặp & Đánh Giá Hiệu Năng

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors