Tôi nên làm theo hướng dẫn nào khi chọn một bộ giải hệ thống tuyến tính thưa thớt?


49

Các hệ thống tuyến tính thưa thớt xuất hiện với tần suất tăng dần trong các ứng dụng. Người ta có rất nhiều thói quen để lựa chọn để giải quyết các hệ thống này. Ở cấp độ cao nhất, có một lưu vực giữa phương pháp loại bỏ Gaussian trực tiếp hoặc phân tách Cholesky, với các thuật toán đặt hàng đặc biệt và phương pháp đa diện) và phương pháp lặp (ví dụ GMRES, (bi-) gradient liên hợp).

Làm thế nào để xác định nên sử dụng một phương pháp trực tiếp hay lặp đi lặp lại? Có lựa chọn đó, làm thế nào để chọn một thuật toán cụ thể? Tôi đã biết về việc khai thác tính đối xứng (ví dụ: sử dụng gradient liên hợp cho một hệ thống xác định dương đối xứng thưa thớt), nhưng có bất kỳ cân nhắc nào khác như thế này để xem xét khi chọn phương pháp không?

Câu trả lời:


33

Điều quan trọng khi chọn bộ giải lặp là phổ của toán tử, xem bài viết này . Tuy nhiên, có rất nhiều kết quả tiêu cực, hãy xem bài viết này trong đó không có người giải quyết lặp lại chiến thắng cho tất cả các vấn đề và bài báo này chứng minh rằng họ có thể nhận được bất kỳ đường cong hội tụ nào cho GMRES cho bất kỳ phổ nào. Do đó, dường như không thể dự đoán hành vi của các bộ giải lặp trừ một số trường hợp riêng lẻ, do đó, lựa chọn tốt nhất của bạn là thử tất cả, sử dụng một hệ thống như PETSc , cũng có bộ giải trực tiếp.


2
"Ném mọi thứ bạn có thể vào nó" là khá nhiều lời khuyên tôi đã quen thuộc. :) Bài báo thứ ba mà bạn liên kết đến là điều mà tôi chưa từng thấy trước đây; cảm ơn vì điều đó!
JM

2
Matt có một câu trả lời tuyệt vời, nhưng bạn phải đưa nó vào bối cảnh của cộng đồng mà anh ấy đến từ (máy tính khoa học quy mô lớn). Bạn sẽ thấy rằng đối với các vấn đề nhỏ (giả sử, ít hơn một trăm nghìn ẩn số), rằng các bộ giải trực tiếp vượt trội hơn nhiều so với các phương pháp lặp nếu vấn đề không phải là elip mạnh. Tôi chưa thấy bất kỳ bài viết tổng hợp hay nào trong tài liệu sẽ đưa bạn đến một chiến lược bắt đầu ban đầu, điều này hơi xấu hổ với tôi.
Aron Ahmadia

5
Ước tính của Aron là tốt nhưng phụ thuộc nhiều vào điền vì các phương pháp trực tiếp thưa thớt thường làm cạn kiệt bộ nhớ trước khi chúng cạn kiệt sự kiên nhẫn.
Matt Knepley

18

Sự lựa chọn giữa phương pháp trực tiếp và lặp lại phụ thuộc vào mục tiêu và vấn đề trong tay.

Đối với phương pháp Trực tiếp, chúng tôi có thể lưu ý:

  • Các ma trận hệ số của hệ thống tuyến tính thay đổi trong quá trình tính toán và có thể cho các hệ thống ống xả thưa thớt yêu cầu bộ nhớ và nỗ lực gia tăng công việc do fill-in
  • Phải hoàn thành để cho kết quả hữu ích
  • Hệ số hóa có thể được sử dụng lại trong các bước tiếp theo nếu có nhiều mặt phải
  • Chỉ có thể được sử dụng để giải quyết các hệ thống tuyến tính.
  • Ít khi thất bại.

Đối với phương pháp lặp, chúng ta có thể lưu ý:

  • Mục tiêu là đưa ra một kết quả một phần chỉ sau một số lần lặp nhỏ.
  • Nỗ lực giải pháp nên ít hơn các phương pháp trực tiếp cho cùng một vấn đề.
  • Kinh tế đối với việc lưu trữ (không điền vào)
  • Thường dễ lập trình.
  • Một giải pháp gần đúng đã biết có thể được khai thác.
  • Đôi khi chúng nhanh và đôi khi chúng không (đôi khi thậm chí khác nhau).
  • Đối với các vấn đề phức tạp, các phương pháp lặp ít mạnh hơn đáng kể so với các phương pháp trực tiếp.

