Giải quyết một hệ thống thưa thớt và có điều kiện cao


9

Tôi dự định giải Ax = b trong đó A là ma trận vuông hoặc hình chữ nhật có điều kiện phức tạp, thưa thớt, không đối xứng và có điều kiện cao (số điều kiện ~ 1E + 20). Tôi đã có thể giải quyết hệ thống với ZGELSS trong LAPACK một cách chính xác. Nhưng khi mức độ tự do trong hệ thống của tôi tăng lên, phải mất một thời gian dài để giải quyết hệ thống trên PC bằng ZGELSS vì độ thưa thớt không được khai thác. Gần đây tôi đã thử SuperLU (sử dụng bộ lưu trữ Harwell-Boeing) cho cùng một hệ thống nhưng kết quả không chính xác cho số điều kiện> 1E + 12 (Tôi không chắc đây có phải là vấn đề về số với trục xoay không).

Tôi nghiêng về việc sử dụng các bộ giải đã được phát triển. Có một người giải quyết mạnh mẽ có thể giải quyết hệ thống mà tôi đã đề cập một cách nhanh chóng (tức là khai thác độ thưa thớt) và đáng tin cậy (theo quan điểm của các số điều kiện)?


1
Bạn có thể điều kiện tiên quyết không? Nếu vậy, các phương pháp không gian con Krylov có thể có hiệu quả. Ngay cả khi bạn nhấn mạnh vào các phương pháp trực tiếp, điều kiện tiên quyết sẽ giúp kiểm soát các lỗi số.
Geoff Oxberry

1
Tôi cũng đã có kinh nghiệm tốt với điều kiện tiên quyết khá nhiều theo cách nó được mô tả ở đây: en.wikipedia.org/wiki/iêu Bạn có thể thực hiện điều kiện tiên quyết trong số học chính xác. Tuy nhiên, ma trận của tôi rất dày đặc, vì vậy không thể chỉ cho bạn các phương pháp / thói quen cụ thể hơn ở đây.
AlexE

11
Tại sao số điều kiện rất lớn? Có lẽ công thức có thể được cải thiện để làm cho hệ thống điều hòa tốt hơn? Nói chung, bạn không thể mong đợi có thể đánh giá chính xác hơn so với , điều này làm cho Krylov có giá trị nhỏ khi bạn hết bit. Nếu số điều kiện thực sự là , bạn nên sử dụng độ chính xác quad ( với GCC, được hỗ trợ bởi một vài gói bao gồm PETSc). 10 20(machine precision)(condition number)1020__float128
Jed Brown

2
Bạn lấy ước tính số điều kiện này từ đâu? Nếu bạn yêu cầu Matlab ước tính số điều kiện của ma trận với một khoảng trống, nó có thể cung cấp cho bạn vô hạn hoặc đôi khi nó có thể cung cấp cho bạn một số thực sự rất lớn (như những gì bạn có). Nếu hệ thống bạn đang xem có không gian trống và bạn biết nó là gì, bạn có thể chiếu nó ra và những gì bạn còn lại có thể có số điều kiện tốt hơn. Sau đó, bạn có thể sử dụng PETSc hoặc Trilinos hoặc những gì có bạn.
Daniel Shapero

3
Daniel- phương pháp SVD rút gọn được ZGELSS sử dụng xác định không gian null (các vectơ số ít liên kết với các giá trị số ít trong SVD là cơ sở cho N (A)) và tìm ra giải pháp bình phương nhỏ nhất chotrên . p e r p ( N ( A ) )minAxbperp(N(A))
Brian Borchers

Câu trả lời:


13

Khi bạn sử dụng ZGELSS để khắc phục vấn đề này, bạn đang sử dụng phân tách giá trị số ít bị cắt cụt để thường xuyên hóa vấn đề cực kỳ khó điều hòa này. Điều quan trọng là phải hiểu rằng thói quen thư viện này không cố gắng tìm một giải pháp bình phương tối thiểu cho , mà là cố gắng cân bằng việc tìm một giải pháp giảm thiểuchống lại việc giảm thiểu. x Một x - b Ax=bxAxb

Lưu ý rằng tham số RCOND được truyền cho ZGELSS có thể được sử dụng để chỉ định giá trị số ít nào nên được đưa vào và loại trừ khỏi tính toán của giải pháp. Mọi giá trị số ít hơn RCOND * S (1) (S (1) là giá trị số ít nhất) sẽ bị bỏ qua. Bạn chưa cho chúng tôi biết bạn đã đặt tham số RCOND trong ZGELSS như thế nào và chúng tôi không biết gì về mức độ nhiễu của các hệ số trong ma trận của bạn hoặc ở phía bên phải , vì vậy thật khó để nói bạn đã sử dụng chưa một lượng thích hợp của chính quy. bAb

