Diagonalization in eigs with Generalized Eigenvalue Problem with Positive Semidefinitive matrix
古いコメントを表示
After I execute an eigs command in Matlab 2020b, using as input matrix A and B, i.e. a generalized eigenvalue problem, and 'SM' as sigma, it appears that unstable eigenvectors are obtained when A is a positive semidefinitive matrix, eventhougth the output eigenvalues are fine. The function I use is:
[V, D] = eigs(A, B, ArbitraryNumberOfEigenvalues, 'SM');
In short, the mathematical problem I'm coding is to model the response of a Finite Element Method Vibro-Acoustic problem, hence if we normalize the eigenvectors in respect to the B matrix and diagonalize the A matrix, we should be obtaining again the eigenvalues.
%% Normalization
nm = size(D, 1);
for j = 1 : nm
fm = V(:, j).' * B * V(:, j);
V(:, j) = V(:, j) / sqrt(fm);
end
%% Diagonalization
D = V.' * A * V;
But, as I said, the curve becomes really unstable:

Now, if I impose a boundary condition to the matrices, as example, excluding the rows and collums from 49th to 72th, A matrix becomes Positive Definite and the curve congerve smoothly:

I believe both curves should converge smoothly. Unfortunalety, I can't just use the output eigenvalues matrix, because I will use the eigenvectors to multiply with other matrices. Is this instability expected ? Is there any workaround ?
Thanks.
5 件のコメント
Christine Tobler
2020 年 11 月 20 日
EIGS with the 'sm' option is based on solving linear systems with the A matrix. When A is semidefinite, this is going to be badly conditioned (A is singular strictly speaking). Usually EIGS should give a warning about this, saying that the matrix is badly conditioned. In a singular case, the results can be wrong in these cases.
You can probably fix the issue by looking for all eigenvalues closest to some moderately small number, for example
sigma = -100;
[V, D] = eigs(A, B, ArbitraryNumberOfEigenvalues, sigma);
The "moderately small" should be with respect to an estimated norm of the matrix A, the goal being to get to a point where A - sigma*B is a well-conditioned matrix.
Bruno Luong
2020 年 11 月 22 日
Just wonder: Is your B matrix strictly definite positive? I see you divide by square root of
fm = V(:, j).' * B * V(:, j)
It can causes problem if B is not coercive operator.
Thiago Morhy
2020 年 11 月 22 日
編集済み: Thiago Morhy
2020 年 11 月 22 日
Bohan
2025 年 2 月 15 日
What is the output created by eig or eigs in Matlab if the B matrix is not strictly positive definite? I tried some examples and there are output but I am not sure what this means.
採用された回答
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Linear Algebra についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
