@@ -159,48 +159,26 @@ end
159159@inline function _eig (:: Size{(2,2)} , A:: LinearAlgebra.RealHermSymComplexHerm{T} , permute, scale) where {T <: Real }
160160 a = A. data
161161 TA = eltype (A)
162- @inbounds if A. uplo == ' U'
163- if ! iszero (a[3 ]) # A is not diagonal
164- t_half = real (a[1 ] + a[4 ]) / 2
165- tmp = norm (SVector ((a[1 ] - a[4 ])/ 2 , a[3 ]' ))
166- vals = SVector (t_half - tmp, t_half + tmp)
167-
168- v11 = vals[1 ] - a[4 ]
169- n1 = sqrt (v11' * v11 + a[3 ]' * a[3 ])
170- v11 = v11 / n1
171- v12 = a[3 ]' / n1
172-
173- v21 = vals[2 ] - a[4 ]
174- n2 = sqrt (v21' * v21 + a[3 ]' * a[3 ])
175- v21 = v21 / n2
176- v22 = a[3 ]' / n2
177-
178- vecs = @SMatrix [ v11 v21 ;
179- v12 v22 ]
180-
181- return Eigen (vals, vecs)
182- end
183- else # A.uplo == 'L'
184- if ! iszero (a[2 ]) # A is not diagonal
185- t_half = real (a[1 ] + a[4 ]) / 2
186- tmp = norm (SVector ((a[1 ] - a[4 ])/ 2 , a[2 ]))
187- vals = SVector (t_half - tmp, t_half + tmp)
188-
189- v11 = vals[1 ] - a[4 ]
190- n1 = sqrt (v11' * v11 + a[2 ]' * a[2 ])
191- v11 = v11 / n1
192- v12 = a[2 ] / n1
193-
194- v21 = vals[2 ] - a[4 ]
195- n2 = sqrt (v21' * v21 + a[2 ]' * a[2 ])
196- v21 = v21 / n2
197- v22 = a[2 ] / n2
198-
199- vecs = @SMatrix [ v11 v21 ;
200- v12 v22 ]
201-
202- return Eigen (vals,vecs)
203- end
162+ @inbounds a21 = A. uplo == ' U' ? a[3 ]' : a[2 ]
163+ @inbounds if ! iszero (a21) # A is not diagonal
164+ t_half = real (a[1 ] + a[4 ]) / 2
165+ diag_avg_diff = (a[1 ] - a[4 ])/ 2
166+ tmp = norm (SVector (diag_avg_diff, a21))
167+ vals = SVector (t_half - tmp, t_half + tmp)
168+ v11 = - tmp + diag_avg_diff
169+ n1 = sqrt (v11' * v11 + a21 * a21' )
170+ v11 = v11 / n1
171+ v12 = a21 / n1
172+
173+ v21 = tmp + diag_avg_diff
174+ n2 = sqrt (v21' * v21 + a21 * a21' )
175+ v21 = v21 / n2
176+ v22 = a21 / n2
177+
178+ vecs = @SMatrix [ v11 v21 ;
179+ v12 v22 ]
180+
181+ return Eigen (vals, vecs)
204182 end
205183
206184 # A must be diagonal if we reached this point; treatment of uplo 'L' and 'U' is then identical
0 commit comments