Xây dựng thuật toán cân bằng phương trình hóa học bằng ma trận tuyến tính
Trước hết ta cần biết PTHH và cân bằng phương trình hóa học (PTHH) là gì.
PTHH là một phương trình gồm có hai vế nối với nhau bởi dấu mũi tên từ trái sang phải, vế trái biểu diễn các chất tham gia phản ứng, vế phải biểu diễn các chất thu được sau phản ứng, tất cả các chất đều được viết bằng công thức hoá học của chúng và có những hệ số phù hợp đặt trước công thức hoá học đó để bảo đảm đúng định luật bảo toàn khối lượng, việc tìm ra các hệ số đó chính là quá trình cân bằng PTHH.
Ví dụ cho phương trình sau và yêu cầu cân bằng nó:
H2 + O2 = H2O (Mình sẽ dùng dấu '=' để thay cho ký tự '→')
Sau khi cân bằng PTHH hoàn chỉnh sẽ là:
2H2 + O2 = 2H2O
Vậy làm thế nào để cần bằng được như thế, có nhiều cách để cân bằng PTHH, một trong số cách đó là dùng đến ma trận tuyến tính (MTTT), tại sai PTHH lại liên quan đến MTTT.
Ý tưởng chính của bài này là sẽ đặt N biến là N hệ số trước N chất trước và sau phản ứng, từ M nguyên tố có trong phương trình ta đưa ra được M phương trình, từ đó ta có hệ phương trình (HPT) bậc nhất N ẩn, M phương trình:
Ví dụ như với phương trình H2 + O2 = H2O
Ta sẽ đặt biến x, y, z lần lượt là hệ số trước H2, O2, H2O
Lúc này phương trình sau khi cân bằng sẽ có dạng:
xH2 + yO2 = zH2O
Với nguyên tố H ta có phương trình: 2x - 2z = 0
Với nguyên tố O ta có phương trình: 2y - z = 0
Sẽ có một số phương trình vô nghĩa, ví dụ như hệ phương trình:
a + b - c = 0
a + 2b = 0
2a + 3b - c = 0
Ta thấy phương trình 3 là phương trình vô nghĩa vì nó có thể được tạo ra từ phương trình 1 và 2, ta cần loại tất cả những phương trình vô nghĩa.
Đầu tiên ta đưa HPT đó và MTTT, tiếp đó bằng cách áp dụng phương pháp tìm hạng của ma trận mà ta loại bỏ được những phương trình vô nghĩa, hạng phương trình đó chắc chắn sẽ là N - 1.
Cuối cùng ta sẽ có hệ phương trình N ẩn với N - 1 phương trình, áp dụng giải HPT bằng MTTT ta sẽ có được vô số nghiệm theo một biến t nào đó, bước cuối là chọn giá trị của biến t sao cho các hệ số là các số nguyên dương và ước chung lớn nhất của chúng là 1.
Với một số bạn chưa học qua đại số tuyến tính thì có thể thấy hơi khó hiểu, mình sẽ để source code của bài này ở dưới phần comment để các bạn tham khảo nha.
XEM THÊM ==> Hướng dẫn cài đặt chi tiết
Nguồn: Sharecode.vn
Tải về mà mở file *.cpp.
Nhớ là cách nhập phương trình phải đúng nha:
-
Mỗi nguyên tố phải viết hoa chữ đầu tiên, còn lại viết thường
-
Ví dụ: H2 + O2 = H2O, Cu + Cl2 = CuCl3