Hi,

I am trying to write the iDMRG algorithm in Matlab. But I have some problems calculating the local spin expectation and spin-spin correlation. I’m writing to ask where I made a mistake and how I could revise it.

It’s spin 1/2 XXZ Heisenberg chain that I am currently working on. The Hamiltonian is

H=\sum_{<ij>} \vec{S_i} \vec{S_j}

I calculated \langle S_{z, i} \rangle for each site i and spin-spin correlation matrix \langle S_{z, i} S_{z, j} \rangle.

This is how I do the calculation:

**Firstly**, in each DMRG step when I expand the block, I keep in track S_{z,i} operator of each site in the block, and transform them correspondingly.

For the added new site, the S_{z,i} operator is simply

```
kron(complex(eye(length(H))), Sz0);
```

where Sz0 is the Pauli z matrix, H is the Hamiltonian of the block to be expanded.

For the sites already in the block, their S_{z,i} operator is transformed as

```
kron(Sz(i).Sz, complex(eye(dim)));
```

where Sz(i).Sz is the S_{z, i} operator already kept with the block to be expanded. And dim=2 since it’s a spin 1/2 system.

**Secondly**, in the final step of iDMRG, I get the ground state 1D vector $$ by

```
[Psi, E0] = eigs(SH, 1, 'SA');
```

where SH is the superblock Hamiltonian.

And with the stored S_{z, i} operators of the superblock, and the ground state 1D vector Psi of super Hamiltonian, I calculate \langle S_{z, i} \rangle and \langle S_{z, i} S_{z, j} \rangle in this way:

```
Szi_exp = Psi' * Szi * Psi;
SziSzj_exp = Psi' * Szi * Szj * Psi;
```

My final results are shown as follow:

The spin expectation result doesn’t look quite wrong. But the spin-spin correlation result is clearly wrong.

Moreover, when I add a large z-direction magnetic field term to the Hamiltonian, i.e. \sum_i h {S}_{i, z}, the expectation and correlation result is:

The expectation result in h=0 case looks alright, but in large h case, the central peak is surly problematic. I don’t think it’s a coding issue, since I reverse the magnetic field direction into -z, and peak reversed.

The spin-spin correlation results are clearly wrong.

I really want to figure out what is wrong with my code. If that is too much to ask, I really hope to know if there is some important aspect missing. I’d also love to get some suggestions on your thoughts in calculating expectation and correlation values with Matlab.

Thanks.