Skip to content

Commit f3f05e3

Browse files
committed
Add eigvals(::Eigen) and eigvecs(::Eigen) methods
Ref: #3021 #12747
1 parent 9b30678 commit f3f05e3

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

base/linalg/eigen.jl

+3-1
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,10 @@ function eig(A::Union{Number, AbstractMatrix}; kwargs...)
6767
F.values, F.vectors
6868
end
6969
#Calculates eigenvectors
70-
eigvecs(A::Union{Number, AbstractMatrix}, args...; kwargs...) = eigfact(A, args...; kwargs...)[:vectors]
70+
eigvecs(A::Union{Number, AbstractMatrix}, args...; kwargs...) = eigvecs(eigfact(A, args...; kwargs...))
71+
eigvecs{T,V,S,U}(F::Union{Eigen{T,V,S,U}, GeneralizedEigen{T,V,S,U}}) = F[:vectors]::S
7172

73+
eigvals{T,V,S,U}(F::Union{Eigen{T,V,S,U}, GeneralizedEigen{T,V,S,U}}) = F[:values]::U
7274
function eigvals!{T<:BlasReal}(A::StridedMatrix{T}; permute::Bool=true, scale::Bool=true)
7375
issym(A) && return eigvals!(Symmetric(A))
7476
_, valsre, valsim, _ = LAPACK.geevx!(permute ? (scale ? 'B' : 'P') : (scale ? 'S' : 'N'), 'N', 'N', 'N', A)

test/linalg/eigen.jl

+4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ debug && println("non-symmetric eigen decomposition")
2929
f = eigfact(a)
3030
@test_approx_eq det(a) det(f)
3131
@test_approx_eq inv(a) inv(f)
32+
@test eigvals(f) === f[:values]
33+
@test eigvecs(f) === f[:vectors]
3234

3335
num_fact = eigfact(one(eltya))
3436
@test num_fact.values[1] == one(eltya)
@@ -47,6 +49,8 @@ debug && println("symmetric generalized eigenproblem")
4749
@test_approx_eq f[:values] eigvals(asym_sg, a_sg'a_sg)
4850
@test_approx_eq_eps prod(f[:values]) prod(eigvals(asym_sg/(a_sg'a_sg))) 200ε
4951
@test eigvecs(asym_sg, a_sg'a_sg) == f[:vectors]
52+
@test eigvals(f) === f[:values]
53+
@test eigvecs(f) === f[:vectors]
5054
@test_throws KeyError f[:Z]
5155

5256
debug && println("Non-symmetric generalized eigenproblem")

0 commit comments

Comments
 (0)