Bài viết này tôi dùng để trả lời (nhanh) câu hỏi của một bạn trên Math2IT Group. Bạn ấy hỏi về sự giống nhau và khác nhau giữa hai phương pháp sai phân hữu hạn (Finite Difference Method) và phần tử hữu hạn (Finite Element Method).
Anh chị cho em hỏi các điểm giống nhau và khác nhau giữa hai phương pháp sai phân hữu hạn và phần tử hữu hạn để giải một phương trình đạo hàm riêng là như thế nào ạ? Em có tham khảo trên Wikipedia mà thấy trả lời chung chung nên chưa hiểu rõ lắm.
- Bài này chỉ là sơ lược để có thể hình dung và hiểu mang tính đại khái sự khác nhau cũng như giống nhau giữa hai phương pháp này thôi. Bài này không phải là một bài viết đầy đủ hay chuyên sâu về hai phương pháp ấy. Trong tương lai tôi sẽ có loạt bài viết kỹ hơn về hai phương pháp này sau.
- Để cho tiện, tôi dùng các ký hiệu sau
- FEM = Finite Element Method = PP phần tử hữu hạn
- FDM = Finite Difference Method = PP sai phân hữu hạn
- PDE = Partial Differential Equations = Phương trình đạo hàm riêng
- Thường những người trả lời câu hỏi này chỉ làm việc trên một phương pháp là chủ yếu, tôi cũng không ngoại lệ. Tôi chỉ tiếp xúc với FDM qua một khóa học, đọc vài tài liệu liên quan nhưng không nhiều. Tôi đa phần làm với FEM. Nói thế để bạn hiểu rằng, bài viết này không nhất thiết là đánh giá kỹ thuật chính xác 100% mà chỉ đơn giản là một chia sẻ kinh nghiệm.
Hai phương pháp này thật ra có rất ít sự giống nhau. Sự giống nhau của chúng có thể thấy ở việc phân miền thành các đoạn (1 chiều), hình vuông (2 chiều, riêng FEM thì người ta thường làm trên tam giác hơn). Trong một số trường hợp (đơn giản), tùy vào cách chọn hàm thử ở FEM thì FDM và FEM khá giống nhau khi triển khai cách giải. Nói như vậy hơi chung chung nhưng hãy đọc sự khác nhau bên dưới để hiểu hơn nhé.
Nói về sức mạnh thì thường là FEM sẽ mạnh hơn FDM xét về tính tổng thể, nhất là khi giải các bài toán PDE phức tạp cả về phương trình lẫn về miền đang xét.
- Khi miền đang xét là một hình xuông trơn hay hình chữ nhật trơn đơn giản, FDM có được lợi thế của nó khi chỉ việc chia miền bằng các đường ngang dọc.
- Khi miền đang xét phức tạp hơn, hình không cố định hoặc có những vết nứt, miền bị chia,… thì có vẻ quá tầm với FDM. Khi ấy FEM sẽ cho thấy sức mạnh thật sự của mình.
Cần lưu ý, FEM hay FDM chỉ là tên gọi chung nhất cho phương pháp giải nghiệm số. Ở từng phương pháp sẽ có chia nhánh ra nhỏ nữa, tức là có những phương pháp con dựa trên 2 phương pháp này tùy vào độ phức tạp của bài toán. Ở đây chúng ta chỉ quan tâm đến 2 phương pháp gốc.
Khi bạn cần một sự xấp xỉ tốt hơn thì FEM sẽ “ngon” hơn là FDM. Lưu ý chữ “ngon” ở đây là tương đối. Ví dụ ở cùng một bài toán mà cả FEM và FDM đều có thể giải được. Ta không xét “ngon = kết quả tốt”. Vì sao? Vì FEM giải 1 ngày ra kết quả đó thì với FDM ta cũng có thể giải ra nhưng lại tốn 4 ngày hoặc tính toán phức tạp hơn rất nhiều chẳng hạn. “Ngon” là xét đến tính hiệu quả của phương pháp.
Vậy sao không khai tử FDM và chỉ dùng FEM thôi?
FEM tuy mạnh hơn FDM ở một số khía cạnh nhưng để có thể thực thi nó (implementation) thì lại phức tạp hơn. Thực thi ở đây có thể hiểu đơn giản là chuyển từ lý thuyết vào việc code trên máy tính. Với sức mạnh của hệ thống máy tính ngày nay, thì dùng FDM với thời gian “chuyển thể ý tưởng lý thuyết-code” nhanh sẽ lợi thế hơn. Điều ấy là chưa kể có một số bài toán, FDM lại cho kết quả “ngon” hơn FEM. Cái này đòi hỏi kinh nghiệm của người làm việc trên từng phương pháp. Không thể có câu trả lời chung cho câu hỏi Nên chọn phương pháp nào?
Ở trên là ta nói về việc “thực hành” từng phương pháp. Nếu xét về “lý thuyết”, FDM làm việc trực tiếp trên phương trình vi phân nên sẽ gặp không ít rắc rối trong việc chứng minh sự hội tụ của nghiệm hoặc khi gặp các vấn đề về không liên tục (discontinuous). FEM lại khác, nó làm việc với các hàm thử (test function) và dạng nghiệm yếu của phương trình (variation/weak form) nên sẽ dễ hơn (dễ hơn FDM thôi chứ không phải là dễ).
Nói ngắn gọn:
- FDM: xấp xỉ phương trình. Nghĩa là bạn biến đổi các thành phần của phương trình gốc thành một phương trình mới “tương tự” và giải nghiệm trên phương trình này.
- FEM: xấp xỉ nghiệm. Nghĩa là bạn vẫn giữ nguyên các đại lượng của phương trình gốc nhưng bạn lại làm việc trên nghiệm xấp xỉ của nghiệm gốc.
Ví dụ bạn cần giải phương trình đơn giản sau đây
Cả hai phương pháp, bạn đều phải chia nhỏ miền đang xét thành những đoạn nhỏ. Ở đây ta giả sử chia thành các đoạn bằng nhau minh họa như hình dưới đây.
Việc giải tìm nghiệm số tức là bạn tìm giá trị của tại các điểm nút (nodes) , gọi là .
Ở FDM, bạn xấp xỉ từng lượng trong phương trình bằng cách áp dụng phép khai triển Taylor,
Lấy xấp xỉ sẽ được
Khi ấy, sẽ thành
Bây giờ bạn sẽ tìm nghiêm số của thay vì của . Do đó ta mới nói FDM: xấp xỉ phương trình.
Ở FEM, bạn cần phải xét phương trình nghiệm yếu của trước, thay vì tìm nghiệm của , ta tìm nghiệm của được biến đổi thành bên dưới
Sau khi chia miền, ta xét không gian hữu hạn được định nghĩa thông qua các hàm cơ bản (basis functions) để chuyển bài toán liên tục về bài toán rời rạc . Có nhiều cách chọn các hàm cơ bản này, thường người ta sẽ chọn các hàm nón (hat function), minh họa ở hình dưới đây.
Khi ấy, ta cần tìm và phương trình thành.
Bạn có thể thấy, dạng của phương trình gốc không có gì thay đổi, cái thay đổi duy nhất chính là biến . Thế nên ta mới gọi FEM: xấp xỉ nghiệm.
- Nếu bạn vẫn chưa hiểu rõ (từ cơ bản) phương pháp phần tử hữu hạn, bạn có thể đọc quyển Numerical solution of partial differential equations by the finite element method của Claes Johnson. Đây có thể xem là quyển sách dành cho người mới bắt đầu học phương pháp này, rất hay.
- What are criteria to choose between finite-differences and finite-elements? (một câu hỏi trên StackExchange)
- What is the difference between Finite Difference Methods, Finite Element Methods and Finite Volume Methods for solving PDEs? (câu tôi đã hỏi cách đây 4 năm trên StackExchange)
- Finite Difference and Finite Element Methods (slide so sánh của Georgy Gimel’farb)
- From Finite differences to Fnite elements: A short history of numerical analysis of partial differential equations (bài báo “kể chuyện” lịch sử giải phương trình vi phân từ FDM đến FEM của Vidar Thomée)
Hình ảnh đại diện chỉnh sửa từ trang bragitoff.com.