Diagonalization in eigs with Generalized Eigenvalue Problem with Positive Semidefinitive matrix
Mostrar comentarios más antiguos
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 comentarios
Christine Tobler
el 20 de Nov. de 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
el 22 de Nov. de 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
el 22 de Nov. de 2020
Editada: Thiago Morhy
el 22 de Nov. de 2020
Bohan
el 15 de Feb. de 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.
Respuesta aceptada
Más respuestas (0)
Categorías
Más información sobre Linear Algebra en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