Bạn dường như rất hài lòng với các giải pháp được chính quy hóa mà bạn đang sử dụng với ZGELSS, do đó, có vẻ như việc chính quy hóa được thực hiện bằng phương pháp SVD bị cắt cụt (tìm ra giải pháp tối thiểu trong số các giải pháp bình phương tối thiểu hóa tối thiểu trong không gian của các giải pháp được kéo dài bởi các vectơ số ít liên kết với các giá trị số ít lớn hơn RCOND * S (1)) là thỏa đáng với bạn. Một x - b xAxb

Câu hỏi của bạn có thể được điều chỉnh lại thành "Làm thế nào tôi có thể có được các giải pháp bình phương tối thiểu thường xuyên cho vấn đề bình phương tuyến tính lớn, thưa thớt và rất không điều hòa một cách hiệu quả?"

Đề nghị của tôi sẽ là sử dụng một phương pháp lặp (như CGLS hoặc LSQR) để giảm thiểu vấn đề bình phương tối thiểu được chuẩn hóa rõ ràng

minAxb2+α2x2

trong đó tham số chính quy được điều chỉnh sao cho bài toán bình phương nhỏ nhất được làm ẩm được điều hòa tốt và để bạn hài lòng với các giải pháp được chuẩn hóa. α


Tôi xin lỗi vì đã không đề cập đến điều này ngay từ đầu. Vấn đề đang được giải quyết là phương trình Helmholtz của âm học sử dụng FEM. Hệ thống được điều hòa kém vì cơ sở sóng phẳng được sử dụng để tính gần đúng giải pháp.
dùng1234

Các hệ số trong và đến từ đâu? Họ có đo dữ liệu không? Giá trị "chính xác" từ thiết kế của một số đối tượng (trong thực tế không thể gia công thành dung sai có 15 chữ số ...)? bAb
Brian Borchers

1
Các ma trận A và b được hình thành bằng cách sử dụng công thức yếu của Helmholtz PDE, xem: asadl.org/jasa/resource/1/jasman/v119/i3/ trộm
user1234

9

Jed Brown đã chỉ ra điều này trong các bình luận cho câu hỏi, nhưng thực sự không có gì nhiều bạn có thể làm với độ chính xác gấp đôi thông thường nếu số điều kiện của bạn lớn: trong hầu hết các trường hợp, bạn có thể sẽ không nhận được một chữ số chính xác trong giải pháp của bạn và tệ hơn nữa, bạn thậm chí không thể biết vì bạn không thể đánh giá chính xác phần dư tương ứng với vectơ giải pháp của bạn. Nói cách khác: đó không phải là câu hỏi bạn nên chọn bộ giải tuyến tính nào - không có bộ giải tuyến tính nào có thể làm điều gì đó hữu ích cho các ma trận như vậy.

Những loại tình huống thường xảy ra bởi vì bạn chọn một cơ sở không phù hợp. Ví dụ: bạn nhận được các ma trận điều hòa như vậy nếu bạn chọn các hàm làm cơ sở của phương pháp Galerkin. . Tôi sẽ khuyến khích bạn làm điều tương tự: suy nghĩ về việc cải tổ vấn đề của bạn để bạn không kết thúc với các loại ma trận này.1,x,x2,x3,...


Khi phân biệt một vấn đề đặt ra đối với PDE, ví dụ phương trình nhiệt ngược, chắc chắn chúng ta sẽ kết thúc bằng một phương trình ma trận điều hòa. Đây không phải là trường hợp mà chúng ta có thể giải quyết bằng cách xây dựng lại phương trình hoặc chọn một bộ giải ma trận hiệu quả hoặc cải thiện độ chính xác trong số dấu phẩy động. Trong trường hợp này [tức là các vấn đề nghịch đảo âm thanh], một phương pháp chính quy là bắt buộc.
tqviet

7

Cách đơn giản nhất / nhanh nhất để giải quyết các vấn đề không có điều kiện là tăng độ chính xác của các tính toán (bằng vũ lực). Một cách khác (nhưng không phải lúc nào cũng có thể) là xây dựng lại vấn đề của bạn.

Bạn có thể cần phải sử dụng độ chính xác gấp bốn lần (34 chữ số thập phân). Mặc dù 20 chữ số sẽ bị mất trong một khóa học (vì số điều kiện), bạn vẫn sẽ nhận được 14 chữ số chính xác.

Nếu nó là mối quan tâm, bây giờ bộ giải thưa thưa chính xác bốn cũng có sẵn trong MATLAB.

(Tôi là tác giả của hộp công cụ được đề cập).

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.