# Source code for spectrum.eigen

```import numpy
from . import toeplitz

__all__ = ["MINEIGVAL"]

[docs]def MINEIGVAL(T0, T, TOL):
"""Finds the minimum eigenvalue of a Hermitian Toeplitz matrix

The classical power method is used together with a  fast  Toeplitz
equation solution routine.  The eigenvector is normalized to unit length.

:param T0: Scalar corresponding to real matrix element t(0)
:param T: Array of  M  complex matrix elements t(1),...,t(M) C            from the left column of the Toeplitz matrix
:param TOL: Real scalar tolerance; routine exits when [ EVAL(k) - EVAL(k-1) ]/EVAL(k-1) < TOL , where the index k denotes the iteration number.

:return:
* EVAL - Real scalar denoting the minimum eigenvalue of matrix
* EVEC - Array of  M  complex eigenvector elements associated

.. note::
* External array T must be dimensioned >= M
* array EVEC must be >= M+1
*  Internal array E must be dimensioned >= M+1 .

* **dependencies**
*  :meth:`spectrum.toeplitz.HERMTOEP`
"""
M = len(T)
eigval = 10
eigvalold = 1
eigvec  = numpy.zeros(M+1, dtype=complex)
for k in range(0,M+1):
eigvec[k] = 1+0j
it=0
#print 'initialisation',T0, T, eigval, eigvec
maxit = 15
while abs(eigvalold-eigval)>TOL*eigvalold and it<maxit:
it=it+1
eigvalold = eigval
#print 'iteration ',it, 'eigvalold=',eigvalold, 'eigval=', eigval

eig = toeplitz.HERMTOEP(T0, T, eigvec)
SUM = 0
save =0.+0j
for k in range(0, M+1):
SUM = SUM + eig[k].real**2+eig[k].imag**2
save = save +eig[k]*eigvec[k].conjugate()
SUM=1./SUM
eigval = save.real*SUM
for k in range(0,M+1):
eigvec[k] = SUM * eig[k]
if it==maxit:
print('warning reached max number of iteration (%s)' % maxit)
return eigval, eigvec

```