@@ -162,7 +162,7 @@ function eig2x2!(d::StridedVector, e::StridedVector, j::Integer, vectors::Matrix
162
162
return c, s
163
163
end
164
164
165
- function eigvalsPWK! (S:: SymTridiagonal{T} ; tol = eps (T), sortby :: Union{Function,Nothing} = LinearAlgebra . eigsortby ) where {T<: Real }
165
+ function eigvalsPWK! (S:: SymTridiagonal{T} ; tol = eps (T)) where {T<: Real }
166
166
d = S. dv
167
167
e = S. ev
168
168
n = length (d)
@@ -217,9 +217,7 @@ function eigvalsPWK!(S::SymTridiagonal{T}; tol = eps(T), sortby::Union{Function,
217
217
end
218
218
end
219
219
220
- # LinearAlgebra.eigvals will pass sortby=nothing but LAPACK always sort the symmetric
221
- # eigenvalue problem so we'll will do the same here
222
- LinearAlgebra. sorteig! (d, sortby === nothing ? LinearAlgebra. eigsortby : sortby)
220
+ return d
223
221
end
224
222
225
223
function eigQL! (
@@ -287,8 +285,8 @@ function eigQL!(
287
285
end
288
286
end
289
287
end
290
- p = sortperm (d)
291
- return d[p] , vectors[:, p]
288
+
289
+ return d, vectors
292
290
end
293
291
294
292
function eigQR! (
@@ -339,8 +337,8 @@ function eigQR!(
339
337
end
340
338
end
341
339
end
342
- p = sortperm (d)
343
- return d[p] , vectors[:, p]
340
+
341
+ return d, vectors
344
342
end
345
343
346
344
# Own implementation based on Parlett's book
@@ -575,45 +573,71 @@ function symtriUpper!(
575
573
)
576
574
end
577
575
576
+ _eigvals! (A:: SymTridiagonal ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
577
+ LinearAlgebra. sorteig! (eigvalsPWK! (A; tol), sortby == nothing ? LinearAlgebra. eigsortby : sortby)
578
578
579
579
_eigvals! (A:: SymmetricTridiagonalFactorization ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
580
- eigvalsPWK ! (A. diagonals; tol, sortby)
580
+ _eigvals ! (A. diagonals; tol, sortby)
581
581
582
- _eigvals! (A:: SymTridiagonal ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) = eigvalsPWK! (A; tol, sortby)
582
+ _eigvals! (A:: Hermitian ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
583
+ _eigvals! (symtri! (A); tol, sortby)
583
584
584
- _eigvals! (A:: Hermitian ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) = eigvals! (symtri! (A); tol, sortby)
585
-
586
- _eigvals! (A:: Symmetric{<:Real} ; tol = eps (eltype (A)), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) = eigvals! (symtri! (A); tol, sortby)
585
+ _eigvals! (A:: Symmetric{<:Real} ; tol = eps (eltype (A)), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
586
+ _eigvals! (symtri! (A); tol, sortby)
587
587
588
588
LinearAlgebra. eigvals! (A:: SymmetricTridiagonalFactorization ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
589
589
_eigvals! (A; tol, sortby)
590
590
591
591
LinearAlgebra. eigvals! (A:: SymTridiagonal ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
592
592
_eigvals! (A; tol, sortby)
593
593
594
- LinearAlgebra. eigvals! (A:: Hermitian ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) = _eigvals! (A; tol, sortby)
594
+ LinearAlgebra. eigvals! (A:: Hermitian ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
595
+ _eigvals! (A; tol, sortby)
595
596
596
- LinearAlgebra. eigvals! (A:: Symmetric{<:Real} ; tol = eps (eltype (A)), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) = _eigvals! (A; tol, sortby)
597
+ LinearAlgebra. eigvals! (A:: Symmetric{<:Real} ; tol = eps (eltype (A)), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
598
+ _eigvals! (A; tol, sortby)
597
599
598
600
_eigen! (A:: SymmetricTridiagonalFactorization ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
599
- LinearAlgebra. Eigen (LinearAlgebra. sorteig! (eigQL! (A. diagonals, vectors = Array (A. Q), tol = tol)... , sortby)... )
601
+ LinearAlgebra. Eigen (
602
+ LinearAlgebra. sorteig! (
603
+ eigQL! (
604
+ A. diagonals;
605
+ vectors = Array (A. Q),
606
+ tol
607
+ )... ,
608
+ sortby == nothing ? LinearAlgebra. eigsortby : sortby
609
+ )...
610
+ )
600
611
601
- _eigen! (A:: SymTridiagonal ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) = LinearAlgebra. Eigen (
602
- eigQL! (A, vectors = Matrix {eltype(A)} (I, size (A, 1 ), size (A, 1 )), tol = tol)... ,
603
- )
612
+ _eigen! (A:: SymTridiagonal ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
613
+ LinearAlgebra. Eigen (
614
+ LinearAlgebra. sorteig! (
615
+ eigQL! (
616
+ A;
617
+ vectors = Matrix {eltype(A)} (I, size (A, 1 ), size (A, 1 )),
618
+ tol
619
+ )... ,
620
+ sortby == nothing ? LinearAlgebra. eigsortby : sortby
621
+ )...
622
+ )
604
623
605
- _eigen! (A:: Hermitian ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) = _eigen! (symtri! (A), tol = tol)
624
+ _eigen! (A:: Hermitian ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
625
+ _eigen! (symtri! (A); tol, sortby)
606
626
607
- _eigen! (A:: Symmetric{<:Real} ; tol = eps (eltype (A)), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) = _eigen! (symtri! (A), tol = tol)
627
+ _eigen! (A:: Symmetric{<:Real} ; tol = eps (eltype (A)), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
628
+ _eigen! (symtri! (A); tol, sortby)
608
629
609
630
LinearAlgebra. eigen! (A:: SymmetricTridiagonalFactorization ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
610
631
_eigen! (A; tol, sortby)
611
632
612
- LinearAlgebra. eigen! (A:: SymTridiagonal ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) = _eigen! (A; tol, sortby)
633
+ LinearAlgebra. eigen! (A:: SymTridiagonal ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
634
+ _eigen! (A; tol, sortby)
613
635
614
- LinearAlgebra. eigen! (A:: Hermitian ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) = _eigen! (A; tol, sortby)
636
+ LinearAlgebra. eigen! (A:: Hermitian ; tol = eps (real (eltype (A))), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
637
+ _eigen! (A; tol, sortby)
615
638
616
- LinearAlgebra. eigen! (A:: Symmetric{<:Real} ; tol = eps (eltype (A)), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) = _eigen! (A; tol, sortby)
639
+ LinearAlgebra. eigen! (A:: Symmetric{<:Real} ; tol = eps (eltype (A)), sortby:: Union{Function,Nothing} = LinearAlgebra. eigsortby) =
640
+ _eigen! (A; tol, sortby)
617
641
618
642
619
643
function eigen2! (
@@ -623,29 +647,35 @@ function eigen2!(
623
647
V = zeros (eltype (A), 2 , size (A, 1 ))
624
648
V[1 ] = 1
625
649
V[end ] = 1
626
- eigQL! (A. diagonals, vectors = rmul! (V, A. Q), tol = tol)
650
+ LinearAlgebra. sorteig! (
651
+ eigQL! (A. diagonals; vectors = rmul! (V, A. Q), tol)... ,
652
+ LinearAlgebra. eigsortby
653
+ )
627
654
end
628
655
629
656
function eigen2! (A:: SymTridiagonal ; tol = eps (real (float (one (eltype (A))))))
630
657
V = zeros (eltype (A), 2 , size (A, 1 ))
631
658
V[1 ] = 1
632
659
V[end ] = 1
633
- eigQL! (A, vectors = V, tol = tol)
660
+ LinearAlgebra. sorteig! (
661
+ eigQL! (A; vectors = V, tol)... ,
662
+ LinearAlgebra. eigsortby
663
+ )
634
664
end
635
665
636
666
eigen2! (A:: Hermitian ; tol = eps (float (real (one (eltype (A)))))) =
637
- eigen2! (symtri! (A), tol = tol)
667
+ eigen2! (symtri! (A); tol)
638
668
639
669
eigen2! (A:: Symmetric{<:Real} ; tol = eps (float (one (eltype (A))))) =
640
- eigen2! (symtri! (A), tol = tol)
670
+ eigen2! (symtri! (A); tol)
641
671
642
672
643
673
eigen2 (A:: SymTridiagonal ; tol = eps (float (real (one (eltype (A)))))) =
644
- eigen2! (copy (A), tol = tol)
674
+ eigen2! (copy (A); tol)
645
675
646
- eigen2 (A:: Hermitian , tol = eps (float (real (one (eltype (A)))))) = eigen2! (copy (A), tol = tol)
676
+ eigen2 (A:: Hermitian ; tol = eps (float (real (one (eltype (A)))))) = eigen2! (copy (A); tol)
647
677
648
- eigen2 (A:: Symmetric{<:Real} , tol = eps (float (one (eltype (A))))) = eigen2! (copy (A), tol = tol)
678
+ eigen2 (A:: Symmetric{<:Real} ; tol = eps (float (one (eltype (A))))) = eigen2! (copy (A); tol)
649
679
650
680
# First method of each type here is identical to the method defined in
651
681
# LinearAlgebra but is needed for disambiguation
0 commit comments