Giải một hệ thống với cập nhật đường chéo xếp hạng nhỏ


9

Giả sử tôi có hệ thống tuyến tính lớn, thưa thớt ban đầu: . Bây giờ, tôi không có A - 1 vì A quá lớn so với hệ số hoặc bất kỳ loại phân tách nào của A , nhưng giả sử rằng tôi có giải pháp x 0 được tìm thấy với một giải pháp lặp.Ax0=b0A1Ax0

Bây giờ, tôi muốn áp dụng một bản cập nhật xếp hạng nhỏ cho đường chéo của A (thay đổi một vài trong số các đường chéo): trong đó D là ma trận đường chéo có chủ yếu là 0 trên đường chéo của nó và một vài giá trị khác không. Nếu tôi có A - 1, tôi có thể tận dụng công thức Woodbury để áp dụng bản cập nhật cho nghịch đảo. Tuy nhiên, tôi không có sẵn điều này. Có điều gì tôi có thể làm chỉ là giải quyết toàn bộ hệ thống một lần nữa không? Có một cách nào đó có lẽ tôi có thể đưa ra một preconditioner M đó là dễ dàng \ dễ dàng hơn để nghịch, sao cho M Một 1(A+D)x1=b0DA1M , vì vậy tất cả những gì tôi sẽ phải làm nếu tôi có x 0 được áp dụng M - 1 và một phương pháp lặp sẽ hội tụ trong một vài lần / vài lần lặp?MA1A0x0M1


Bạn đang bắt đầu với một điều kiện tiên quyết tốt cho và muốn biết làm thế nào để cập nhật nó? Thứ hạng nào là bản cập nhật? (Bản cập nhật thứ hạng 1000 là "nhỏ" so với ma trận có kích thước 10 9 nhưng không nhỏ về số lần lặp.)A1000109
Jed Brown

có kích thước khoảng 10 6 đến 10 7 và bản cập nhật là <1000 (có thể <100) phần tử. Tôi đang sử dụng một loại điều kiện tiên quyết chéo cho A hoạt động rất tốt, vì vậy việc cập nhật sẽ là chuyện nhỏ, nhưng tôi tự hỏi liệu có cách nào tốt hơn tôi có thể làm thay vì giải quyết hệ thống mới từ đầu. A106107
Costis

2
Giải pháp của một hệ thống không cho bạn biết nhiều về nó. Nếu bạn giải quyết cùng một hệ thống nhiều lần, bản đồ nghịch đảo trên các vectơ đó (và / hoặc không gian Krylov liên quan) sẽ cung cấp cho bạn một số thông tin có thể được sử dụng để tăng tốc độ hội tụ. Có bao nhiêu hệ thống bạn đang giải quyết trong mỗi trường hợp?
Jed Brown

Hiện nay tôi đang chỉ giải quyết cho một RHS ( vector) với mỗi một ma trận trước khi sửa đổi một . bAA
Costis

Câu trả lời:


4
  1. Lưu trong các cột của hai ma trận C tất cả các vectơ b j mà bạn đã áp dụng ma trận trong các lần lặp trước và kết quả c j = A b j .BCbjcj=Abj

  2. Đối với mỗi hệ thống mới (hoặc A x = b ' , đó là trường hợp đặc biệt D = 0 ), xấp xỉ giải quyết hệ thống tuyến tính overdetermined ( C + D B ) y b ' , ví dụ: , bằng cách chọn một tập hợp con của các hàng (có thể là tất cả) và sử dụng phương pháp bình phương nhỏ nhất. Lưu ý rằng chỉ có phần được chọn của C + D B cần được lắp ráp; Vì vậy, đây là một hoạt động nhanh chóng!(A+D)x=bAx=bD=0(C+DB)ybC+DB

  3. Đặt . Đây là một xấp xỉ ban đầu tốt nào đó để bắt đầu lặp đi lặp lại để giải quyết ( Một + D ) x ' = b ' . Trong trường hợp các hệ thống tiếp theo phải được xử lý, sử dụng các sản phẩm vectơ ma trận trong phép lặp mới này để mở rộng ma trận BC trên hệ thống con kết quả.x0=By(A+D)x=bBC

BCBBCx0B

Các hàng phải được chọn theo cách sao cho chúng tương ứng với sự rời rạc thô của vấn đề đầy đủ. Lấy nhiều hơn năm lần so với tổng số nhân của vectơ ma trận dự kiến ​​là đủ.

BCC=ABBxxx=Byyx(C+DB)y=bx0=By=x

xBx

(k+1)k


Cảm ơn, giáo sư Neumaier. Tôi sẽ thử nó. Có lẽ bạn có thể cho tôi một lời giải thích ngắn gọn về cách thức này hoạt động?
Costis

Ax0=b0Ax1=b1Ax2=b2

D=0

@Costis: Tôi đã thêm một chút chi tiết cho bước 2. - Nếu bạn viết đơn, xin vui lòng gửi cho ma bản in sẵn.
Arnold Neumaier

(C+DB)yb
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.