Diagonalization in eigs with Generalized Eigenvalue Problem with Positive Semidefinitive matrix
Afficher commentaires plus anciens
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 commentaires
Christine Tobler
le 20 Nov 2020
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
le 22 Nov 2020
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
le 22 Nov 2020
Modifié(e) : Thiago Morhy
le 22 Nov 2020
Bohan
le 15 Fév 2025
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.
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Linear Algebra dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