Hướng dẫn khi nào nên sử dụng phương pháp trực tiếp hay lặp lại?

  • Các phương pháp lặp khi ma trận hệ số thưa thớt và các phương pháp trực tiếp không thể khai thác hiệu quả độ thưa thớt (tránh tạo ra phần bổ sung).
  • Phương pháp trực tiếp cho nhiều phía bên tay phải.
  • Phương pháp lặp có thể hiệu quả hơn nếu độ chính xác ít được quan tâm
  • Phương pháp lặp cho các hệ phương trình phi tuyến.

8
Tôi nghĩ rằng điều quan trọng cần lưu ý là các phương pháp trực tiếp không phải lúc nào cũng tốt hơn cho nhiều phía bên tay phải. Có lẽ chúng tốt hơn cho phía bên phải , nhưng nếu phương thức lặp là trong khi phương thức trực tiếp là , thì vẫn thuận lợi khi sử dụng bộ giải lặp cho bên tay phải. O(n)O(n)O(n2)O(1)
Jack Poulson

8

Tôi hoàn toàn đồng tình với các câu trả lời đã được đưa ra. Tôi muốn thêm rằng tất cả các phương pháp lặp yêu cầu một số loại dự đoán ban đầu. Chất lượng của dự đoán ban đầu này thường có thể ảnh hưởng đến tốc độ hội tụ của phương pháp bạn chọn. Các phương pháp như Jacobi, Gauss Seidel và Thư giãn thành công đều có tác dụng lặp đi lặp lại "làm mịn" càng nhiều lỗi càng tốt ở mỗi bước ( xem bài viết này để biết chi tiết). Một vài bước đầu tiên giảm lỗi tần số cao khá nhanh, nhưng lỗi tần số thấp cần nhiều thao tác hơn để làm mịn. Đây là những gì làm cho sự hội tụ chậm cho các phương pháp này. Trong các trường hợp như vậy, chúng ta có thể tăng tốc độ hội tụ bằng cách giải quyết lỗi tần số thấp (ví dụ: giải quyết vấn đề tương tự trên lưới thô hơn), sau đó giải quyết lỗi tần số cao hơn (ví dụ trên lưới mịn hơn). Nếu chúng ta áp dụng khái niệm này một cách đệ quy bằng cách chia và chinh phục, chúng ta sẽ có được phương thức Đa lưới. Ngay cả khi hệ thống tuyến tính không đối xứng, vẫn có các triển khai thay thế của phương pháp đa lưới cho bất kỳ hệ thống ma trận thưa thớt không đặc biệt nào (ví dụ phương pháp đa lưới đại số) có thể tăng tốc độ hội tụ của người giải. Khả năng mở rộng của chúng trên các hệ thống song song, tuy nhiên, là chủ đề của rất nhiều nghiên cứu.


5
Câu trả lời này dường như mang lại ấn tượng rằng hiệu quả của multigrid đến từ việc tìm ra một dự đoán ban đầu tốt. Trong thực tế, dự đoán ban đầu là mối quan tâm nhỏ đối với các vấn đề tuyến tính và thực sự chỉ là mối quan tâm đối với Full Multigrid. Multigrid hoạt động do tách phổ. Lưu ý rằng làm cho multigrid hoạt động tốt cho các vấn đề khó khăn là một thách thức đáng kể. Multigrid hoạt động khá tốt song song, nó là thành phần chính trong một số giải thưởng Gordon Bell và một vài gói nguồn mở chạy với hiệu quả cao trên các máy lớn nhất hiện nay. Để triển khai GPU, hãy xem thư viện CUSP.
Jed Brown

Hầu hết các lần đoán ngẫu nhiên ban đầu là đủ tốt. Trong việc trích xuất các giá trị riêng bằng thuật toán Lanczos, một vectơ khởi động / khởi động lại ngẫu nhiên sẽ giúp ích. Khởi động lại xảy ra đôi khi trong Thuật toán Lanczos.
AnilJ

3

Có một phần thông tin quan trọng bị thiếu trong câu hỏi của bạn: ma trận bắt nguồn từ đâu. Cấu trúc của vấn đề bạn đang cố gắng giải quyết có tiềm năng lớn để đề xuất một phương pháp giải pháp.

Nếu ma trận của bạn bắt nguồn từ một phương trình vi phân từng phần với các hệ số trơn tru, một phương pháp đa hình học sẽ khó đánh bại, đặc biệt là trong ba chiều. Nếu vấn đề của bạn ít thường xuyên hơn, đa đại số là một phương pháp tốt. Cả hai thường kết hợp với phương pháp không gian Krylov. Các bộ giải hiệu quả khác có thể được lấy từ các phương pháp đa cực nhanh hoặc biến đổi Fourier nhanh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.