three_spins.py

three_spins.py

from __future__ import print_function

import numpy as np
from two_spins import make_spin_ops


def make_matrix(s1, s2, s3):
    return np.kron(s1, np.kron(s2, s3))


def main():
    sp_ops = make_spin_ops()
    sz = sp_ops['Sz']
    sp = sp_ops['S+']
    sm = sp_ops['S-']
    s0 = sp_ops['I']

    hamil = make_matrix(sz, sz, s0) + (make_matrix(sp, sm, s0) + make_matrix(sm, sp, s0)) / 2.0 \
          + make_matrix(s0, sz, sz) + (make_matrix(s0, sp, sm) + make_matrix(s0, sm, sp)) / 2.0 \
          + make_matrix(sz, s0, sz) + (make_matrix(sm, s0, sp) + make_matrix(sp, s0, sm)) / 2.0
    print("H =\n", hamil)

    eigval, eigvec = np.linalg.eigh(hamil)

    print("\nEigenvalues =\n", eigval)
    print("\nEigenvectors =")
    for i in range(8):
        print(eigvec[:, i])


if __name__ == '__main__':
    main()