Câu trả lời:
Đố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 none
cho 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.
Đ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 .
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).