Làm cách nào để ước tính số điều kiện của ma trận thưa thớt lớn bằng PETSc?


Câu trả lời:


11

Đối với các ma trận nhỏ, số điều kiện có thể được tính toán một cách đáng tin cậy bằng cách sử dụng phân tách giá trị số ít. Làm một KSPSolve()với ma trận và chạy với -pc_type svd -pc_svd_monitor.

Đối với ma trận lớn hơn, bạn có thể ước tính số điều kiện bằng phương pháp Krylov. Ví dụ, phép lặp Arnoldi được thực hiện bởi GMRES tăng dần tính toán phân tách Hessenberg. Các giá trị số ít cực trị và giá trị riêng của ma trận Hessenberg là các giá trị gần đúng với các giá trị của ma trận gốc. Để có PETSc ước tính giá trị bản địa theo cách này, hãy chạy với

-ksp_monitor_singular_value -ksp_type gmres -ksp_gmres_restart 1000 -pc_type none

Các tùy chọn này nói để ước tính các giá trị số ít cực trên mỗi lần lặp Krylov. GMRES được sử dụng để tính toán không gian Krylov (bạn cũng có thể sử dụng CG) với một khởi động lại rất lớn. Khi khởi động lại, GMRES loại bỏ không gian Krylov hiện tại, vì vậy tất cả tiến trình về ước tính giá trị số ít bị mất trong quá trình khởi động lại. Tùy chọn cuối cùng -pc_type nonecho biết thực hiện phép lặp này trên ma trận không phân đoạn. Theo mặc định, toán tử tiền điều kiện ( hoặc ) sẽ được sử dụng, do đó bạn sẽ kết thúc với ước tính cho toán tử tiền điều kiện.P-1MộtMộtP-1

Điều này thường sẽ chính xác cho các giá trị số ít nhất, nhưng có thể đánh giá quá cao giá trị số ít nhất trừ khi phương thức đã hội tụ. Nếu bạn có một bộ giải cho ma trận (ví dụ: sử dụng KSPSolve()), thì bạn có thể ước tính giá trị số ít nhất của bằng cách sử dụng cùng một quy trình áp dụng cho .MộtMột-1

Sử dụng SLEPc nếu bạn cần ước tính chính xác hơn về giá trị số ít nhất (và cho tất cả các vấn đề giá trị riêng và giá trị riêng khác).

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.