How to numerically diagonalize a Hamiltonian in a subspace?

In summary, the conversation discusses the exact diagonalization of a Hamiltonian for a specific number of sites and spinless fermions. The Hamiltonian is expanded using creation and annihilation operators, and the number operator is introduced. The goal is to numerically diagonalize the Hamiltonian in the subsector of the Hilbert space with a chosen number of particles. The original Hamiltonian conserves particle number, making it block diagonal. The solution involves working in a specific particle number sector and calculating the ground state energy using a DMRG algorithm. The correctness of the results is verified by comparing them with a reference article.
  • #1
Luqman Saleem
18
3
I want to exactly diagonalize the following Hamiltonian for ##10## number of sites and ##5## number of spinless fermions
$$H = -t\sum_i^{L-1} \big[c_i^\dagger c_{i+1} - c_i c_{i+1}^\dagger\big] + V\sum_i^{L-1} n_i n_{i+1}$$
here ##L## is total number of sites, creation (##c^\dagger##) and annihilation (##c##) operators are defined as following
$$
c =
\begin{bmatrix}
0&0\\1&0
\end{bmatrix}
$$
and ##n_i = c_i^\dagger c_i## is number operator.

To exactly diagonalize (for simplicity let's take ##L=4## sites), one can expand ##H## as

$$H = -t\big[
c_1^\dagger \sigma_1^z \otimes c_2\otimes I_3 \otimes I_4 \\
+ I_1 \otimes c_2^\dagger \sigma_2^z \otimes c_3\otimes I_4\\
+ I_1 \otimes I_2 \otimes c_3^\dagger\sigma_3^z \otimes c_4
\big]+h.c.\\
+V\big[
n_1 \otimes n_2 \otimes I_3 \otimes I_4\\
+I_1 \otimes n_2 \otimes n_3 \otimes I_4\\
+I_1 \otimes I_2 \otimes n_3 \otimes n_4
\big]$$
where ##\sigma^z## (Pauli matrix) is just simple matrix multiplication for the sake of anti-commutation relation.

So far so good. (please correct me if I am doing anything wrong)!

**Question:**

I used the above method and numerically calculated the ground state and found that the above method gives the correct results for ##V=0## but when ##V\ne0## the results are wrong.

Eventually, I get to the point that I am not taking care of the number of particles in the system. How do we numerically diagonalize a Hamiltonian matrix in the subsector of Hilbert space with a chosen number of particles?

**Note:**

I want to use this diagonalization in DMRG algorithm (in finding the ground state energy of the Hamiltonian at half-filling)
 
Physics news on Phys.org
  • #2
Luqman Saleem said:
I want to exactly diagonalize the following Hamiltonian for ##10## number of sites and ##5## number of spinless fermions
$$H = -t\sum_i^{L-1} \big[c_i^\dagger c_{i+1} - c_i c_{i+1}^\dagger\big] + V\sum_i^{L-1} n_i n_{i+1}$$
here ##L## is total number of sites, creation (##c^\dagger##) and annihilation (##c##) operators are defined as following
$$
c =
\begin{bmatrix}
0&0\\1&0
\end{bmatrix}
$$
and ##n_i = c_i^\dagger c_i## is number operator.

To exactly diagonalize (for simplicity let's take ##L=4## sites), one can expand ##H## as

$$H = -t\big[
c_1^\dagger \sigma_1^z \otimes c_2\otimes I_3 \otimes I_4 \\
+ I_1 \otimes c_2^\dagger \sigma_2^z \otimes c_3\otimes I_4\\
+ I_1 \otimes I_2 \otimes c_3^\dagger\sigma_3^z \otimes c_4
\big]+h.c.\\
+V\big[
n_1 \otimes n_2 \otimes I_3 \otimes I_4\\
+I_1 \otimes n_2 \otimes n_3 \otimes I_4\\
+I_1 \otimes I_2 \otimes n_3 \otimes n_4
\big]$$
where ##\sigma^z## (Pauli matrix) is just simple matrix multiplication for the sake of anti-commutation relation.

So far so good. (please correct me if I am doing anything wrong)!

**Question:**

I used the above method and numerically calculated the ground state and found that the above method gives the correct results for ##V=0## but when ##V\ne0## the results are wrong.

Eventually, I get to the point that I am not taking care of the number of particles in the system. How do we numerically diagonalize a Hamiltonian matrix in the subsector of Hilbert space with a chosen number of particles?

**Note:**

I want to use this diagonalization in DMRG algorithm (in finding the ground state energy of the Hamiltonian at half-filling)

How do you know what the right answers are? Are you working from a reference article?
 
  • #3
atyy said:
How do you know what the right answers are? Are you working from a reference article?

Yes. I am comparing my results with https://arxiv.org/abs/1809.05199.
 
  • Like
Likes atyy
  • #4
atyy said:
How do you know what the right answers are? Are you working from a reference article?

Actually, the following reason has forced me to think that I am doing it wrong:

In the above formalism (that I have mentioned), the basis set is also tensor multiplied. The degree of freedom per site is 2 i.e. occupied (1) or empty (0). For 2 sites, basis set will be:
$$
\begin{bmatrix}
1\\0
\end{bmatrix}
\otimes
\begin{bmatrix}
1\\0
\end{bmatrix} =
\begin{bmatrix}
11\\10\\01\\00
\end{bmatrix}
$$
and for 4 sites, basis will be:
$$
\begin{bmatrix}
11\\10\\01\\00
\end{bmatrix}
\otimes
\begin{bmatrix}
11\\10\\01\\00
\end{bmatrix}
=
\begin{bmatrix}
1111&1110&1101&1100&1011&1010&1001&1000&0111&0110&0101&0100&0011&0010&0001&0000
\end{bmatrix}
$$

As, it can be seen that if we construct full Hamiltonian (for 4 sites) using the above method, we will be dealing with total 16 bases. And the number of particles is not conserved i.e. in the first basis (1111) all sites are filled while the last basis (0000) is fully empty. I want to calculate groundstate only for the half-filled system.
 
  • Like
Likes atyy
  • #5
Luqman Saleem said:
Actually, the following reason has forced me to think that I am doing it wrong:

In the above formalism (that I have mentioned), the basis set is also tensor multiplied. The degree of freedom per site is 2 i.e. occupied (1) or empty (0). For 2 sites, basis set will be:

...

and for 4 sites, basis will be:

...

As, it can be seen that if we construct full Hamiltonian (for 4 sites) using the above method, we will be dealing with total 16 bases. And the number of particles is not conserved i.e. in the first basis (1111) all sites are filled while the last basis (0000) is fully empty. I want to calculate groundstate only for the half-filled system.

I think that your approach in this post is the right idea. But I don't know why you say that the number of particles is not conserved - your original Hamiltonian does conserve particle number ##N = \sum_i c^{\dagger}_i c_i##. What this means is that your Hamiltonian is block diagonal, where the blocks are the spaces of constant values of ##N##.

What this means is that it suffices to work in a subspace of these bases you've mentioned. For the two-site case, if you write the Hamiltonian matrix in the basis
$$
\begin{bmatrix}
11\\10\\01\\00
\end{bmatrix}
$$
Then the Hamiltonian must take the form
$$
H =
\begin{bmatrix}
h_{11} & 0 & 0 & 0 \\
0 & h_{22} & h_{23} & 0 \\
0 & h_{23}^{\ast} & h_{33} & 0 \\
0 & 0 & 0 & h_{44}
\end{bmatrix}
$$
Now if you are only interested in the half-filled (##N=1##) subspace, you only need to diagonalize the 2x2 block in the middle of this thing. (Be sure you understand why this is the case!)

Extrapolating this idea to larger system sizes, you just need to find the matrix elements of ##H## in the ##N=L/2## sector and diagonalize that. Just ignore the other states. In your four-site example, you only need to diagonalize the 6x6 matrix ##H_{ij} = v^{\dagger}Hv## where
$$
v = \begin{bmatrix}
1100 \\
1010 \\
1001 \\
0110 \\
0101 \\
0011
\end{bmatrix}
$$
This makes the process much faster for small system sizes, though unfortunately the size of the ##N=L/2## subspace still grows exponentially in ##L## as ##L## gets large. If my quick calculation is correct, the case of 5 particles on 10 sites reduces to diagonalizing a 252x252 matrix (much easier than attempting the full 1024x1024 matrix for arbitrary number of particles).
 
  • Like
Likes aaroman

1. How do I determine the eigenvalues and eigenvectors of a Hamiltonian in a subspace?

To numerically diagonalize a Hamiltonian in a subspace, you will need to use a computer program or algorithm that is specifically designed for this task. The most common method is to use the diagonalization function in a linear algebra library such as NumPy or MATLAB. This function will automatically calculate the eigenvalues and eigenvectors of the Hamiltonian matrix.

2. Can I diagonalize a Hamiltonian in a subspace by hand?

While it is possible to diagonalize a Hamiltonian by hand, it is not practical for most cases. The Hamiltonian matrix can be very large and complex, making it difficult to solve manually. Additionally, there are many numerical algorithms that can perform this task much faster and with more accuracy.

3. What is the significance of diagonalizing a Hamiltonian in a subspace?

Diagonalizing a Hamiltonian in a subspace is important because it allows us to simplify the mathematical representation of a physical system. By finding the eigenvalues and eigenvectors, we can determine the energy levels and corresponding wavefunctions of the system, which are crucial in understanding its behavior.

4. Are there any limitations to numerically diagonalizing a Hamiltonian in a subspace?

One limitation is that the size of the subspace must be smaller than the total size of the Hamiltonian matrix. This means that some information about the system may be lost when reducing the dimensionality. Additionally, the accuracy of the results may be affected by the numerical method used and the precision of the computer used for the calculation.

5. Can diagonalizing a Hamiltonian in a subspace be applied to any physical system?

Yes, diagonalizing a Hamiltonian in a subspace is a general method that can be applied to any physical system that can be described by a Hamiltonian. This includes quantum mechanical systems, such as atoms and molecules, as well as classical systems, such as oscillating systems or mechanical systems.

Similar threads

Replies
3
Views
2K
Replies
1
Views
1K
Replies
3
Views
982
Replies
1
Views
1K
  • Advanced Physics Homework Help
Replies
6
Views
1K
  • Engineering and Comp Sci Homework Help
Replies
1
Views
1K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
3
Views
279
  • MATLAB, Maple, Mathematica, LaTeX
Replies
4
Views
3K
Back
Top