Sự khác biệt giữa hai phương pháp này là gì? Một vấn đề có thể được giải quyết bằng một phương pháp sẽ có thể giải quyết bằng phương pháp khác không? Cả hai / hoặc một trong số chúng có thể được song song với OpenMP và / hoặc MPI không?
Sự khác biệt giữa hai phương pháp này là gì? Một vấn đề có thể được giải quyết bằng một phương pháp sẽ có thể giải quyết bằng phương pháp khác không? Cả hai / hoặc một trong số chúng có thể được song song với OpenMP và / hoặc MPI không?
Câu trả lời:
Phương pháp gradient liên hợp là bộ giải lặp nhanh nhất có thể chứng minh được, nhưng chỉ dành cho các hệ thống đối xứng, xác định dương. Điều gì sẽ rất thuận tiện là nếu có một phương pháp lặp có các tính chất tương tự cho các ma trận không xác định hoặc không đối xứng.
Phương pháp CG tìm kiếm các giải pháp gần đúng ở mỗi bước trong không gian con Krylov
.
Ý tưởng thiết yếu của phương pháp gradient biconjugate là duy trì không gian con Krylov thứ hai
Thật không may, điều đó thất bại nếu bạn áp dụng nó một cách ngây thơ. Tuy nhiên, bằng cách thực hiện một bước của thuật toán dư tối thiểu (GMRES) sau mỗi bước BiCG, việc lặp lại kết quả là ổn định; điều này thường được gọi là BiCG-Stab.
Vì vậy, BiCG-Stab (về nguyên tắc) là một người giải quyết tổng quát hơn CG nhưng chịu hiệu quả kém hơn khi áp dụng cho các vấn đề mà CG dự định. BiCG hoặc BiCG-stab yêu cầu nhiều phép nhân vectơ ma trận và nhiều sản phẩm chấm hơn, vì vậy nếu bạn song song chúng thông qua đa xử lý bộ nhớ phân tán, bạn sẽ phải chịu nhiều chi phí liên lạc hơn, nhưng dù sao chúng cũng có thể được thu nhỏ tùy ý.
Có hai điều đáng chú ý ở đây quan trọng hơn tất cả những thứ linh tinh khác mà tôi vừa nói:
Đối với mọi phương pháp lặp (BiCG, GMRES, QMR ...), có một ma trận sẽ khiến nó không hội tụ được trong số học chính xác hữu hạn.
Do đó, việc đưa ra một điều kiện tiên quyết tốt cho ma trận cụ thể của bạn có lẽ quan trọng hơn việc sử dụng bộ giải lặp lặp cấp độ bên ngoài tối ưu.
EDIT: Đối với các thư viện nguồn mở, hai thư viện phổ biến nhất là PETSc và Trilinos . Tôi đặc biệt khuyên bạn cũng nên có các ràng buộc Python, tương ứng là petc4py và PyTrilinos. Bạn cũng có thể thử Eigen . Một mặt, nó không có nhiều tính năng, nhưng mặt khác, nó chỉ có những gì bạn cần và không còn nữa; nếu bạn có ý định đọc mã thay vì chỉ sử dụng nó, Eigen có thể là dễ nhất.
Xem thêm: Yousef Saad, Phương pháp lặp cho các hệ thống tuyến tính thưa thớt ; Nachtigal et al, Lặp đi lặp lại ma trận Nonsymmetrix nhanh như thế nào?
Phương pháp gradient liên hợp chỉ hoạt động để giải quyết hệ thống
Lưu ý rằng đạo hàm là
Phương pháp gradient biconjugate sẽ hoạt động cho bất kỳ hệ thống nào. Nó làm như vậy bằng cách giải quyết cả hai
cùng với
Theo như song song, nếu hệ thống của bạn lớn, bạn có thể đạt được nhiều sự song song trong đại số tuyến tính liên quan đến các lần lặp của bộ giải, vì vậy không có lý do gì một thư viện đại số tuyến tính song song sẽ không dẫn đến hiệu suất.