diff --git a/src/eigen.jl b/src/eigen.jl index 0837491a..f565a547 100644 --- a/src/eigen.jl +++ b/src/eigen.jl @@ -276,6 +276,8 @@ eigvecs(A::Union{Number, AbstractMatrix}; kws...) = eigvecs(F::Union{Eigen, GeneralizedEigen}) = F.vectors eigvals(F::Union{Eigen, GeneralizedEigen}) = F.values +eigmin(F::Union{Eigen, GeneralizedEigen}) = minimum(eigvals(F)) +eigmax(F::Union{Eigen, GeneralizedEigen}) = maximum(eigvals(F)) """ eigvals!(A; permute::Bool=true, scale::Bool=true, sortby) -> values diff --git a/test/eigen.jl b/test/eigen.jl index 67e58d34..974b657c 100644 --- a/test/eigen.jl +++ b/test/eigen.jl @@ -44,6 +44,15 @@ aimg = randn(n,n)/2 @test inv(a) ≈ inv(f) @test isposdef(a) == isposdef(f) @test eigvals(f) === f.values + + if all(isreal, eigvals(f)) + @test eigmin(f) == minimum(eigvals(f)) + @test eigmax(f) == maximum(eigvals(f)) + else + @test_throws MethodError eigmin(f) + @test_throws MethodError eigmax(f) + end + @test eigvecs(f) === f.vectors @test Array(f) ≈ a @@ -81,6 +90,15 @@ aimg = randn(n,n)/2 @test prod(f.values) ≈ prod(eigvals(asym_sg/(ASG2))) atol=200ε @test eigvecs(asym_sg, ASG2) == f.vectors @test eigvals(f) === f.values + + if all(isreal, eigvals(f)) + @test eigmin(f) == minimum(eigvals(f)) + @test eigmax(f) == maximum(eigvals(f)) + else + @test_throws MethodError eigmin(f) + @test_throws MethodError eigmax(f) + end + @test eigvecs(f) === f.vectors @test_throws FieldError f.Z