Sử dụng SymPy giải các phương trình sau

Viết hàm giải phương trình bậc nhất và phương trình bậc hai với tham số là các hệ số của phương trình.

Kiến thức cần có

  • Hàm input() và hàm print()
  • Cấu trúc lặp trong Python
  • Cấu trúc rẽ nhánh trong Python
  • Biến và kiểu dữ liệu
  • Hàm trong Python
  • Xử lý ngoại lệ (Exception Handling)

Định dạng đầu vào:

Gồm hai dòng:

  • Dòng đầu tiên chứa số 1 hoặc 2 tương ứng với:
    • Chức năng 1: giải phương trình bậc nhất
    • Chức năng 2: giải phương trình bậc hai
  • Dòng thứ hai chứa hệ số tùy thuộc vào chức năng được chọn ở dòng 1:
    • Chức năng 1: chứa hai số a, b lần lượt là hệ số của phương trình ax + b = 0, các hệ số cách nhau bởi khoảng trắng.
    • Chức năng 2: chứa ba số a, b, c lần lượt là hệ số của phương trình ax2 + bx + c = 0, các hệ số cách nhau bởi khoảng trắng.

Định dạng đầu ra:

Gồm nhiều dòng hiển thị tùy theo các trường hợp như sau:

Nếu phương trình vô nghiệm: Phuong trinh vo nghiem

Nếu phương trình có vô số nghiệm: Phuong trinh co vo so nghiem

Nếu phương trình có một nghiệm duy nhất: Phuong trinh co mot nghiem duy nhat: x = {x1}

Nếu phương trình có nghiệm kép: Phuong trinh co nghiem kep: x1 = x2 = {x1}

Nếu phương trình có hai nghiem phan biet: Phuong trinh co hai nghiem phan biet: x1 = {x1}

                                                                                                                                                               x2 = {x2}

  • Với {x1}, {x2} là các nghiệm của phương trình

Lưu ý:

Nếu dòng đầu tiên khác ‘1’ và ‘2’ thì xuất thông báo: Vui long chon mot trong hai chuc nang:

                                                                                                  1. Giai phuong trinh bac nhat

                                                                                                  2. Giai phuong trinh bac hai

Nếu input nằm ngoài định dạng đầu vào thì xuất thông báo: Dinh dang dau vao khong hop le!

Ví dụ

2 3 5 8 Phuong trinh vo nghiem 1 0 0 Phuong trinh co vo so nghiem 1 3 6.8 Phuong trinh co mot nghiem duy nhat: x = -2.2666666666666666 2 4 4 1 Phuong trinh co nghiem kep: x1 = x2 = -0.5 2 -5 6.7 9 Phuong trinh co hai nghiem phan biet la: x1 = -0.8296332885075604 x2 = 2.1696332885075607 2 kteam 7 8.5  Dinh dang dau vao khong hop le! 4 1 7 8.5  Vui long chon mot trong hai chuc nang: 1. Giai phuong trinh bac nhat 2. Giai phuong trinh bac hai

Gợi ý

  • Định nghĩa hàm giải phương trình bậc nhất và giải phương trình bậc hai. Lưu ý trong hàm giải phương trình bậc hai có gọi hàm giải phương trình bậc nhất
  • Thuật toán:
  • Giải phương trình bậc nhất:
    • Phương trình vô số nghiệm khi: hệ số a, b đều bằng 0
    • Phương trình vô nghiệm khi: hệ số a bằng 0 và b khác 0
    • Các trường hợp còn lại phương trình có nghiệm duy nhất
  • Giải phương trình bậc hai:
    • Phương trình vô số nghiệm khi: hệ số a, b, c đều bằng 0
    • Phương trình vô nghiệm khi: hệ số a, b bằng 0, c khác 0 và trường hợp delta nhỏ hơn 0
    • Phương trình có nghiệm kép khi delta bằng 0
    • Phương trình có hai nghiệm phân biệt khi delta lớn hơn 0
  • Sử dụng cấu trúc Xử lý ngoại lệ để xử lý các trường hợp gây ra lỗi
  • Đặt toàn bộ chương trình trong khối try.
  • Dùng hàm input() để đọc dữ liệu dòng đầu tiên
  • Dùng cấu trúc rẽ nhánh if … else để nhận biết người dùng chọn chứ năng nào
    • Dùng hàm map(), float và hàm split() để nhận và ép kiểu dữ liệu các hệ số của phương trình
    • Tùy vào chức năng được chọn, gọi hàm tương ứng để giải quyết bài toán
    • Nếu dòng đầu tiên của input khác ‘1’ và ‘2’ thì xuất thông báo lỗi
  • Lỗi sẽ phát sinh ở lệnh ép kiểu nếu định dạng đầu vào không hợp lệ. Dùng lệnh except để bắt lỗi:
  • Dùng hàm print() hiển thị thông báo lỗi ra màn hình

