You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The generalized eigenvalue decomposition is not implemented in GenericLinearAlgebra:
julia>using GenericLinearAlgebra, DoubleFloats, LinearAlgebra
julia> A =rand(Double64, 5, 5); B =rand(Double64, 5, 5);
julia>eigvals(A, B)
ERROR: MethodError: no method matching eigvals!(::Matrix{Double64}, ::Matrix{Double64})
I am working on a pull request to implement this. It is based on code kindly provided to me by @thijssteel, who did his PhD on the topic. It uses the single shift or double shift QZ algorithm. The PR currently implements eigvals(A, B):
julia>using GenericLinearAlgebra
julia>eigvals(A, B)
5-element Vector{Complex{Double64}}:-7.55847194974678743120673992727391194+0.0im-7.6691169090262111372117306819298531e-01+0.0im9.77704965303924447091419817528601559e-03-6.82491740678931004263096986923651618e-01im9.77704965303924447091419817528601559e-03+6.82491740678931004263096986923651618e-01im2.67081937010893995823217172351462554+0.0im
The speed and accuracy of the implementation seem somewhat comparable to that of LinearAlgebra for Float64:
julia> n =150; A =rand(n, n); B =rand(n, n);
julia>@time v1 =eigvals(A, B);
0.014203 seconds (16 allocations:411.875 KiB)
julia>@time v2 = GenericLinearAlgebra.generalized_eigvals(A, B);
0.017426 seconds (5.10 k allocations:754.531 KiB)
julia>norm(abs.(v1)-abs.(v2)) # abs to account for different ordering of complex conjugate pairs8.884694390317172e-13
Further improvements may be possible, as the code does not include any of the optimizations that @thijssteel worked on (and which are made available in recent versions of LAPACK).
I have a use case for generalized eigenvalues as part of the AAA algorithm for computing rational approximations. It would be nice if it works with GenericLinearAlgebra.
The text was updated successfully, but these errors were encountered:
The generalized eigenvalue decomposition is not implemented in GenericLinearAlgebra:
I am working on a pull request to implement this. It is based on code kindly provided to me by @thijssteel, who did his PhD on the topic. It uses the single shift or double shift QZ algorithm. The PR currently implements
eigvals(A, B)
:The speed and accuracy of the implementation seem somewhat comparable to that of LinearAlgebra for
Float64
:Further improvements may be possible, as the code does not include any of the optimizations that @thijssteel worked on (and which are made available in recent versions of LAPACK).
I have a use case for generalized eigenvalues as part of the AAA algorithm for computing rational approximations. It would be nice if it works with GenericLinearAlgebra.
The text was updated successfully, but these errors were encountered: