Giải quyết một vấn đề eigenvalue tổng quát không phải hermiti từ phân tích ổn định tuyến tính bằng SLEPc


8

Tôi có một vấn đề ma trận tổng quát: từ phương pháp phổ trên bài toán phân tích ổn định tuyến tính. Ma trận B của tôi là đường chéo và bán xác định dương. A là không ẩn sĩ và phức tạp.Ax=λBx

Vấn đề của tôi về cơ bản là khi sử dụng bộ giải eigenvalue tổng quát SLEPc, tôi gặp lỗi "trục không trong hệ số LU". Phần còn lại dưới đây là chi tiết về vấn đề và những điều tôi đã thử cho đến nay. Cảm ơn đã giúp đỡ!

Chi tiết về vấn đề

Ma trận sẽ ở mức lớn nhất khoảng 48000 x 48000 và tôi muốn tìm giá trị riêng. Các giá trị riêng mà tôi quan tâm là những cái có phần thực lớn nhất gần 0 + 0i. Lý tưởng nhất, tôi muốn có thể tìm thấy chúng ngay cả khi chúng là nội bộ (tức là khi có các giá trị riêng khác với phần thực dương lớn hơn trong phổ). Tuy nhiên, tôi sẽ rất vui nếu tôi có thể làm cho nó hoạt động cho các vấn đề trong đó tất cả các giá trị riêng có các phần thực <0 ngoài giá trị riêng của lợi ích.

Hiện tại tôi đã sử dụng các hàm linalg.eig và spzzy.eigs scipy. Theo tôi biết, những cái này sử dụng LAPACK và ARPACK tương ứng để thực hiện các công việc nặng. Tôi đã quyết định xem liệu tôi có thể đạt được hiệu suất tốt hơn thông qua việc sử dụng thư viện SLEPc hay không. Nếu đây là một quyết định tồi tệ, hãy cho tôi biết!

Tôi muốn chuyển sang sử dụng PETSc với bộ giải eigenvalue SLEPc. Tôi đã thử SLEPc bằng cách sử dụng các ví dụ được cung cấp như một phần của hướng dẫn. Bài tập 7 ( http://www.grycap.upv.es/slepc/handson/handson3.html ) đọc các ma trận A và B từ một tệp và xuất ra các giải pháp. Tôi đã làm điều này để làm việc tốt bằng cách sử dụng ma trận được cung cấp. Tuy nhiên, nếu tôi thay thế một phiên bản thử nghiệm có kích thước nhỏ hơn cho vấn đề của mình (6000x6000), tôi sẽ gặp nhiều lỗi khác nhau tùy thuộc vào các đối số dòng lệnh tôi cung cấp.

Vấn đề chính tôi gặp phải là lỗi: "trục không trong hệ số LU!" khi tôi sử dụng các thiết lập mặc định.

Tôi nghĩ rằng điều này có thể liên quan đến thực tế là B chứa các hàng số không, mặc dù hiểu biết của tôi về đại số tuyến tính là hơi cơ bản. Điều này có đúng không?

Tôi đã thử thiết lập các tùy chọn được đề xuất trên trang web của petc, -pc_factor_shift_type NONZERO, v.v. nhưng tất cả những gì tôi nhận được là một cảnh báo bổ sung rằng các tùy chọn này không được sử dụng

Tôi giả định rằng đây là một vấn đề với bộ tiền xử lý, vì vậy tôi đã thử đặt -eps_target thành 0.1 và cả có và không chỉ định -vert_type sinvert và shift. Tôi vẫn nhận được cùng một lỗi.

Sau đó, tôi đã thử -st_pc_type jacobi và st_pc_type bjacobi. jacobi chạy, nhưng không tạo ra bất kỳ giá trị riêng nào. Block jacobi thực hiện một nhân tố LU và lại đưa ra lỗi tương tự.

Phương thức mặc định là krylov-schur, vì vậy tôi đã thử nghiệm với các tùy chọn jd -eps_type gd và -eps_type. Thật không may, những thứ này dường như tạo ra các giá trị riêng vô nghĩa, hoàn toàn không xuất hiện trên phổ khi tôi giải quyết bằng LAPACK trong scipy.

Tôi biết vấn đề ma trận của tôi không phải là số ít, bởi vì tôi có thể giải quyết nó bằng scipy.

Bạn có biết bất kỳ cuốn sách / hướng dẫn nào tôi có thể cần đọc ngoài hướng dẫn sử dụng PETSC và SLEPC để hiểu hành vi của tất cả những người giải quyết khác nhau này không?

Đầu ra từ trường hợp không có tùy chọn dòng lệnh được đưa ra dưới đây.

Cảm ơn rất nhiều vì đã dành thời gian để đọc bài viết đầu tiên của tôi!

Trân trọng, Toby

Đầu ra thiết bị đầu cuối từ SLEPc

tobymac: SLEPC toby $ mpiexec ./ex7 -f1 LHS-N7-M40-Re0.0-b0.1-Wi5.0-amp0.02.petsc -f2 RHS-N7-M40-Re0.0-b0.1- Wi5.0-amp0.02.petsc -eps_view

Tổng quát bản địa được lưu trữ trong tập tin.

[0] LSCI PETSC: --------------------- Thông báo lỗi --------------------- --------------- [0] PETSC ERROR: Đã phát hiện trục xoay số 0 trong hệ số LU: xem http://www.mcs.anl.gov/petsc/documentation/faq.html#ZeroPOLL! [0] PETSC ERROR: Hàng trống trong ma trận: hàng theo thứ tự ban đầu 2395 theo thứ tự hoán vị 3600! [0] LRI PETSC: -------------------------------------------- ---------------------------- [0] PETSC ERROR: Phiên bản phát hành của vật nuôi 3.3.0, Bản vá 5, Thứ bảy ngày 1 tháng 12 15:10 : 41 CST 2012 [0] PETSC ERROR: Xem tài liệu / thay đổi / index.html để cập nhật gần đây. [0] PETSC ERROR: Xem docs / faq.html để biết các gợi ý về xử lý sự cố. [0] PETSC ERROR: Xem docs / index.html để biết các trang thủ công. [0] LRI PETSC: -------------------------------------------- ---------------------------- [0] PETSC ERROR: ./ex7 trên arch-darw có tên tobymac bởi toby Thu Jul 25 10 : 20: 40 2013 [0] PETSC ERROR: Các thư viện được liên kết từ / opt / local / lib [0] PETSC ERROR: Cấu hình chạy vào Tue Jul 23 15:11:27 2013 [0] PETSC ERROR:

[0] PETSC ERROR: PCSetUp () dòng 832 trong /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/sp/ LRI: KSPSetUp () dòng 278 trong /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/ksp/ ) dòng 176 trong /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/pc/impls/redaleigh/red 832 in /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/pc/interface/precon.c [0] /local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/ksp/interface/itfunc.c [0] PETSC ERROR: STSetUp_Shift () dòng 94 trong src / st / impls / shift / shift.c [0] PETSC ERROR: STSetUp () dòng 280 trong src / st / interface / stsolve.c [0] PETSC ERROR : Dòng EPSInUp () 204 trong src / eps / interface / setup.c [0] PETSC ERROR: EPSSolve () dòng 109 trong src / eps / interface / giải.c tobymac: SLEPC toby $


