@@ -155,30 +155,26 @@ end
155155function _schur_right_eigenvectors (Tₘ, k)
156156 n = size (Tₘ, 1 )
157157 vecs = zeros (eltype (Tₘ), n, k)
158- k == 0 && return vecs
159-
160- value_tol (λ) = eps (typeof (abs (λ))) * max (one (typeof (abs (λ))), abs (λ))
161158
162159 @inbounds for col in 1 : k
163160 vec = view (vecs, :, col)
164- fill! (vec, zero (eltype (Tₘ)))
165161 vec[col] = one (eltype (Tₘ))
166162 λ = Tₘ[col, col]
167163
168164 for row in (col- 1 ): - 1 : 1
169165 acc = zero (eltype (Tₘ))
170- for inner in (row + 1 ): col
166+ for inner in (row+ 1 ): col
171167 acc += Tₘ[row, inner] * vec[inner]
172168 end
173169 denom = Tₘ[row, row] - λ
174- if abs (denom) <= value_tol (λ )
175- vec[row] = zero (eltype (Tₘ))
170+ vec[row] = if abs (denom) <= eps ( typeof ( abs (λ))) * max ( one ( typeof ( abs (λ))), abs (λ) )
171+ zero (eltype (Tₘ))
176172 else
177- vec[row] = - acc / denom
173+ - acc / denom
178174 end
179175 end
180176
181- LinearAlgebra . normalize! (vec)
177+ normalize! (vec)
182178 end
183179
184180 return vecs
@@ -229,7 +225,6 @@ function _eigsolve(
229225 V₁ₖ = view (V, :, 1 : k)
230226 Vₖ₊₁ = view (V, :, k + 1 )
231227 Hₖ₊₁₁ₖ = view (H, k + 1 , 1 : k)
232- cache0₁ₖ = view (cache0, :, 1 : k)
233228 cache1₁ₖ = view (cache1, :, 1 : k)
234229 cache2₁ₖ = view (cache2, 1 : k)
235230
@@ -270,8 +265,7 @@ function _eigsolve(
270265 Tₘ = Hₘ
271266 vals = diag (view (Tₘ, 1 : k, 1 : k))
272267 VR = _schur_right_eigenvectors (Tₘ, k)
273- mul! (cache0₁ₖ, Uₘ, VR)
274- mul! (cache1₁ₖ, Vₘ, cache0₁ₖ)
268+ mul! (cache1₁ₖ, Vₘ, M (Uₘ * VR))
275269 vecs = copy (cache1₁ₖ)
276270 settings. auto_tidyup && tidyup! (vecs)
277271
0 commit comments