Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 5

LAB 1: Gauss Elimination and Back Substitution

Algorithm with Python


Subject: Applied Mathematics and Statistics

I. Introduction
1. Student information

Full name Student ID Class


Phạm Nguyễn Khánh Minh
20120117 2022/2

2. Problem statement
Giải hệ phương trình tuyến tính bằng phương pháp Gauss Elimination và
Back Substitution.

3. Problem description
Cho hệ phương trình tuyến tính Ax = b với A là ma trận vuông, b là
vector cột. Hãy giải hệ phương trình tuyến tính trên bằng phương pháp
Gauss Elimination và Back Substitution.

II. Gauss Elimination implementation


1. Định nghĩa hàm
gauss_elimination def
gauss_elimination(A):
Hàm tìm ma trận bậc thang của ma trận mở rộng của hệ
phương trình tuyến tính, hàm nhận tham số đầu vào là ma trận
A và trả về ma trận bậc thang của A.

1. **Khởi tạo biến**: Đầu tiên, khởi tạo hai biến `pivot_row`
và `pivot_cols` để theo dõi vị trí hàng và cột của phần tử pivot
đang xét.

2. **Lặp qua các hàng và cột**: Sử dụng vòng lặp `while`,


thuật toán sẽ lặp qua từng hàng và cột trong ma trận.

3. **Tìm phần tử pivot**: Trong mỗi vòng lặp, thuật toán sẽ


tìm phần tử pivot, tức là phần tử không bằng 0 đầu tiên trong
cột hiện tại, bắt đầu từ hàng `pivot_row`.

1
4. **Hoán vị hàng**: Nếu phần tử pivot không nằm ở hàng
`pivot_row`, thuật toán sẽ hoán vị hai hàng để đưa phần tử
pivot lớn nhất về hàng `pivot_row`.

5. **Kiểm tra phần tử pivot**: Nếu phần tử pivot tại hàng


`pivot_row` và cột `pivot_cols` bằng 0, thuật toán sẽ tăng
`pivot_cols` lên 1 và tiếp tục với cột tiếp theo.

6. **Biến đổi ma trận**: Nếu phần tử pivot không bằng 0, thuật


toán sẽ sử dụng phần tử pivot để biến đổi các phần tử dưới nó
thành 0 thông qua phép loại trừ Gauss.

7. **Cập nhật pivot_row và pivot_cols**: Sau khi biến đổi


xong, thuật toán sẽ tăng `pivot_row` và `pivot_cols` lên 1 để
di chuyển đến hàng và cột tiếp theo.

8. **Trả về kết quả**: Khi đã duyệt qua tất cả các hàng và cột,
thuật toán sẽ trả về ma trận đã biến đổi.

III. Back Substitution implementation


1. Định nghĩa hàm back_substitution(A):
def back_substitution(A):
Hàm giải hệ phương trình tuyến tính bằng phương pháp giải
ngược. Hàm nhận tham số đầu vào là ma trận A và trả về
nghiệm của hệ phương trình tuyến tính.
đứng ngay sau biến cần giải đến phần tử sau cùng của
hàng đó. Khi tính một biến, ta đã giải được các biến phía sau
nó nên có thể sử dụng nó để tính nghiệm của biến hiện tại. Cuối
cùng, trả về mảng x chứa các nghiệm của A.

1. Hàm is_leading_row(A: np.array, row: int, col: int) ->


bool:

Mục đích: Hàm này được sử dụng để kiểm tra xem một hàng có
phải là hàng dẫn đầu không.
Hoạt động:
Tính tổng các phần tử bên trái của cột dẫn đầu của hàng cần
kiểm tra bằng cách sử dụng phương thức sum() của thư viện
NumPy.
So sánh tổng với 0. Nếu bằng 0, hàm trả về True để chỉ ra rằng
hàng này là hàng dẫn đầu. Ngược lại, trả về False.

Hàm is_zero_matrix(A: np.array) -> bool:

Mục đích: Hàm này được sử dụng để kiểm tra xem ma trận có
phải là ma trận 0 không.
Hoạt động:
Duyệt qua từng phần tử của ma trận.

2
Nếu tìm thấy một phần tử khác 0, hàm trả về False để chỉ ra
rằng ma trận không phải là ma trận 0.
Nếu không tìm thấy phần tử khác 0 sau khi duyệt hết, hàm trả
về True để chỉ ra rằng ma trận là ma trận 0.

2. Hàm extract_matrix(A: np.array) -> np.array:

Mục đích: Hàm này được sử dụng để trích xuất ma trận các hệ
số từ ma trận mở rộng.
Hoạt động:
Chuyển vị của ma trận mở rộng để thuận tiện cho việc loại bỏ
cột vế phải.
Loại bỏ cột cuối cùng (cột vế phải).
Chuyển vị trở lại để có kết quả cuối cùng.

3. back_substitution(A) -> np.array: Phương pháp thế ngược để


giải hệ phương trình tuyến tính.
3.1.Xác định số hàng và cột của ma trận.
3.2.Khởi tạo một mảng x chứa các nghiệm, ban đầu là
một mảng các số 0 có kích thước bằng với số cột của ma trận.
3.3 Bắt đầu từ hàng cuối cùng và đi lên trên.
3.4.Đối với mỗi hàng, tìm cột dẫn đầu đầu tiên không
chứa số 0, nếu có.
3.5.Nếu không tìm thấy cột dẫn đầu, di chuyển sang
hàng tiếp theo.
3.6. Nếu tìm thấy cột dẫn đầu, tính nghiệm tương ứng
cho biến của cột đó.
3.7. Sử dụng phương pháp thế ngược để cập nhật các giá
trị của các biến còn lại dựa trên nghiệm của biến dẫn đầu.
3.8. Nếu ma trận là ma trận 0, trả về một mảng chứa
các biến tự do.
3.9. Trả về một mảng numpy chứa nghiệm của hệ
phương trình.

IV. Dùng thư viện:


1. Import thư viện NumPy: Đầu tiên, chúng ta cần import thư viện
NumPy.

2. Sử dụng hàm np.linalg.solve(): Thư viện NumPy cung cấp hàm


np.linalg.solve() để giải hệ phương trình tuyến tính. Chúng ta sẽ sử dụng hàm
này để tìm các nghiệm của hệ phương trình.

3. Gọi hàm np.linalg.solve() và truyền ma trận A và vectơ b vào đó:


Trong trường hợp này, ma trận A đã cho không chứa vectơ kết quả. Chúng ta
3
chỉ cần truyền ma trận A vào hàm np.linalg.solve().

4. Xem kết quả: Hàm np.linalg.solve() sẽ trả về các nghiệm của hệ


phương trình, và sau đó chúng ta có thể in kết quả ra màn hình.

V. Tham Khảo:
Slide bài giảng toán ứng dụng và thống kê HCMUS
Thuật toán: https://www.youtube.com/watch?v=eDb6iugi6Uk
Cài đặt: ý tưởng sinh viên đã trao đổi trên moodle, https://www.youtube.com/watch?
v=gAmMxdI0EKs&t=403s

4
5

You might also like