Làm thế nào tôi có thể tính toán bổ sung Schur trong PETSc?


8

Làm thế nào tôi có thể tính toán bổ sung Schur:

S= =Kbb-KbmộtKmộtmột-1Kmộtb

Ở đâu

K= =(KmộtmộtKmộtbKbmộtKbb)

(trong một số thứ tự) là một ma trận PETSc ( Mat)?

Câu trả lời:


13

Nó rất tốn kém để tính toán bổ sung Schur của một ma trận và rất hiếm khi cần thiết trong thực tế. PETSc khuyên bạn nên tránh các thuật toán cần nó. Bổ sung Schur của một ma trận (dày đặc hoặc thưa thớt) về cơ bản luôn luôn dày đặc, vì vậy hãy bắt đầu bằng:

  • tạo thành ma trận dày đặc ,Kbmột
  • cũng tạo ra một ma trận dày đặc có cùng kích thước.T
  • KmộtmộtMatLUFactor()MatCholeskyFactor()MatGetFactor()MatLUFactorSymbolic()MatLUFactorNumeric()A
  • Rồi gọi MatMatSolve(A,Kba,T).
  • Rồi gọi MatMatMult(Kab,T,MAT_INITIAL_MATRIX,1.0,&S).
  • Bây giờ gọi MatAXPY(S,-1.0,Kbb,MAT_SUBSET_NONZERO).
  • Theo dõi bởi MatScale(S,-1.0)

KSPSMatCreateSchurComplement(Kaa,Kaa_pre,Kab,Kba,Kbb,&S)SKaa_preKaa

K= =(KmộtmộtKmộtbKbmộtKbb)
ISMatGetSchurComplement()SKbb-Kbmột(Kmộtmột)-1KmộtbMatGetSchurComplement()

Một cách khác là diễn giải các ma trận như các toán tử vi phân và áp dụng các đối số của bộ chuyển đổi gần đúng để tìm một phép toán tương đương có thể được áp dụng hiệu quả (xem các điều kiện tiên quyết "PCD" từ Elman, Silvester và Wathen). Một biến thể của điều này là cổ góp bình phương nhỏ nhất, có liên quan chặt chẽ với giả hành Moore-Penrose, và có sẵn trong PCLSCđó hoạt động trên ma trận loại MATSCHURCOMPLEMENT.


2
Có nguy cơ mở lại một câu hỏi đã được giải quyết, tôi nghĩ rằng câu trả lời này quá bi quan. Tôi nghĩ rằng việc tính toán một phép bổ trợ schur có thể là một điều hợp lý để thực hiện trong một số trường hợp (đặc biệt là cấu trúc lại / phân tách miền) và có những thuật toán khác có thể tính toán chúng với độ phức tạp thời gian thấp hơn so với những gì được mô tả ở đây. Xem scicomp.stackexchange.com/questions/28934 để tìm cảm hứng.
rchilton1980
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.