Code mẫu

import math #Dinh nghia ham def giai_pt_bac_nhat(a, b): if a == 0: if b == 0: return "Phuong trinh co vo so nghiem" return "Phuong trinh vo nghiem" return "Phuong trinh co mot nghiem duy nhat: \nx = {}".format(-b / a) def giai_pt_bac_hai(a, b, c): if a == 0: return giai_pt_bac_nhat(b, c) #Tinh delta delta = b * b - 4 * a * c #Kiem tra cac truong hop cua delta if delta > 0: x1 = float((-b + math.sqrt(delta)) / (2 * a)) x2 = float((-b - math.sqrt(delta)) / (2 * a)) return "Phuong trinh co hai nghiem phan biet la: \nx1 = {} \nx2 = {}".format(x1, x2) if delta == 0: x = -b / (2 * a) return "Phuong trinh co nghiem kep: \nx1 = x2 = {}".format(x) return "Phuong trinh vo nghiem" #Khoi lenh co the phat sinh loi try: #Doc dong du lieu dau tien chucNang = input() #Truong hop 1: Giai phuong trinh bac nhat if chucNang == '1': #Doc dong du lieu thu hai #Ep kieu du lieu sang so thuc a, b = map(float, input().split()) #Goi ham giai phuong trinh bac nhat print(giai_pt_bac_nhat(a, b)) #Truong hop 2: Giai phuong trinh bac hai elif chucNang == '2': a, b, c = map(float, input().split()) print(giai_pt_bac_hai(a, b, c)) else: print("Vui long chon mot trong hai chuc nang:\n1. Giai phuong trinh bac nhat\n2. Giai phuong trinh bac hai") #Khoi lenh duoc thuc thi khi loi xay ra except: print("Dinh dang dau vao khong hop le!")

Kết luận

Trong bài này, Kteam đã hướng dẫn bạn cách viết hàm giải phương trình bậc nhất và phương trình bậc hai với tham số là các hệ số của phương trình. Thêm bài giải của bạn vào phần bình luận để được Kteam review code và fix lỗi (nếu có) trong livestream của khóa học này.

Ở bài tiếp theo, chúng ta sẽ cũng nhau học cách VIẾT HÀM HIỂN THỊ TÍCH CỦA TỔNG CHỮ SỐ CHẴN VÀ TỔNG CHỮ SỐ LẺ CỦA MỘT SỐ TỰ NHIÊN 

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bạn để phát triển bài viết tốt hơn. Đừng quên " Luyện tập - Thử Thách - Không ngại khó!"

Tải xuống

Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới!

Sử dụng SymPy giải các phương trình sau

Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

