@@ -2,8 +2,6 @@ using Printf
2
2
using LinearAlgebra
3
3
using LinearAlgebra: givensAlgorithm
4
4
5
- import LinearAlgebra: eigen, eigen!, eigvals, eigvals!, mul!
6
-
7
5
struct SymmetricTridiagonalFactorization{T} <: Factorization{T}
8
6
uplo:: Char
9
7
factors:: Matrix{T}
@@ -19,7 +17,7 @@ struct EigenQ{T} <: AbstractMatrix{T}
19
17
τ:: Vector{T}
20
18
end
21
19
22
- getq (S:: SymmetricTridiagonalFactorization ) = EigenQ (S. uplo, S. factors, S. τ)
20
+ LinearAlgebra . getq (S:: SymmetricTridiagonalFactorization ) = EigenQ (S. uplo, S. factors, S. τ)
23
21
24
22
Base. size (Q:: EigenQ ) = (size (Q. factors, 1 ), size (Q. factors, 1 ))
25
23
function Base. size (Q:: EigenQ , i:: Integer )
@@ -32,7 +30,7 @@ function Base.size(Q::EigenQ, i::Integer)
32
30
end
33
31
end
34
32
35
- function mul ! (Q:: EigenQ , B:: StridedVecOrMat )
33
+ function LinearAlgebra . lmul ! (Q:: EigenQ , B:: StridedVecOrMat )
36
34
m, n = size (B)
37
35
if size (Q, 1 ) != m
38
36
throw (DimensionMismatch (" " ))
@@ -73,7 +71,7 @@ function mul!(Q::EigenQ, B::StridedVecOrMat)
73
71
return B
74
72
end
75
73
76
- function mul ! (A:: StridedMatrix , Q:: EigenQ )
74
+ function LinearAlgebra . rmul ! (A:: StridedMatrix , Q:: EigenQ )
77
75
m, n = size (A)
78
76
if size (Q, 1 ) != n
79
77
throw (DimensionMismatch (" " ))
@@ -114,7 +112,7 @@ function mul!(A::StridedMatrix, Q::EigenQ)
114
112
return A
115
113
end
116
114
117
- Base. Array (Q:: EigenQ ) = mul ! (Q, Matrix {eltype(Q)} (I, size (Q, 1 ), size (Q, 1 )))
115
+ Base. Array (Q:: EigenQ ) = lmul ! (Q, Matrix {eltype(Q)} (I, size (Q, 1 ), size (Q, 1 )))
118
116
119
117
function _updateVectors! (c, s, j, vectors)
120
118
@inbounds for i = 1 : size (vectors, 1 )
@@ -523,49 +521,56 @@ function symtriUpper!(AS::StridedMatrix{T},
523
521
SymmetricTridiagonalFactorization (' U' , AS, τ, SymTridiagonal (real (diag (AS)), real (diag (AS, 1 ))))
524
522
end
525
523
526
- eigvals! (A:: SymmetricTridiagonalFactorization ) = eigvalsPWK! (A. diagonals, eps (eltype (A. diagonals)), false )
527
- eigvals! (A:: SymTridiagonal ) = eigvalsPWK! (A, eps (eltype (A)) , false )
528
- eigvals! (A:: Hermitian ) = eigvals! (symtri! (A))
524
+ _eigvals! (A:: SymmetricTridiagonalFactorization ) = eigvalsPWK! (A. diagonals, eps (eltype (A. diagonals)), false )
525
+ _eigvals! (A:: SymTridiagonal ) = eigvalsPWK! (A, eps (eltype (A)) , false )
526
+ _eigvals! (A:: Hermitian ) = eigvals! (symtri! (A))
527
+
528
+ LinearAlgebra. eigvals! (A:: SymmetricTridiagonalFactorization ) = _eigvals! (A)
529
+ LinearAlgebra. eigvals! (A:: SymTridiagonal ) = _eigvals! (A)
530
+ LinearAlgebra. eigvals! (A:: Hermitian ) = _eigvals! (A)
529
531
530
- eig! (A:: SymmetricTridiagonalFactorization ) = eigQL! (A. diagonals, Array (getq (A)), eps (eltype (A. diagonals)), false )
531
- eig! (A:: SymTridiagonal ) = eigQL! (A, Matrix {eltype(A)} (I, size (A, 1 ), size (A, 1 )), eps (eltype (A)), false )
532
- eig! (A:: Hermitian ) = eig! (symtri! (A))
532
+ _eigen! (A:: SymmetricTridiagonalFactorization ) =
533
+ LinearAlgebra. Eigen (eigQL! (A. diagonals, Array (getq (A)), eps (eltype (A. diagonals)), false )... )
534
+ _eigen! (A:: SymTridiagonal ) =
535
+ LinearAlgebra. Eigen (eigQL! (A, Matrix {eltype(A)} (I, size (A, 1 ), size (A, 1 )), eps (eltype (A)), false )... )
536
+ _eigen! (A:: Hermitian ) = _eigen! (symtri! (A))
533
537
534
- function eig2! (A:: SymmetricTridiagonalFactorization , tol = eps (real (float (one (eltype (A))))), debug = false )
538
+ LinearAlgebra. eigen! (A:: SymmetricTridiagonalFactorization ) = _eigen! (A)
539
+ LinearAlgebra. eigen! (A:: SymTridiagonal ) = _eigen! (A)
540
+ LinearAlgebra. eigen! (A:: Hermitian ) = _eigen! (A)
541
+
542
+ function eigen2! (A:: SymmetricTridiagonalFactorization , tol = eps (real (float (one (eltype (A))))), debug = false )
535
543
V = zeros (eltype (A), 2 , size (A, 1 ))
536
544
V[1 ] = 1
537
545
V[end ] = 1
538
- eigQL! (A. diagonals, mul ! (V, getq (A)), tol, debug)
546
+ eigQL! (A. diagonals, rmul ! (V, getq (A)), tol, debug)
539
547
end
540
- function eig2 ! (A:: SymTridiagonal , tol = eps (real (float (one (eltype (A))))), debug = false )
548
+ function eigen2 ! (A:: SymTridiagonal , tol = eps (real (float (one (eltype (A))))), debug = false )
541
549
V = zeros (eltype (A), 2 , size (A, 1 ))
542
550
V[1 ] = 1
543
551
V[end ] = 1
544
552
eigQL! (A, V, tol, debug)
545
553
end
546
- eig2! (A:: Hermitian , tol = eps (float (real (one (eltype (A))))), debug = false ) = eig2! (symtri! (A), tol, debug)
547
-
548
- eigen! (A:: SymTridiagonal ) = LinearAlgebra. Eigen (eig! (A)... )
549
- eigen! (A:: LinearAlgebra.Hermitian ) = LinearAlgebra. Eigen (eig! (A)... )
554
+ eigen2! (A:: Hermitian , tol = eps (float (real (one (eltype (A))))), debug = false ) = eigen2! (symtri! (A), tol, debug)
550
555
551
- eig2 (A:: SymTridiagonal , tol = eps (float (real (one (eltype (A))))), debug = false ) = eig2 ! (copy (A), tol, debug)
552
- eig2 (A:: Hermitian , tol = eps (float (real (one (eltype (A))))), debug = false ) = eig2 ! (copy (A), tol, debug)
556
+ eigen2 (A:: SymTridiagonal , tol = eps (float (real (one (eltype (A))))), debug = false ) = eigen2 ! (copy (A), tol, debug)
557
+ eigen2 (A:: Hermitian , tol = eps (float (real (one (eltype (A))))), debug = false ) = eigen2 ! (copy (A), tol, debug)
553
558
554
559
# First method of each type here is identical to the method defined in
555
560
# LinearAlgebra but is needed for disambiguation
556
- function eigvals (A:: Hermitian{<:Real} )
561
+ function LinearAlgebra . eigvals (A:: Hermitian{<:Real} )
557
562
T = typeof (sqrt (zero (eltype (A))))
558
563
return eigvals! (LinearAlgebra. copy_oftype (A, T))
559
564
end
560
- function eigvals (A:: Hermitian )
565
+ function LinearAlgebra . eigvals (A:: Hermitian )
561
566
T = typeof (sqrt (zero (eltype (A))))
562
567
return eigvals! (LinearAlgebra. copy_oftype (A, T))
563
568
end
564
- function eigen (A:: Hermitian{<:Real} )
569
+ function LinearAlgebra . eigen (A:: Hermitian{<:Real} )
565
570
T = typeof (sqrt (zero (eltype (A))))
566
571
return eigen! (LinearAlgebra. copy_oftype (A, T))
567
572
end
568
- function eigen (A:: Hermitian )
573
+ function LinearAlgebra . eigen (A:: Hermitian )
569
574
T = typeof (sqrt (zero (eltype (A))))
570
575
return eigen! (LinearAlgebra. copy_oftype (A, T))
571
576
end
0 commit comments