# openfermion.circuits.LowRankTrotterAlgorithm

A Trotter algorithm using the low rank decomposition strategy.

Inherits From: TrotterAlgorithm

### Used in the notebooks

Used in the tutorials

This algorithm simulates an InteractionOperator with real coefficients. The one-body terms are simulated in their diagonal basis; the basis change is accomplished with a Bogoliubov transformation. To simulate the two-body terms, the two-body tensor is decomposed into singular components and possibly truncating. Then, each singular component is simulated in the appropriate basis using a (non-fermionic) swap network. The general idea is based on expressing the two-body operator as $\sum{pqrs} h{pqrs} a^\dagger_p a^\dagger_q a_r as = \sum{j=0}^{J-1} \lambdaj (\sum{pq} g_{jpq} a^\dagger_p aq)^2$ One can then diagonalize the squared one-body component as math:\sum_{pq} g_{pqj} a^\dagger_p a_q = R_j (\sum_{p} f_{pj} n_p) R_j^\dagger Then, a 'low rank' Trotter step of the two-body tensor can be simulated as $\prod{j=0}^{J-1} R_j e^{-i \lambdaj \sum{pq} f{pj} f{qj} n_p n_q} R_j^\dagger$. The $$R_j$$ are Bogoliubov transformations, and one can use a swap network to simulate the diagonal $$n_p n_q$$ terms. The value of J is either fully the square of the number of qubits, which would imply no truncation, or it is specified by the user, or it is chosen so that $$\sum_{l=0}^{L-1} (\sum_{pq} |g_{lpq}|)^2 |\lambda_l| < x$$ where x is a truncation threshold specified by user.

## Methods

View source

View source

View source

### symmetric

View source

supported_types

{
<class 'openfermion.ops.representations.interaction_operator.InteractionOperator'>
}


[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"Missing the information I need" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"Too complicated / too many steps" },{ "type": "thumb-down", "id": "outOfDate", "label":"Out of date" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"Samples / code issue" },{ "type": "thumb-down", "id": "otherDown", "label":"Other" }]
[{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Easy to understand" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Solved my problem" },{ "type": "thumb-up", "id": "otherUp", "label":"Other" }]