Hãy suy nghĩ về một hàng của tất cả các số không có nghĩa là gì một chút. Viết ra phương trình quyết định nếu nó hữu ích. :)
meawoppl 23/214

Tôi có một vấn đề tương tự. Nhưng bạn đã thử ./ex7 -st_type sinvert .. nó hoạt động. Nhưng tôi không nhận được eigenvector chính xác, nhưng tôi nhận được giá trị riêng. Bạn đã quản lý để giải quyết vấn đề của bạn?
han17

Câu trả lời:


1

Trong các vấn đề của hình thức này, bạn thường cần là số ít, tức là nó không thể đảo ngược. Bạn không nói đến từ đâu, vì vậy tôi không biết gì về của bạn nhưng bạn cần chắc chắn rằng đó không phải là số ít.A , B BBA,BB


Cảm ơn đã trả lời, A xuất phát từ sự phân rã phổ 2D của các phương trình phân tích ổn định tuyến tính cho dòng chảy Couette mặt phẳng nhớt. B bằng 0 cho 40% hàng đầu tiên, sau này nó có 1.0 trên đường chéo. Vì vậy, tôi đoán B của tôi là số ít. Điều này làm cho vấn đề không thể giải quyết? Tôi bối rối không biết làm thế nào scipy mang lại cho tôi kết quả thuyết phục như vậy nếu điều này là sự thật.
Toby Searle

Tôi tin rằng scipy đang làm , điều này có ổn không? A1Bx=λ1x
Toby Searle

Giả sử là số ít, sau đó sẽ có các vectơ trong nhân của nó sao cho , tức là chúng là các hàm riêng tương ứng với thể hiện rõ ràng một vấn đề cho định nghĩa của các giá trị riêng tổng quát của vấn đề ban đầu. Do đó, người ta thường muốn là số ít. x A - 1 B x = 0 λ - 1 = 0 BBxA1Bx=0λ1=0B
Wolfgang Bangerth
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.