ĐẠI HỌC QUỐC GIA TP.HCMTRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TINĐỒ ÁN MÔN HỌC GVHD: PGS. TS. Đỗ Văn NhơnHVTH: Lê Thành NguyênMSHV: CH1301102TP HCM, Tháng 03 năm 2014MÔN: BIỂU DIỄN TRI THỨC VÀ SUY LUẬNTÌM HIỂU LẬP TRÌNH SYBOLICBỘ THƯ VIỆN SYMPY TRONG TÍNH TOÁN ĐẠI SỐ TRÊN MÁY TÍNHMỤC LỤC2DANH MỤC HÌNH, BẢNG3GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành NguyênPHẦN 1: MỞ ĐẦUNgày nay, với sự phổ biến của máy tính điện tử cùng với sự bùng nổ về thông tinvà nhu cầu khai thác dữ liệu ngày càng cao trong nhiều lĩnh vực khác nhau như: kinh tế,xã hội, y tế, giáo dục, … Đồng thời, nhu cầu về các hệ thống có khả năng tổng hợp thôngtin và vận dụng sự hiểu biết của con người đưa ra những chỉ định, khuyến cáo, … đãđược đặt ra với sự ra đời của công nghệ tri thức. Từ đó, công nghệ tri thức được nghiên cứu nhằm đưa ra các mô hình tích lũy trithức (mô hình biểu diễn tri thức) của chuyên gia trên máy tính dưới dạng tập luật, tạo racác hệ thống có khả năng tư duy và suy nghĩ như con người, có khả năng suy luận đưa ranhững khuyến cáo, giải pháp tối ưu cho người dùng, đồng thời giúp con người nâng caobản thân. Việc lập luận trên dữ liệu và tri thức đã và đang mang lại cho con người nhữngthành công ngày càng tăng trong việc xử lý dữ liệu. Hiện nay, các ngành công nghệ trithức đang phát triển mạnh mẽ với nhiều hệ thống phục vụ trong nhiều cơ quan, xí nghiệp.Song song đó, các phương pháp suy diễn đã được nghiên cứu nhằm đảm bảo khảnăng giải quyết vấn đề trên các mô hình biểu diễn tri thức. Cùng với sự phát triển của cácmô hình biểu diễn tri thức, các phương pháp suy diễn hiện rất đa dạng và phong phú vàhầu hết là ở dưới dạng mô hình hoặc giải thuật mô phỏng và được cụ thể hóa ứng với mỗitrường hợp ứng dụng thực tế. Hiện nay, nhu cầu xây dựng các hệ chuyên gia ngày càngcao, đặc biệt, trong lĩnh vực giáo dục các phương pháp suy diễn đòi hỏi khả năng tínhtoán trên các dạng hàm, đa thức, giải phương trình,… với các biến và tham số không cốđịnh. Tuy nhiên, nếu sử dụng các ngôn ngữ lập trình thuần túy để giải quyết các bài toántrên là hết sức khó khăn.Từ những nhu cầu trên, các công cụ lập trình Symbolic đã ra đời và giải quyếtkhối lượng lớn các xử lý tính toán, nhất là tính toán symbolic như: Maple, Mathematica,… Tuy nhiên, các hệ thống này được thương mại với giá bản quyền đắt đỏ là cản trở lớncho các nhà phát triển các ứng dụng mã nguồn mở, các ứng dụng với quy mô nhỏ,…Trang 4GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành NguyênTrong chuyên đề này sẽ nghiên cứu lập trình Symbolic với bộ thư viện mã nguồn mởSympy trên nên ngôn ngữ Python.Trang 5GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành NguyênPHẦN 2: KHÁI QUÁT VỀ BIỂU DIỄN TRI THỨC2.1. TRI THỨCTri thức (Knowledge) là sự “hiểu biết” của người trong một phạm vi, lĩnh vực nàođó; được xem xét theo các mục tiêu hay các vấn đề nhất định[1].Ví dụ: − Tri thức về bệnh lao và khả năng điều trị bệnh lao của bác sĩ chuyên khoa LaoPhổi.− Tri thức về toán học đại số ở bậc trung học phổ thông và khả năng giải bải tậpcủa học sinh cấp III.Tri thức là một hệ thống phức tạp, đa dạng và trừu tượng bao gồm nhiều thành tốvới những mối liên hệ tác động qua lại [1] như: khái niệm, quan hệ, luật, sự kiện, … 2.2. BIỂU DIỄN TRI THỨCBiểu diễn tri thức (Knowledge Representation) là xây dựng mô hình biểu diễn trithức để đưa tri thức lên máy tổ chức lưu trữ và xử lý, đặc biệt là cho suy luận giải các vấnđề, các bài toán[1]. Tri thức trong thực tế rất đa dạng và phức tạp. Tùy những trường hợpcụ thể có thể sử dụng các cấu trúc dữ liệu cơ bản (dãy, danh sách, tập hợp, …), các cấutrúc trừu tượng (class) hoặc các ngôn ngữ đặc tả tri thức.2.3. CÁC PHƯƠNG PHÁP BIỂU DIỄN TRI THỨC2.3.1. Biểu diễn dựa trên logic hình thứcSử dụng các biểu thức logic hình thức trong một hệ thống logic để diễn đạt các sựkiện và các luật trong cơ sở tri thức. Phép tính logic vị từ cấp 1 được sử dụng phổ biếnnhất và có cả một ngôn ngữ lập trình hỗ trợ cho phương pháp này. Đó là ngôn ngữ lậptrình PROLOG. Trong ngôn ngữ PROLOG, chỉ cần khai báo các sự kiện và các luật.Hệthống sẽ tiến hành giải quyết vấn đề được yêu cầu dựa trên tri thức được khai báo.Trang 6GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên2.3.2. Hệ luật dẫnMỗi luật dẫn được phát biểu dưới dạng:if then Mô hình: Một cách hình thức, hệ luật dẫn gồm:− Tập ký hiệu đại diện cho các sự kiện.− Tập luật dẫn trong đó là các tập hợp sự kiệnNhận xét: Mô hình hệ luật dẫn trên khó áp dụng trực tiếp vì quan niệm sự kiện kháđơn giản.2.3.3. Mạng ngữ nghĩaMạng ngữ nghĩa (semantic network) có dạng một đồ thị gồm các nút và các cung,trong đó− Các nút thể hiện các khái niệm, các đối tượng.− Các cung thể hiện các quan hệ giữa các đối tượng. Dựa trên mạng ngữ nghĩa ta nhận biết tri thức một cách trực quan giúp thiết kế cácxử lý như: thêm/bớt các khái niệm hay các đối tượng, tìm kiếm thông tin.2.3.4. Khung (frame)Các khung (frame) thể hiện các khái niệm dưới dạng cấu trúc mẫu tin và có hìnhthức như một bảng mẫu.Khung cơ bản gồm các thành phần cơ bản sau:− Tên đối tượng (loại khung).− Các thuộc tính.− Giá trị của các thuộc tính.Khung lớp: thể hiện các tính chất tổng quát của một lớp các đối tượng, với nhữngquan hệ kế thừa và cấu trúc phân cấp.Trang 7GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên2.4. SUY DIỄN2.3.1. Suy diễn tự độngSuy diễn tự động là quá trình vận dụng kiến thức đã biết trong quá trình lập luậntìm lời giải cho bài toán. Trong đó quan trọng nhất là các chiến lược điều khiển giúp phátsinh những sự kiện mới từ các sự kiện đã có. Quá trình suy diễn được thuật giải hóa và cóthể cài đặt thành chương trình máy tính.Các kỹ thuật suy diễn cơ bản:− Suy diễn tiến− Suy diễn lùi.− Suy diễn tiến kết hợp heurictics.2.3.2. Lời giải bài toánLời giải bài toán là tập luật áp dụng để được đạt từ trạng thái giả thiết đến kết luật.Trong đó, quá trình tìm lời giải bài toán là quá trình tìm luật áp dụng trên tập sự kiện hiệntại nhằm phát sinh thêm các sự kiện mới tốt hơn.2.3.3. Suy diễn tiếnSuy diễn tiến là phương pháp suy diễn từ giả thiết đi đến kết luận. Chiến lược nàyđược bắt đầu bằng tập sự kiện đã biết, rút ra các sự kiện mới từ việc áp dụng luật thíchhợp trên tập sự kiện hiện tại. Quá trình này được lặp cho đến khi đạt được trạng thái đíchhoặc cho đến khi không tìm được luật áp dụng. Trong áp dụng cụ thể phương phápthường sử dụng kết hợp với các qui tắc heuristic trong việc chọn luật.Trong thực tế, không gian tìm kiếm của tập luật và sự kiện rất lớn ảnh hưởng đếntốc độ thực thi của thuật toán. Do đó, chiến lược suy diễn tiến được tối ưu với hai phiênbản: suy diễn tiến kết hợp bài toán mẫu và suy diễn tiến kết hợp heurictics.2.3.4. Suy diễn lùiSuy diễn lùi là phương pháp truy ngược từ kết luận trở về giả thiết. Phương phápnày được tiến hành bằng cách truy ngược từ mục tiêu cần đạt được trở về phần giả thiếtTrang 8GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyêncủa bài toán bằng cách áp dụng các luật trong cơ sở tri thức. Quá trình suy diễn lùi này sẽphát sinh một sơ đồ cây mục tiêu kèm theo một cơ chế quay lui và lời giải sẽ được tìmthấy khi tất cả các mục tiêu ở các nút lá của cây mục tiêu đều thuộc về những sự kiện đãbiết. Trong áp dụng cụ thể phương pháp thường sử dụng kết hợp với các qui tắc heuristictrong việc chọn luật. Trang 9GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành NguyênPHẦN 3: TỔNG QUAN VỀ LẬP TRÌNH SYMBOLICLập trình Symbolic là phương pháp tiếp cận mới nhằm triển khai các hệ thống đạisố máy tính một cách nhanh chóng và tiện lợi nhất.3.1. ĐẠI SỐ MÁY TÍNHĐại số máy tính là lĩnh vực nghiên cứu của khoa học máy tính và toán học vớimục tiêu đưa các xử lý đại số lên máy tính thực hiện trên các các biểu tượng [2], phục vụnghiên cứu và xây dựng các ứng dụng toán học trên máy tính: hệ thống giải bài tập toáncho học sinh các cấp, hệ thống trắc nghiệm trình độ toán cho học sinh,… Đại số máy tínhlà một phần nghiên cứu của khoa học máy tính, được nghiên cứu phương pháp thiết kế,phân tích và áp dụng các thuật toán đại số [2].Với đại số máy tính, có thể suy ra những thay đổi trong các tham số ảnh hưởngđến kết quả của quá trình tính toán. Từ đó, có thể xây dựng các thuật toán máy tính.VD: thuật toán xác định sự tương đương của các biểu thức đại số, thuật toán giảiphương trình vi phân, …Các giải pháp đại số luôn đòi hỏi sự chính xác. Tuy nhiên, giải pháp số thôngthường sẽ được xấp xỉ, điều này có thể phát sinh vấn đề sai số gia tăng trong quá trìnhtính toán dẫn đến kết quả sai lệch ngoài mong muốn.3.2. LẬP TRÌNH SYMBOLICLập trình Symbolic là lập trình máy tính trong đó ngôn ngữ lập trình được cungcấp khả năng “symbolic” thông qua thư viện hoặc một phần mềm khác. Nghĩa là, ngônngữ lập trình có khả năng xử lý trên biểu thức đại số, hàm, toán học, phương trình,…chứa biến và phụ thuộc vào các tham số ở dạng ký tự. Từ đó, có thể thực hiện các xử lý,tính toán trên các đối tượng toán học: hàm số, đa thức, phương trình, ma trận mà trong đócó thể biến hoặc không chứa biến một cách dễ dàng. Các thao tác có thể gặp như: khaitriển đa thức, rút gọn đa thức, tìm nghiệm, giải phương trình,…Trang 10GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành NguyênTừ những nhu cầu thực tế, các nhà khoa học máy tính và công nghệ phần mềm đãnghiên cứu và phát triển các ứng dụng hỗ trợ lập trình Symbolic: Reduce, Schoonscip,Macsyma, Derive, Mathematica, Maple. Trong đó, hai hệ thống thương mại nổi tiếng làMaple và Mathematica được sử dụng rộng rãi; MuPAD là một hệ thống thương mạinhưng có phiên bản miễn phí cho mục đích phi lợi nhận và giáo dục. Một số hệ thốngkhác tập trung hỗ trợ cho nghiên cứu chuyên ngành hầu hết là phiên bản miễn phí.Ngoài ra, còn có các thư viện mã nguồn mở cho phép người xây dựng các ứngdụng xử lý trên toán học đại số.Tính toán số học Tính toán symbolicChỉ tính toán với số2 + 3 = 5Tính toán trên từng thành phần đạisốx + 2x = 3x; Kết quả là số xấp xỉ Kết quả được biểu diễn chính xácKết quả trả về chỉ ở dạng số Kết quả ở dạng symbolicBảng 1: So sánh tính toán số học và tính toán symbolicTrang 11GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành NguyênPHẦN 4: BỘ THƯ VIỆN SYMPY3.1. GIỚI THIỆUSympy là bộ thư viện Python sử dụng trong toán học sybolic. Sympy nhằm mụctiêu trở thành một hệ thống đại số máy tính mạnh mẽ đầy đủ chức năng. Tuy nhiên, mãnguồn đơn giản dễ hiểu và dễ dàng phát triển, mở rộng. Sympy được phát triển hoànthiện bằng ngôn ngữ Python và không đòi hỏi thêm bất kỳ thư viện mở rộng nào.Sympy cho phép người dùng phát triển các ứng dụng đáp ứng đầy đủ các yêu cầuxử lý các bài toán đại số: tính toán đại số với độ chính xác tùy ý trên tập số nguyên, sốhữu tỉ, số thực và biểu thức đại số, giải phương trình, hệ phương trình tuyến tính và phituyến tính, thực hiện các phép tính trên dãy số, ma trận, …Các xử lý tính toán trên Sympy được chia thành từng module với từng nhóm chứcnăng tính toan trên từng nhóm đối tượng toán học: phương trình, hệ phương trình tuyếntính, ma trận, dãy số, …3.2. CÀI ĐẶTĐây là bộ thư viện trên nền tảng Python, do đó, trên máy tính sử dụng Sympy phảicài đặt Python (phiên bản từ 2.5 trở lên) trước khi cài đặt Sympy.Download:− Python: https://www.python.org/download/ − Sympy: http://sympy.org/en/download.html Sau khi download, nhấn đôi chuột vào file cài đặt (.exe) Python, và Sympy.Sau khi cài đặt hoàn tất, khởi động console Python như sau:Trang 12GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành NguyênHình 1: Python console3.3. CÁC PHÉP TOÁN CƠ BẢNĐể thực hiện các thao tác xử lý toán học từ Sympy, tại cửa sổ dòng lệnh đầu tiên tathực hiện khởi động thực viện cần thao tác bằng lệnh import với cấu trúc:from sympy[.module] import * | .gói thư viện1 [, gói thư viện2, …, gói thư viện n]Trong đó:− Module là tên module cần khởi động phục vụ tính toán.− Gói thư viện i (i = 1…n) là tên gói thư viện cần khởi động nằm trong moduleHình 2: Import thư viện SympyTrang 13GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên3.3.1. Phép gánDùng để gán giá trị hoặc mệnh đề cho một biến hoặc tham số.Hình 3: Phép gán3.3.2. Phép so sánh bằngPhép so sánh bằng dùng để so sánh mệnh đề hoặc giá trị số có bằng nhau haykhông.Hình 4: Phép so sánh bằng3.3.3. Biến Trong Sympy, mệnh đề với ít nhất một biến được khởi tạo trước khi biến này đượcgán giá trị, giá trị của mệnh sẽ không được tính toán với giá trị mới. Khi được gọi kết quảcủa mệnh đề, Sympy sẽ trả về mệnh đề ban đầu được khởi tạo.Ví dụ ta có mệnh đề a = b + 1. Khi đó giá trị của mệnh đề a sẽ là “b + 1” trong đób là biến số. Tuy nhiên, sau khi b được gán giá trị ta gọi giá trị của a sẽ là “b + 1” nhưban đầu. Trang 14GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành NguyênHình 5: Cách khai báo biến trong SympyĐể tránh trường hợp này, trong quá trình xử lý nếu có một mệnh đề cần phải cậpnhật theo giá trị mới của biến ta thay thế mệnh đề bằng một hàm xử lý. Hàm xử lý nàytuân thủ theo quy tắc định nghĩa hàm trong ngôn ngữ Python.3.4. SYMPY MODULESympy là một bộ thư viện hỗ trợ khả năng lập trình Symbolic nhằm mục tiêu xâydựng một hệ thống đại số máy tính và được module hóa nhằm mục tiêu đơn giản cho việcphát triển tích hợp sau này. Trong đó, mỗi module hoạt động xem như độc lập, thực hiệncác phép tính toán đại số trên các đối tượng khác nhau: hình học hai chiều, ma trận, dãysố, …3.4.1. Sympy CoreĐây là module chính của sympy chứa các thao tác cơ bản trên Sympy bao gồm tậpký tự toán học thường dùng đặt tên biến (x, y, …, λ, ρ, ω, δ, π, θ, α, β, …) được đóngtrong gói sympy.abc, cũng như các khai báo biến sympy.var, khai báo hàmsympy.function,… Khi cần sử dụng nhóm chức năng nào ta có thể khởi động gói đó bằngcách gọi lệnh import3.4.2. Geometry moduleGeometry module là gói thư viện hỗ trợ xử lý trên hình học hai chiều, cho phéptạo một đối tượng không gian hai chiều: điểm, đường, vòng tròn, … và các truy vấnTrang 15GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyênthông tin của các đối tượng này. Các xử lý này bao gồm tính diện tích, tìm điểm giaonhau giữa hai đường thẳng, … Trong đó, các thuộc tính trên từng đối tượng hình học cóthể là giá trị số hoặc là tham số.Hình 6: Thao tác xử lý hình học phẳng trong Sympy3.4.3. Logic ModuleĐây là module cung cấp các chức năng xử lý tính toán trên đại số Bool bao gồmcác phép tính trên hàm Bool: khai triển, rút gọn, tìm nghiệm, …Hình 7: Tìm giá trị biến cho hàm bool đúngTrang 16GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên3.4.4. Ma trậnMatrix module cho phép người dùng thực hiện đầy đủ các thao tác trên ma trận,gồm:− Cộng, trừ hai ma trận.− Nhân hai ma trận.− Tìm ma trận nghịch đảo.− Tính định thức ma trận, …Hình 8: Khởi tạo ma trận trong SympyTrang 17GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành NguyênHình 9: Cộng, nhân hai ma trận3.4.5. Giải phương trìnhĐây là module cho phép người dùng giải phương trình đa thức, phương trìnhlượng giác, hệ phương trình.− Giải phương trình y = f(x): solve(f(x), tên biến).Hình 10: Giải phương trình bậc 2 f(x) = x2 – 1Hình 11: Giải phương trình bậc 2 f(x) = x2 - a− Giải hệ phương trình {f1(x, y) = 0, f2(x, y) = 0}: solve([f1(x, y), f2(x,y)], [x,y])Trang 18GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành NguyênHình 12: Giải hệ phương trình x + y = 0 và x – 2y = 0Hình 13: Giải hệ phuong trình x + y = 0 và x – 2y + a = 0Trang 19GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành NguyênTÀI LIỆU THAM KHẢO[1] Đỗ Văn Nhơn. Bài giảng Biểu diễn tri thức và suy luận, Đại học Công nghệ thôngtin, 2013.[2] Hazem Mohamed El-Alfy. Computer algebra and its applications, AlexandriaUniversity, 1997.[3] David S. Touretzky. Common LISP: A Gentle Introduction to SymbolicComputation, The Benijamin/Cummings Publishing Company Inc, 1990.[4] Sympy Documentation Release 0.7.2, Sympy Development Team, 2012.Trang 20