Skip to content

Commit 472bc08

Browse files
committed
Merge pull request #2725 from jiahao/maxeig
Adds mineig and maxeig methods
2 parents 91c2b99 + 76ad001 commit 472bc08

File tree

6 files changed

+29
-1
lines changed

6 files changed

+29
-1
lines changed

base/exports.jl

+2
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,8 @@ export
566566
eig,
567567
eigfact,
568568
eigfact!,
569+
eigmax,
570+
eigmin,
569571
eigs,
570572
eigvals,
571573
eigvecs,

base/linalg.jl

+2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ export
4949
eig,
5050
eigfact,
5151
eigfact!,
52+
eigmax,
53+
eigmin,
5254
eigs,
5355
eigvals,
5456
eigvecs,

base/linalg/factorization.jl

+10
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,16 @@ end
443443

444444
eigvals(x::Number) = [one(x)]
445445

446+
#Computes maximum and minimum eigenvalue
447+
function eigmax(A::Union(Number, StridedMatrix))
448+
v = eigvals(A)
449+
iscomplex(v) ? error("Complex eigenvalues cannot be ordered") : max(v)
450+
end
451+
function eigmin(A::Union(Number, StridedMatrix))
452+
v = eigvals(A)
453+
iscomplex(v) ? error("Complex eigenvalues cannot be ordered") : min(v)
454+
end
455+
446456
inv(A::EigenDense) = diagmm(A.vectors, 1.0/A.values)*A.vectors'
447457
det(A::EigenDense) = prod(A.values)
448458

base/linalg/hermitian.jl

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ eigvals(A::Hermitian, il::Int, ih::Int) = LAPACK.syevr!('N', 'I', A.uplo, copy(A
3737
eigvals(A::Hermitian, vl::Real, vh::Real) = LAPACK.syevr!('N', 'V', A.uplo, copy(A.S), vl, vh, 0, 0, -1.0)[1]
3838
eigvals(A::Hermitian) = eigvals(A, 1, size(A, 1))
3939
eigmax(A::Hermitian) = eigvals(A, size(A, 1), size(A, 1))[1]
40+
eigmin(A::Hermitian) = eigvals(A, 1, 1)[1]
4041

4142
function expm(A::Hermitian)
4243
F = eigfact(A)

base/linalg/tridiag.jl

+5
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ eig(m::SymTridiagonal) = LAPACK.stegr!('V', copy(m.dv), copy(m.ev))
6868
eigvals(m::SymTridiagonal, il::Int, iu::Int) = LAPACK.stebz!('I', 'E', 0.0, 0.0, il, iu, -1.0, copy(m.dv), copy(m.ev))[1]
6969
eigvals(m::SymTridiagonal, vl::Float64, vu::Float64) = LAPACK.stebz!('V', 'E', vl, vu, 0, 0, -1.0, copy(m.dv), copy(m.ev))[1]
7070
eigvals(m::SymTridiagonal) = LAPACK.stebz!('A', 'E', 0.0, 0.0, 0, 0, -1.0, copy(m.dv), copy(m.ev))[1]
71+
72+
#Computes largest and smallest eigenvalue
73+
eigmax(m::SymTridiagonal) = eigvals(m, size(m, 1), size(m, 1))[1]
74+
eigmin(m::SymTridiagonal) = eigvals(m, 1, 1)[1]
75+
7176
#Compute selected eigenvectors only corresponding to particular eigenvalues
7277
eigvecs(m::SymTridiagonal) = eig(m)[2]
7378
eigvecs{Eigenvalue<:Real}(m::SymTridiagonal, eigvals::Vector{Eigenvalue}) = LAPACK.stein!(m.dv, m.ev, eigvals)

doc/stdlib/linalg.rst

+9-1
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,19 @@ Linear algebra functions in Julia are largely implemented by calling functions f
9595

9696
Returns the eigenvalues of ``A``.
9797

98+
.. function:: eigmax(A)
99+
100+
Returns the largest eigenvalue of ``A``.
101+
102+
.. function:: eigmin(A)
103+
104+
Returns the smallest eigenvalue of ``A``.
105+
98106
.. function:: eigvecs(A, [eigvals])
99107

100108
Returns the eigenvectors of ``A``.
101109

102-
If the optional vector of eigenvalues ``eigvals`` is specified, returns the specific corresponding eigenvectors. (Currently this optional syntax only works for SymTridiagonal matrices.)
110+
For SymTridiagonal matrices, if the optional vector of eigenvalues ``eigvals`` is specified, returns the specific corresponding eigenvectors.
103111

104112
.. function:: eigfact(A)
105113

0 commit comments

Comments
 (0)