constructor for complex triangular Schur from real quasitriangular Schur #40573
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This adds a constructor
Schur{Complex}(S)
that converts a real Schur factorizationS
into a complex one, based on code by @RalphAS from GenericSchur.jl. This is useful because the real Schur factorization is only "quasitriangular" — it can have 2×2 blocks along the diagonal corresponding to complex eigenvalue pairs — whereas many algorithms require the complex upper-triangular factorization.Previously, one obtained the complex Schur factorization by
schur(complex(A))
, but this seems to be 2–3× slower thanSchur{Complex}(schur(A))
for realA
.In consequence, a number of the Schur-based algorithms, such as
asin(A)
andA^3.2
, are about 2× faster for realA
after this PR. There is also a smaller speedup forsqrt
andlog
.