File tree Expand file tree Collapse file tree 2 files changed +9
-2
lines changed Expand file tree Collapse file tree 2 files changed +9
-2
lines changed Original file line number Diff line number Diff line change 408
408
eigvals (D:: Diagonal{<:Number} ) = D. diag
409
409
eigvals (D:: Diagonal ) = [eigvals (x) for x in D. diag] # For block matrices, etc.
410
410
eigvecs (D:: Diagonal ) = Matrix {eltype(D)} (I, size (D))
411
- eigfact (D:: Diagonal ) = Eigen (eigvals (D), eigvecs (D))
411
+ function eigfact (D:: Diagonal ; permute:: Bool = true , scale:: Bool = true )
412
+ if any (! isfinite, D. diag)
413
+ throw (ArgumentError (" matrix contains Infs or NaNs" ))
414
+ end
415
+ Eigen (eigvals (D), eigvecs (D))
416
+ end
412
417
413
418
# Singular system
414
419
svdvals (D:: Diagonal{<:Number} ) = sort! (abs .(D. diag), rev = true )
Original file line number Diff line number Diff line change @@ -99,7 +99,9 @@ julia> F[:vectors]
99
99
"""
100
100
function eigfact (A:: StridedMatrix{T} ; permute:: Bool = true , scale:: Bool = true ) where T
101
101
S = promote_type (Float32, typeof (one (T)/ norm (one (T))))
102
- eigfact! (copy_oftype (A, S), permute = permute, scale = scale)
102
+ AA = copy_oftype (A, S)
103
+ isdiag (AA) && return eigfact (Diagonal (AA), permute = permute, scale = scale)
104
+ return eigfact! (AA, permute = permute, scale = scale)
103
105
end
104
106
eigfact (x:: Number ) = Eigen ([x], fill (one (x), 1 , 1 ))
105
107
You can’t perform that action at this time.
0 commit comments