Non-Hermitian algorithm#
This page describes the non-Hermitian extension of Pymablock’s main algorithm. Using it requires an extra flag:
H_tilde, U, U_inv = block_diagonalize(..., hermitian=False)
Here the third returned series is the perturbative inverse of \(U\). This is because unlike in Hermitian block-diagonalization, the inverse transformation is not the adjoint of the forward transformation and we track it explicitly.
The overall structure is the same:
split the Hamiltonian into selected and remaining parts,
organize perturbation theory through multivariate Cauchy products,
avoid unnecessary products by \(H_0\),
reduce each perturbative order to one Sylvester solve.
Throughout this page, we use the notation from the main algorithm page.
Problem statement#
We seek a perturbative similarity transform
with
Here \(S\) denotes the selected part and \(R\) the remainder to eliminate, exactly as in the main algorithm. Since \(\mathcal{U}^{-1}\neq \mathcal{U}^{\dagger}\) in general, the left and right eigenvectors need not coincide.
Variables and gauge#
Like in the Hermitian case, we separate the transformation into identity at zeroth order and a correction, which allows us to define recurrence relations through Cauchy products. We first introduce \(\mathcal{U}'\) as the correction of the transformation \(\mathcal{U}\) and \(\mathcal{G}\) as the correction of its inverse \(\mathcal{U}^{-1}\):
We once again separate the terms that enter \(\mathcal{U}\) and \(\mathcal{U}^{-1}\) with the same sign from those that enter with opposite signs:
In the Hermitian case, this split gives the Hermitian and anti-Hermitian parts of \(\mathcal{U}'\). In the non-Hermitian setting, \(\mathcal{W}\) and \(\mathcal{V}\) are only auxiliary series and need not have those symmetries.
The inverse constraint \(\mathcal{U}^{-1}\mathcal{U}=1\) then gives
Because both series start at first order, Eq. (5) determines \(\mathcal{W}\) from lower orders.
The least-action principle, which in the Hermitian case fixes the non-uniqueness of \(\mathcal{U}\) by minimizing \(\|\mathcal{U}-1\|\), is not available in the non-Hermitian setting because there is no canonical norm. We therefore fix the gauge by the pragmatic choice:
This choice is simple, sparse, and close to the Hermitian construction.
Equivalence to the Hermitian algorithm
If \(\mathcal{H}\) is Hermitian and \(\mathcal{U}^{-1}=\mathcal{U}^{\dagger}\), then
Substituting \(\mathcal{G}=\mathcal{U}'^{\dagger}\) into Eq. (4) gives the Hermitian and anti-Hermitian parts of \(\mathcal{U}'\):
Equation (5) becomes
The gauge condition becomes
This is the Hermitian parameterization, together with the same gauge choice and selected-part recurrence.
Derivation#
As in the main algorithm, we derive the non-Hermitian recurrence in a form that avoids unnecessary products by \(H_0\).
We introduce the shorthand
Starting from \(\tilde{\mathcal{H}}=(1+\mathcal{G})(\mathcal{H}_S+\mathcal{H}'_R)(1+\mathcal{U}')\), we substitute \(\mathcal{H}_S\mathcal{U}'=\mathcal{U}'\mathcal{H}_S-\mathcal{X}\) and use \(\mathcal{U}'+\mathcal{G}=-\mathcal{G}\mathcal{U}'\) to cancel the terms multiplied by \(\mathcal{H}_S\):
This form lets us assemble the effective Hamiltonian from \(\mathcal{X}\), \(\mathcal{A}\), and \(\mathcal{B}\) without extra products by \(H_0\).
The elimination condition \(\tilde{\mathcal{H}}_R=0\) implies
We split \(\mathcal{X}\) into the contributions from \(\mathcal{V}\) and \(\mathcal{W}\):
Equation (5) rewrites the \(\mathcal{W}\) commutator in terms of Cauchy products. We also define
This yields
Since \(\mathcal{B}=\mathcal{X}-\mathcal{H}'_R-\mathcal{A}\), the remaining part \(\mathcal{Y}=[\mathcal{V},\mathcal{H}_S]\) is
The gauge condition (6) implies \([\mathcal{V},H_0]_S=0\), so the selected part only involves \(\mathcal{H}'_S\):
Using \(\mathcal{B}=\mathcal{Y}+\mathcal{Z}-\mathcal{H}'_R-\mathcal{A}\), we obtain
For the remaining part, we solve the Sylvester equation
Equation (20) is the only Sylvester solve. Every earlier step is a Cauchy product between series that start at first order, so the algorithm never multiplies by \(H_0\) outside that solve.
Closed recurrence#
At order \(\mathbf{n}\), the implementation reduces to the following closed recurrence.
With this notation, the order-by-order recurrence is
The last line is the only Sylvester solve. All earlier lines are Cauchy products between series that start at first order, so order \(\mathbf{n}\) depends only on lower orders. Eq. (21) then gives \(\tilde{\mathcal{H}}_{\mathbf{n},S}\).
Implicit mode#
The Hermitian implicit construction assumes that the explicit subspace is described by one orthonormal basis \(\Psi_E\). The missing block is then represented by the orthogonal complement
For a genuinely non-Hermitian \(H_0\), we instead use biorthogonal right and left bases:
The columns of \(R_E\) span the explicit subspace, and the columns of \(L_E\) span its dual. The projector onto this subspace and its complement are
In general this projector is oblique rather than orthogonal, so it is not self-adjoint. The block projections become
The Sylvester equations keep the same structure as in the Hermitian implicit derivation, but they use this oblique \(Q\) and the explicit energies
So the direct implicit solver needs the same two ingredients:
right subspace bases to define the retained states,
left dual bases to define the projection and the complementary block.