I´m trying to implement a relatively complex model that I found in literature. It involves to calculate the spectrum of a linearized system in order to evaluate the stability of the steady-state solution.

Thus I´m using

`eigvals(pinv(A)*B)`

The figure below shows a comparision between my results and literature. Mainly for high eigenvalues there is a large shift/ scatering. Is there a problem with my implementation or is it something related with eigvals or pinv functions?

To summarize: you compute `eigvals(pinv(A)*(B))`

. You do not tell us, what kind of matrices `A`

and `B`

are. Square? Tall? Wide? Large? Small? Then you tell us, that in some literature they obtain slightly different results. So, what kind of feedback are you expecting here?

By the way, in those unspecified papers are they also solving the problem of finding eigenvalues of exactly `pinv(A)*B`

? I can only guess that perhaps the original problem is to solve the generalized eigenvalue problem, that is, find a (tuple of) scalars `λ`

, where for each `λ`

there is a corresponding (generalized) eigenvector `v`

, that is, (following your usage of `A`

and `B`

) the equation `λAv = Bv`

must be satisfied. Is my guess correct? If yes, the good news for you is that the Julia eigvals function accepts two arguments too, that is, it is ready to solve the generalized eigenvalue problem without the need to explicitly compute (pseudo)inverse and solve the standard eigenvalue problem.

Thank you.

Yes, it is a generalized eigenvalue problem, λAv = Bv, but A e B are tall matrices, would say 404x402. eigvals does not accept not square matrices, then it seem it is necessary to use pinv, also.

One other option could be to rewrite the problem as B^T A v = m B^T B v, where the matrices now should be square. This is essentially what `pinv `

does I think, but without evaluating an explicit inversion (which might face numerical stability issues)