Sự khác biệt giữa phương pháp gradient liên hợp và phương pháp gradient biconjugate


9

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:


11

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 Krylovk

.Kk(Một,b)= ={b,Mộtb,Một2b,Giáo dục,Mộtkb}

Ý tưởng thiết yếu của phương pháp gradient biconjugate là duy trì không gian con Krylov thứ hai

Kk*(Một,b)= ={b,Một*b,(Một*)2b,Giáo dục,(Một*)kb}

Một*Mộtx= =Một*b

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:

  1. Đố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.

  2. 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à PETScTrilinos . 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?


Bạn có biết bất kỳ thư viện song song mã nguồn mở nào cho BiCG không?
dùng2196452

Không có lợi ích lý thuyết thuần túy: Nếu bạn áp dụng BiCG (hoặc BiCGStab) cho ma trận dương đối xứng, phương pháp này có chính thức tương đương với một cái gì đó đã biết không?
shuhalo

5

Phương pháp gradient liên hợp chỉ hoạt động để giải quyết hệ thống

Mộtx= =b

Một

f(x)= =12xTMộtx-bTx

Lưu ý rằng đạo hàm là

f'(x)= =12MộtTx+12Mộtx-b

MộtMộtT= =Một

f'(x)= =Mộtx-b

f'(x)= =0xMột

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

Mộtx= =b

cùng với

MộtTx= =b

Một

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.

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.